aboutsummaryrefslogtreecommitdiff
path: root/js/tools/PenTool.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/tools/PenTool.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/tools/PenTool.js')
-rw-r--r--js/tools/PenTool.js554
1 files changed, 160 insertions, 394 deletions
diff --git a/js/tools/PenTool.js b/js/tools/PenTool.js
index 78344d18..9a69b53d 100644
--- a/js/tools/PenTool.js
+++ b/js/tools/PenTool.js
@@ -5,6 +5,7 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
5</copyright> */ 5</copyright> */
6 6
7var ShapeTool = require("js/tools/ShapeTool").ShapeTool; 7var ShapeTool = require("js/tools/ShapeTool").ShapeTool;
8var ShapesController = require("js/controllers/elements/shapes-controller").ShapesController;
8var DrawingToolBase = require("js/tools/drawing-tool-base").DrawingToolBase; 9var DrawingToolBase = require("js/tools/drawing-tool-base").DrawingToolBase;
9var defaultEventManager = require("montage/core/event/event-manager").defaultEventManager; 10var defaultEventManager = require("montage/core/event/event-manager").defaultEventManager;
10var Montage = require("montage/core/core").Montage; 11var Montage = require("montage/core/core").Montage;
@@ -12,6 +13,10 @@ var NJUtils = require("js/lib/NJUtils").NJUtils;
12var ElementMediator = require("js/mediators/element-mediator").ElementMediator; 13var ElementMediator = require("js/mediators/element-mediator").ElementMediator;
13var TagTool = require("js/tools/TagTool").TagTool; 14var TagTool = require("js/tools/TagTool").TagTool;
14var ElementController = require("js/controllers/elements/element-controller").ElementController; 15var ElementController = require("js/controllers/elements/element-controller").ElementController;
16var snapManager = require("js/helper-classes/3D/snap-manager").SnapManager;
17
18//todo remove this global var
19var g_DoPenToolMouseMove = true;
15 20
16exports.PenTool = Montage.create(ShapeTool, { 21exports.PenTool = Montage.create(ShapeTool, {
17 22
@@ -32,14 +37,10 @@ exports.PenTool = Montage.create(ShapeTool, {
32 _currentY: { value: 0, writable: true }, 37 _currentY: { value: 0, writable: true },
33 38
34 //the subpaths are what is displayed on the screen currently, with _selectedSubpath being the active one currently being edited 39 //the subpaths are what is displayed on the screen currently, with _selectedSubpath being the active one currently being edited
35 _subpaths: { value: [], writable: true },
36 _selectedSubpath: { value: null, writable: true }, 40 _selectedSubpath: { value: null, writable: true },
37 _makeMultipleSubpaths: { value: true, writable: true }, //set this to true if you want to keep making subpaths after closing current subpath 41 _makeMultipleSubpaths: { value: true, writable: true }, //set this to true if you want to keep making subpaths after closing current subpath
38 42
39 43
40 //whether or not to display the guides for debugging
41 _showGuides: { value: true, writable: true },
42
43 //whether the user has held down the Alt key 44 //whether the user has held down the Alt key
44 _isAltDown: { value: false, writable: true }, 45 _isAltDown: { value: false, writable: true },
45 46
@@ -64,6 +65,9 @@ exports.PenTool = Montage.create(ShapeTool, {
64 //the plane matrix for the first click...so the entire path is on the same plane 65 //the plane matrix for the first click...so the entire path is on the same plane
65 _penPlaneMat: { value: null, writable: true }, 66 _penPlaneMat: { value: null, writable: true },
66 67
68 //index of the anchor point that the user has hovered over
69 _hoveredAnchorIndex: {value: null, writable: true},
70
67 //constants used for picking points --- NOTE: these should be user-settable parameters 71 //constants used for picking points --- NOTE: these should be user-settable parameters
68 _PICK_POINT_RADIUS: { value: 10, writable: false }, 72 _PICK_POINT_RADIUS: { value: 10, writable: false },
69 _DISPLAY_ANCHOR_RADIUS: { value: 5, writable: false }, 73 _DISPLAY_ANCHOR_RADIUS: { value: 5, writable: false },
@@ -85,39 +89,29 @@ exports.PenTool = Montage.create(ShapeTool, {
85 ENTRY_SELECT_PATH: { value: 2, writable: false}, 89 ENTRY_SELECT_PATH: { value: 2, writable: false},
86 _entryEditMode: {value: this.ENTRY_SELECT_NONE, writable: true}, 90 _entryEditMode: {value: this.ENTRY_SELECT_NONE, writable: true},
87 91
88 // ******** Logic for selection *******
89 // (update if you change functionality!)
90 // NOTE: this is out of date...needs to be updated
91 //
92 // Start by setting edit mode to EDIT_NONE
93 //
94 // DOUBLE_CLICK (Left mouse button only):
95 //
96 //
97 // SINGLE_CLICK (Left mouse button only):
98 // If LeftClick selects an anchor point
99 // append EDIT_ANCHOR mode
100 // If LeftClick selects a previous point of selected anchor
101 // append EDIT_PREV mode
102 // If LeftClick selects a next point of selected anchor
103 // append EDIT_NEXT mode
104 //
105
106 // ********* Logic for editing *******
107 // (update if you change functionality!)
108 // NOTE: this is out of date...needs to be updated
109 //
110 // Start by computing mouse disp
111 //
112 // If EDIT_PREV_NEXT mode
113 // add disp to next and mirror it to prev
114 // ELSE
115 // If EDIT_ANCHOR (or _PREV, _NEXT)
116 // map displacement to anchor (similarly to prev and next)
117 //
118 //
119 92
120 93
94 _getUnsnappedPosition: {
95 value: function(x,y){
96 var elemSnap = snapManager.elementSnapEnabled();
97 var gridSnap = snapManager.gridSnapEnabled();
98 var alignSnap = snapManager.snapAlignEnabled();
99
100 snapManager.enableElementSnap(false);
101 snapManager.enableGridSnap(false);
102 snapManager.enableSnapAlign(false);
103
104 var point = webkitConvertPointFromPageToNode(this.application.ninja.stage.canvas, new WebKitPoint(x,y));
105 var unsnappedpos = DrawingToolBase.getHitRecPos(snapManager.snap(point.x, point.y, false));
106
107 snapManager.enableElementSnap(elemSnap);
108 snapManager.enableGridSnap(gridSnap);
109 snapManager.enableSnapAlign(alignSnap);
110
111 return unsnappedpos;
112 }
113 },
114
121 ShowToolProperties: { 115 ShowToolProperties: {
122 value: function () { 116 value: function () {
123 this._penView = PenView.create(); 117 this._penView = PenView.create();
@@ -137,21 +131,18 @@ exports.PenTool = Montage.create(ShapeTool, {
137 //NOTE: this will work on Webkit only...IE has different codes (left: 1, middle: 4, right: 2) 131 //NOTE: this will work on Webkit only...IE has different codes (left: 1, middle: 4, right: 2)
138 return; 132 return;
139 } 133 }
140 //BEGIN ShapeTool code
141 if (this._canDraw) { 134 if (this._canDraw) {
142 this._isDrawing = true; 135 this._isDrawing = true;
143 } 136 }
144 137
145 //this._targetedCanvas = stageManagerModule.stageManager.GetObjectFromPoint(event.layerX, event.layerY, this._canOperateOnStage);
146 138
147 this.startDraw(event); 139 this.startDraw(event);
148 //END ShapeTool code
149 140
150 //assume we are not starting a new path as we will set this to true if we create a new GLSubpath() 141 //assume we are not starting a new path as we will set this to true if we create a new GLSubpath()
151 this._isNewPath = false; 142 this._isNewPath = false;
152 143
153 //add an anchor point by computing position of mouse down 144 //add an anchor point by computing position of mouse down
154 var mouseDownPos = this.getMouseDownPos(); 145 var mouseDownPos = this._getUnsnappedPosition(event.pageX, event.pageY); //this.getMouseDownPos();
155 if (mouseDownPos) { 146 if (mouseDownPos) {
156 //if we had closed the selected subpath previously, or if we have not yet started anything, create a subpath 147 //if we had closed the selected subpath previously, or if we have not yet started anything, create a subpath
157 if (this._selectedSubpath === null) { 148 if (this._selectedSubpath === null) {
@@ -160,19 +151,10 @@ exports.PenTool = Montage.create(ShapeTool, {
160 if (this._entryEditMode === this.ENTRY_SELECT_PATH){ 151 if (this._entryEditMode === this.ENTRY_SELECT_PATH){
161 //this should not happen, as ENTRY_SELECT_PATH implies there was a selected subpath 152 //this should not happen, as ENTRY_SELECT_PATH implies there was a selected subpath
162 this._entryEditMode = this.ENTRY_SELECT_NONE; 153 this._entryEditMode = this.ENTRY_SELECT_NONE;
163 } 154 console.log("Warning...PenTool handleMouseDown: changing from SELECT_PATH to SELECT_NONE");
164 } else if (this._selectedSubpath.getIsClosed() && this._entryEditMode !== this.ENTRY_SELECT_PATH) {
165 //since we're not in ENTRY_SELECT_PATH mode, we don't edit the closed path...we start a new path regardless of where we clicked
166 if (this._makeMultipleSubpaths) {
167 this._subpaths.push(this._selectedSubpath);
168 this._penCanvas = null;
169 this._penPlaneMat = null;
170 this._snapTarget = null;
171 this._selectedSubpath = new GLSubpath();
172 this._isNewPath = true;
173 } 155 }
174 } 156 }
175 157
176 var prevSelectedAnchorIndex = this._selectedSubpath.getSelectedAnchorIndex(); 158 var prevSelectedAnchorIndex = this._selectedSubpath.getSelectedAnchorIndex();
177 // ************* Add/Select Anchor Point ************* 159 // ************* Add/Select Anchor Point *************
178 //check if the clicked location is close to an anchor point...if so, make that anchor the selected point and do nothing else 160 //check if the clicked location is close to an anchor point...if so, make that anchor the selected point and do nothing else
@@ -187,6 +169,8 @@ exports.PenTool = Montage.create(ShapeTool, {
187 //we have picked the endpoint of this path...reverse the path if necessary 169 //we have picked the endpoint of this path...reverse the path if necessary
188 if (selAnchorIndex ===0){ 170 if (selAnchorIndex ===0){
189 //reverse this path 171 //reverse this path
172 this._selectedSubpath.reversePath();
173 selAnchorIndex = this._selectedSubpath.getSelectedAnchorIndex();
190 } 174 }
191 this._isPickedEndPointInSelectPathMode = true; 175 this._isPickedEndPointInSelectPathMode = true;
192 } 176 }
@@ -219,8 +203,19 @@ exports.PenTool = Montage.create(ShapeTool, {
219 } 203 }
220 } 204 }
221 } 205 }
206
207 //the clicked location is not close to the path or any anchor point
222 if (whichPoint === this._selectedSubpath.SEL_NONE) { 208 if (whichPoint === this._selectedSubpath.SEL_NONE) {
223 if (this._entryEditMode !== this.ENTRY_SELECT_PATH) { 209 if (this._entryEditMode !== this.ENTRY_SELECT_PATH) {
210 //since we're not in ENTRY_SELECT_PATH mode, we don't edit the closed path...we start a new path if we clicked far away from selected path
211 if (this._selectedSubpath.getIsClosed() && this._makeMultipleSubpaths) {