aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/RDGE/GLSubpath.js
diff options
context:
space:
mode:
authorJonathan Duran2012-02-09 12:10:37 -0800
committerJonathan Duran2012-02-09 12:10:37 -0800
commit2092acf520e3f346f15e42c76c2f616e7d094c97 (patch)
tree9b6948aa3efc69015ed6988540e66984f34ef79c /js/helper-classes/RDGE/GLSubpath.js
parent74832b23c768974f71a32044c5d5481909ece931 (diff)
downloadninja-2092acf520e3f346f15e42c76c2f616e7d094c97.tar.gz
Squashed commit of the following:
commit ce81a3f4387d80f9ac406e73b843fb5dbe9cf432 Merge: e78f431 fba39db Author: Valerio Virgillito <valerio@motorola.com> Date: Thu Feb 9 11:57:35 2012 -0800 Merge pull request #26 from pushkarjoshi/pentool Pentool commit e78f4312c194d9e8188075cf1fe87e4be22b24e4 Author: Valerio Virgillito <valerio@motorola.com> Date: Thu Feb 9 11:56:40 2012 -0800 adding oneway to the 3d bindings to fix a bug where the stage was getting selected. Signed-off-by: Valerio Virgillito <valerio@motorola.com> commit fba39dbb3bd64eddf6162fbf57232089e446fb06 Author: Pushkar Joshi <pushkar@motorola.com> Date: Thu Feb 9 10:50:05 2012 -0800 removing shaders commit fa700027b541ec8f37c55f4fe17da5f78759ebd5 Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 8 16:06:37 2012 -0800 fill all paths even if they are open commit 18243deb66ab14a014756bfb0be1a52648c7771a Merge: 802e92e 0537f8f Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 8 15:42:40 2012 -0800 Merge branch 'master' into pentool Conflicts: js/helper-classes/RDGE/GLWorld.js js/helper-classes/RDGE/MaterialsLibrary.js commit 802e92eb70b00849dadacf2c6590d27edbe65d99 Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 8 15:39:47 2012 -0800 bug fixes for better anchor point rotation and removing snapping on hover and mouse down commit 9b6b228524f14bf65ba60aaf3d0993c8ec5bff2d Author: Pushkar Joshi <pushkar@motorola.com> Date: Tue Feb 7 15:22:11 2012 -0800 some minor bug fixes and code cleanup commit 4bbe42e6d01fd0f81d13357a75b40eae9925dda3 Merge: e7aa17a 8950b34 Author: Pushkar Joshi <pushkar@motorola.com> Date: Tue Feb 7 07:21:27 2012 -0800 Merge branch 'master' into pentool commit e7aa17a9b472640355e95c54841399f6203050d4 Author: Pushkar Joshi <pushkar@motorola.com> Date: Tue Feb 7 07:20:28 2012 -0800 don't use colorToHex function because it only works for 3D color (needs a fix to colorToHex) commit acc500d1f1c76f4e7c93ae1cfea8d925ca95e7b9 Merge: 4d4de64 4222db9 Author: Pushkar Joshi <pushkar@motorola.com> Date: Thu Feb 2 11:28:45 2012 -0800 Merge branch 'working' of c:/Code/github/emueller/ninja-internal/ into pentool commit 4d4de64472603426a73b26cc98ba8206190949b8 Merge: 0e87c02 5233508 Author: Pushkar Joshi <pushkar@motorola.com> Date: Thu Feb 2 11:19:30 2012 -0800 Merge branch 'master' into pentool commit 4222db97e353fb65fab787ba5927d16d9fa4e1f7 Author: hwc487 <hwc487@motorola.com> Date: Wed Feb 1 16:18:26 2012 -0800 Removed a console log and set the Plasma material to animating. commit 30bc466a0ac80f8303e223c19704b90457293cdc Author: hwc487 <hwc487@motorola.com> Date: Wed Feb 1 15:57:20 2012 -0800 Fixed plane orientations for view orientations other than front. commit 11db5a63bda57c630eaf1d8baded9b79ca7ac1f2 Author: hwc487 <hwc487@motorola.com> Date: Wed Feb 1 15:11:21 2012 -0800 listen for the appMouseUp event in the Pan tool commit 823945a2bcb42bbf9c6a1cd0ef723b8f415e557f Author: hwc487 <hwc487@motorola.com> Date: Wed Feb 1 14:39:46 2012 -0800 factor in the zoom factor when drawing the stage compass. commit 0e87c02e74e08c7bf156373b0d2459563e17ecd6 Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 1 14:38:15 2012 -0800 make GLAnchorPoint functions as part of its prototype commit 5a288b9d3f8e6690149978d9d0e7bea98cc81312 Author: hwc487 <hwc487@motorola.com> Date: Wed Feb 1 14:09:24 2012 -0800 Fix for a marquee zoom bug. commit 715f95cacead0025a57823e4cefa22e618f15df0 Author: hwc487 <hwc487@motorola.com> Date: Wed Feb 1 14:00:06 2012 -0800 mouse wheel for zoom tool commit 62d38a080b2918a0284c854e9bf882bfeeea1e0b Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 1 13:21:11 2012 -0800 avoid overriding GlGeomObj translate method commit 799369e153baf92eb10f26e91a1ab664900da8ed Merge: b2ce8b8 c0f4374 Author: hwc487 <hwc487@motorola.com> Date: Wed Feb 1 13:06:17 2012 -0800 Merge branch 'ToolFixes' of github.com:mqg734/ninja-internal into working commit b2ce8b819cc85a558d862c04965b7e65a6ce8640 Author: hwc487 <hwc487@motorola.com> Date: Wed Feb 1 13:05:32 2012 -0800 changes to allow minimal rendering ofnon-animated materials. commit ada488781ff815a827e7f5903f2c55773e3be0f3 Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 1 12:16:11 2012 -0800 when selecting anchor points, first check if the selected anchor position is close enough commit 107f79288ed87a282dd52075640297cc02bdf318 Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 1 12:00:44 2012 -0800 performance improvement: add most of the GLSubpath functions to its prototype commit c00d5d3072e487be200559f692ce4399222d5fa5 Author: Pushkar Joshi <pushkar@motorola.com> Date: Tue Jan 31 14:25:05 2012 -0800 handle the case of proper redraw when the alt key is held down even after mouse up commit c006b3e75d5e23da63687a04cd30bf56a3a8a80d Merge: f0e3fa6 1d8af9f Author: Pushkar Joshi <pushkar@motorola.com> Date: Tue Jan 31 12:07:43 2012 -0800 Merge branch 'master' into pentool commit f0e3fa691b3c042c9fc49a7a0cde8ddf8100c195 Author: Pushkar Joshi <pushkar@motorola.com> Date: Tue Jan 31 12:05:15 2012 -0800 display the anchor point to be selected on mouse hover commit aa1b4b78d9e1b9cc15529dbf7196b7ac8a88e260 Merge: 0b8d8b2 6066b9b Author: hwc487 <hwc487@motorola.com> Date: Tue Jan 31 10:46:48 2012 -0800 Merge branch 'ToolFixes' of github.com:mqg734/ninja-internal into working Conflicts: js/stage/stage.reel/stage.js commit 0b8d8b2eb595b64ef53440b949f3c5ec891daf8a Merge: 8e43a46 e4837ed Author: hwc487 <hwc487@motorola.com> Date: Tue Jan 31 09:22:56 2012 -0800 Merge branch 'master' of github.com:Motorola-Mobility/ninja-internal into working commit 8e43a46e3d79323fe06dc7771bc611a2c3c85c5c Author: hwc487 <hwc487@motorola.com> Date: Mon Jan 30 16:15:12 2012 -0800 Renderer startup handling of non-animated materials. Changed zoom from the document bar to keep the location center of the viewable portion of the document fixed. commit c41d2c2b749b67921f243fb7594ce0cdb1ccce36 Merge: 86a801c f129a23 Author: hwc487 <hwc487@motorola.com> Date: Mon Jan 30 16:09:00 2012 -0800 Merge branch 'staging' of github.com:Motorola-Mobility/ninja-internal into working commit 972e0ce4df7b332601ad006ca8b7dd9e189a59ef Author: Pushkar Joshi <pushkar@motorola.com> Date: Mon Jan 30 14:38:48 2012 -0800 do the fill before the stroke for the path, so the stroke width renders acc. to user specification commit da7ad067b146200847b543faf288844221dff928 Author: Pushkar Joshi <pushkar@motorola.com> Date: Mon Jan 30 14:30:31 2012 -0800 missed a couple of pen tool property files on last checkin commit 76abbaafb0d90bb1dc9c63a5a5a78ab95bb00420 Author: Pushkar Joshi <pushkar@motorola.com> Date: Mon Jan 30 13:56:33 2012 -0800 Merge pushkar branch on gerritt with github version commit 86a801c057fc3b0580d6130be5740c2ee503444f Author: hwc487 <hwc487@motorola.com> Date: Fri Jan 27 15:52:36 2012 -0800 updated from old repo Signed-off-by: Jonathan Duran <jduran@motorola.com>
Diffstat (limited to 'js/helper-classes/RDGE/GLSubpath.js')
-rw-r--r--js/helper-classes/RDGE/GLSubpath.js2317
1 files changed, 887 insertions, 1430 deletions
diff --git a/js/helper-classes/RDGE/GLSubpath.js b/js/helper-classes/RDGE/GLSubpath.js
index 55b7e49a..3200cf59 100644
--- a/js/helper-classes/RDGE/GLSubpath.js
+++ b/js/helper-classes/RDGE/GLSubpath.js
@@ -4,7 +4,7 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. 4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */ 5</copyright> */
6 6
7// Todo: This shoudl be converted to a module 7// Todo: This entire class should be converted to a module
8var VecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; 8var VecUtils = require("js/helper-classes/3D/vec-utils").VecUtils;
9 9
10 10
@@ -35,6 +35,7 @@ function SegmentIntersections(){
35// representation a sequence of cubic bezier curves. 35// representation a sequence of cubic bezier curves.
36// Derived from class GLGeomObj 36// Derived from class GLGeomObj
37/////////////////////////////////////////////////////////////////////// 37///////////////////////////////////////////////////////////////////////
38
38function GLSubpath() { 39function GLSubpath() {
39 /////////////////////////////////////////////////// 40 ///////////////////////////////////////////////////
40 // Instance variables 41 // Instance variables
@@ -50,14 +51,6 @@ function GLSubpath() {
50 51
51 this._UnprojectedAnchors = []; 52 this._UnprojectedAnchors = [];
52 53
53 //offset path samples and the points on the input path they map to
54 this._offsetPointsLeft = [];
55 this._offsetPointsRight = [];
56
57 //triangles determined by the offset points
58 this._offsetTrianglesLeft = [];
59 this._offsetTrianglesRight = [];
60
61 //initially set the _dirty bit so we will construct samples 54 //initially set the _dirty bit so we will construct samples
62 this._dirty = true; 55 this._dirty = true;
63 56
@@ -88,7 +81,6 @@ function GLSubpath() {
88 this._planeMatInv = null; 81 this._planeMatInv = null;
89 this._planeCenter = null; 82 this._planeCenter = null;
90 83
91 // initialize the inherited members
92 this.inheritedFrom = GLGeomObj; 84 this.inheritedFrom = GLGeomObj;
93 this.inheritedFrom(); 85 this.inheritedFrom();
94 86
@@ -105,681 +97,545 @@ function GLSubpath() {
105 this._DEFAULT_STROKE_WIDTH = 20; //use only if stroke width not specified 97 this._DEFAULT_STROKE_WIDTH = 20; //use only if stroke width not specified
106 this._MAX_OFFSET_ANGLE = 10; //max angle (in degrees) between consecutive vectors from curve to offset path 98 this._MAX_OFFSET_ANGLE = 10; //max angle (in degrees) between consecutive vectors from curve to offset path
107 99
108 ///////////////////////////////////////////////////////// 100 // (current GLGeomObj complains if buildBuffers/render is added to GLSubpath prototype)
109 // Property Accessors/Setters 101 //buildBuffers
110 ///////////////////////////////////////////////////////// 102 // Build the stroke vertices, normals, textures and colors
111 this.setWorld = function (world) { this._world = world; } 103 // Add that array data to the GPU using OpenGL data binding
112 this.getWorld = function () { return this._world; } 104 this.buildBuffers = function () {
113 this.makeDirty = function () {this._dirty = true;} 105 return; //no need to do anything for now
114 this.geomType = function () { return this.GEOM_TYPE_CUBIC_BEZIER; } 106 }//buildBuffers()
115 this.setDrawingTool = function (tool) {this._drawingTool = tool;}
116 this.getDrawingTool = function () {return this._drawingTool;}
117 this.setPlaneMatrix = function(planeMat){this._planeMat = planeMat;}
118 this.setPlaneMatrixInverse = function(planeMatInv){this._planeMatInv = planeMatInv;}
119 this.setPlaneCenter = function(pc){this._planeCenter = pc;}
120
121 this.getCanvasX = function(){return this._canvasX;}
122 this.getCanvasY = function(){return this._canvasY;}
123 this.setCanvasX = function(cx){this._canvasX=cx;}
124 this.setCanvasY = function(cy){this._canvasY=cy;}
125
126 this.getIsClosed = function () {return this._isClosed;}
127 this.setIsClosed = function (isClosed) {
128 if (this._isClosed !== isClosed) {
129 this._isClosed = isClosed;
130 this._dirty = true;
131 }
132 }
133 this.getNumAnchors = function () { return this._Anchors.length; }
134 this.getAnchor = function (index) { return this._Anchors[index]; }
135 this.addAnchor = function (anchorPt) {
136 this._Anchors.push(anchorPt);
137 this._selectedAnchorIndex = this._Anchors.length-1;
138 this._dirty = true;
139 }
140 107
141 this.insertAnchor = function(anchorPt, index){ 108 //render
142 this._Anchors.splice(index, 0, anchorPt); 109 // specify how to render the subpath in Canvas2D
143 } 110 this.render = function () {
111 // get the world
112 var world = this.getWorld();
113 if (!world) throw( "null world in subpath render" );
144 114
145 //remove and return anchor at specified index, return null on error 115 // get the context
146 this.removeAnchor = function (index) { 116 var ctx = world.get2DContext();
147 var retAnchor = null; 117 if (!ctx) throw ("null context in subpath render")
148 if (index < this._Anchors.length) {
149 retAnchor = this._Anchors.splice(index, 1);
150 this._dirty = true;
151 }
152 //deselect the removed anchor if necessary
153 if (this._selectedAnchorIndex === index){
154 this._selectedAnchorIndex = -1;
155 }
156 return retAnchor;
157 }
158 118
159 //remove all the anchor points 119 var numAnchors = this.getNumAnchors();
160 this.clearAllAnchors = function () { 120 if (numAnchors === 0)
161 this._Anchors = []; 121 return; //nothing to do for empty paths
162 this._isClosed = false;
163 this._dirty = true;
164 }
165 122
166 this.insertAnchorAtParameter = function(index, param) { 123 ctx.save();
167 if (index+1 >= this._Anchors.length && !this._isClosed) {
168 return;
169 }
170 //insert an anchor after the specified index using the parameter, using De Casteljau subdivision
171 var nextIndex = (index+1)%this._Anchors.length;
172 124
173 //build the De Casteljau points 125 this.createSamples(); //dirty bit checked in this function...will generate a polyline representation
174 var P0P1 = VecUtils.vecInterpolate(3, this._Anchors[index].getPos(), this._Anchors[index].getNext(), param); 126 var bboxMin = this.getBBoxMin();
175 var P1P2 = VecUtils.vecInterpolate(3, this._Anchors[index].getNext(), this._Anchors[nextIndex].getPrev(), param); 127 var bboxMax = this.getBBoxMax();
176 var P2P3 = VecUtils.vecInterpolate(3, this._Anchors[nextIndex].getPrev(), this._Anchors[nextIndex].getPos(), param); 128 var bboxWidth = bboxMax[0] - bboxMin[0];
129 var bboxHeight = bboxMax[1] - bboxMin[1];
130 var bboxMid = Vector.create([0.5 * (bboxMax[0] + bboxMin[0]), 0.5 * (bboxMax[1] + bboxMin[1]), 0.5 * (bboxMax[2] + bboxMin[2])]);
177 131
178 var P0P1P2 = VecUtils.vecInterpolate(3, P0P1, P1P2, param); 132 ctx.clearRect(0, 0, bboxWidth, bboxHeight);
179 var P1P2P3 = VecUtils.vecInterpolate(3, P1P2, P2P3, param);
180 var anchorPos = VecUtils.vecInterpolate(3, P0P1P2, P1P2P3, param);
181 133
182 134
183 //update the next of the anchor at index and prev of anchor at nextIndex 135 ctx.lineWidth = this._strokeWidth;
184 var isPrevCoincident = false; 136 ctx.strokeStyle = "black";
185 var isNextCoincident = false; 137 if (this._strokeColor)
186 if (VecUtils.vecDist( 3, P0P1, this._Anchors[index].getNext()) < this._SAMPLING_EPSILON) { 138 ctx.strokeStyle = MathUtils.colorToHex( this._strokeColor );
187 //no change to the next point 139 ctx.fillStyle = "white";
188 isPrevCoincident = true; 140 if (this._fillColor){
189 } else { 141 //ctx.fillStyle = MathUtils.colorToHex( this._fillColor );
190 this._Anchors[index].setNextPos(P0P1[0], P0P1[1], P0P1[2]); 142 var fillColorStr = "rgba("+parseInt(255*this._fillColor[0])+","+parseInt(255*this._fillColor[1])+","+parseInt(255*this._fillColor[2])+","+this._fillColor[3]+")";
143 ctx.fillStyle = fillColorStr;
191 } 144 }
145 var lineCap = ['butt','round','square'];
146 ctx.lineCap = lineCap[1];
147 ctx.beginPath();
192 148
193 if (VecUtils.vecDist( 3, P2P3, this._Anchors[nextIndex].getPrev()) < this._SAMPLING_EPSILON) { 149 /*
194 //no change to the prev point 150 commenting this out for now because of Chrome bug where coincident endpoints of bezier curve cause the curve to not be rendered
195 isNextCoincident = true; 151 var prevAnchor = this.getAnchor(0);
196 } else { 152 ctx.moveTo(prevAnchor.getPosX()-bboxMin[0],prevAnchor.getPosY()-bboxMin[1]);
197 this._Anchors[nextIndex].setPrevPos(P2P3[0], P2P3[1], P2P3[2]); 153 for (var i = 1; i < numAnchors; i++) {
154 var currAnchor = this.getAnchor(i);
155 ctx.bezierCurveTo(prevAnchor.getNextX()-bboxMin[0],prevAnchor.getNextY()-bboxMin[1], currAnchor.getPrevX()-bboxMin[0], currAnchor.getPrevY()-bboxMin[1], currAnchor.getPosX()-bboxMin[0], currAnchor.getPosY()-bboxMin[1]);
156 prevAnchor = currAnchor;
157 }
158 if (this._isClosed === true) {
159 var currAnchor = this.getAnchor(0);
160 ctx.bezierCurveTo(prevAnchor.getNextX()-bboxMin[0],prevAnchor.getNextY()-bboxMin[1], currAnchor.getPrevX()-bboxMin[0], currAnchor.getPrevY()-bboxMin[1], currAnchor.getPosX()-bboxMin[0], currAnchor.getPosY()-bboxMin[1]);
161 prevAnchor = currAnchor;
162 ctx.fill();
198 }