diff options
author | Jonathan Duran | 2012-02-09 12:10:37 -0800 |
---|---|---|
committer | Jonathan Duran | 2012-02-09 12:10:37 -0800 |
commit | 2092acf520e3f346f15e42c76c2f616e7d094c97 (patch) | |
tree | 9b6948aa3efc69015ed6988540e66984f34ef79c /js/helper-classes/RDGE/GLSubpath.js | |
parent | 74832b23c768974f71a32044c5d5481909ece931 (diff) | |
download | ninja-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.js | 2317 |
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 |
8 | var VecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; | 8 | var 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 | |||
38 | function GLSubpath() { | 39 | function 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 | } | 163 |