aboutsummaryrefslogtreecommitdiff
path: root/js/tools/modifier-tool-base.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/tools/modifier-tool-base.js')
-rwxr-xr-xjs/tools/modifier-tool-base.js53
1 files changed, 32 insertions, 21 deletions
diff --git a/js/tools/modifier-tool-base.js b/js/tools/modifier-tool-base.js
index 80f7d758..de73c861 100755
--- a/js/tools/modifier-tool-base.js
+++ b/js/tools/modifier-tool-base.js
@@ -9,8 +9,8 @@ var Montage = require("montage/core/core").Montage,
9 snapManager = require("js/helper-classes/3D/snap-manager").SnapManager, 9 snapManager = require("js/helper-classes/3D/snap-manager").SnapManager,
10 viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils, 10 viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils,
11 vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils, 11 vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils,
12 drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils, 12 drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils;
13 Properties3D = ("js/models/properties-3d").Properties3D; 13// Properties3D = ("js/models/properties-3d").Properties3D;
14 14
15exports.ModifierToolBase = Montage.create(DrawingTool, { 15exports.ModifierToolBase = Montage.create(DrawingTool, {
16 16
@@ -25,6 +25,7 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
25 _snapParam: { value: null }, 25 _snapParam: { value: null },
26 _snapIndex: { value: -1 }, 26 _snapIndex: { value: -1 },
27 _useQuadPt: { value: false }, 27 _useQuadPt: { value: false },
28 _shouldUseQuadPt: { value: false },
28 29
29 // we set snapping capabilities depending on the tool. 30 // we set snapping capabilities depending on the tool.
30 // The following variables are set in a tool's initializeSnapping method called on mouse down. 31 // The following variables are set in a tool's initializeSnapping method called on mouse down.
@@ -134,7 +135,7 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
134 var hitRec = snapManager.snap(point.x, point.y, do3DSnap); 135 var hitRec = snapManager.snap(point.x, point.y, do3DSnap);
135 136
136 // TODO - Check that hitRec's element matches element that browser says we clicked on 137 // TODO - Check that hitRec's element matches element that browser says we clicked on
137 var elt = this.application.ninja.stage.GetElement(event); 138 var elt = this.application.ninja.stage.GetSelectableElement(event);
138 if(elt !== hitRec.getElement()) 139 if(elt !== hitRec.getElement())
139 { 140 {
140 hitRec = snapManager.findHitRecordForElement(elt); 141 hitRec = snapManager.findHitRecordForElement(elt);
@@ -175,6 +176,10 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
175// } 176// }
176 } 177 }
177 178
179 // only do quadrant snapping if the 4 corners of the element are in the drag plane
180 var sign = MathUtils.fpSign( vecUtils.vecDot(3,this._dragPlane,[0,0,1]) + this._dragPlane[3] - 1.0);
181 this._shouldUseQuadPt = (sign == 0)
182
178 var wpHitRec = hitRec.convertToWorkingPlane( this._dragPlane ); 183 var wpHitRec = hitRec.convertToWorkingPlane( this._dragPlane );
179 this._mouseDownHitRec = wpHitRec; 184 this._mouseDownHitRec = wpHitRec;
180 this._mouseUpHitRec = null; 185 this._mouseUpHitRec = null;
@@ -236,6 +241,7 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
236 } 241 }
237 } 242 }
238 243
244 //console.log( "ParameterizeSnap: " + paramPt );
239 return paramPt; 245 return paramPt;
240 } 246 }
241 }, 247 },
@@ -284,14 +290,16 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
284 y = x0 + ty*dy, 290 y = x0 + ty*dy,
285 z = 0.0; 291 z = 0.0;
286 var localPt = [x,y,z]; 292 var localPt = [x,y,z];
293
287 globalPt = viewUtils.localToGlobal( localPt, elt ); 294 globalPt = viewUtils.localToGlobal( localPt, elt );
288 295
289 // add in the delta 296 // add in the delta
290 var hitPt = this.GetObjectHitPoint(); 297 var hitPt = this.GetObjectHitPoint();
291 var scrPt = viewUtils.localToGlobal( hitPt, this._clickedObject ); 298 var scrPt = viewUtils.localToGlobal( hitPt, this._clickedObject );
292 var delta = [xEvent-scrPt[0], yEvent-scrPt[1]]; 299 var delta = [xEvent-scrPt[0], yEvent-scrPt[1], 0-scrPt[2]];
293 globalPt[0] += delta[0]; 300 globalPt[0] += delta[0];
294 globalPt[1] += delta[1]; 301 globalPt[1] += delta[1];
302 globalPt[2] += delta[2];
295 } 303 }
296 304
297 return globalPt; 305 return globalPt;
@@ -448,6 +456,7 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
448 { 456 {
449 this.isDrawing = true; 457 this.isDrawing = true;
450 this.application.ninja.stage.showSelectionBounds = false; 458 this.application.ninja.stage.showSelectionBounds = false;
459 this._updateTargets();
451 460
452 if(this._canSnap) 461 if(this._canSnap)
453 { 462 {
@@ -517,7 +526,7 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
517 526
518 // do the snap 527 // do the snap
519 var quadPt; 528 var quadPt;
520 if (mouseIsDown) 529 if (mouseIsDown && !do3DSnap && this._shouldUseQuadPt && (this._handleMode === null) && (this._mode === 0))
521 quadPt = this.GetQuadrantSnapPoint(x,y); 530 quadPt = this.GetQuadrantSnapPoint(x,y);
522 var hitRec = snapManager.snap(x, y, do3DSnap, quadPt ); 531 var hitRec = snapManager.snap(x, y, do3DSnap, quadPt );
523 532
@@ -552,6 +561,9 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
552 561
553 // update the target 562 // update the target
554 this._mouseUpHitRec = hitRec; 563 this._mouseUpHitRec = hitRec;
564 var pt = hitRec.getScreenPoint();
565 this.upPoint.x = pt[0];
566 this.upPoint.y = pt[1];
555 } 567 }
556 } 568 }
557 } 569 }
@@ -579,12 +591,15 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
579 591
580 this.downPoint.x = null; 592 this.downPoint.x = null;
581 this.downPoint.y = null; 593 this.downPoint.y = null;
594 this.upPoint.x = null;
595 this.upPoint.y = null;
582// this.isDrawing = false; 596// this.isDrawing = false;
583 597
584 if(this._canSnap) 598 if(this._canSnap)
585 { 599 {
586 this.cleanupSnap(); 600 this.cleanupSnap();
587 } 601 }
602 this._mode = 0;
588 } 603 }
589 }, 604 },
590 605
@@ -751,6 +766,11 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
751 snapManager.enableGridSnap( snapManager.gridSnapEnabledAppLevel() ); 766 snapManager.enableGridSnap( snapManager.gridSnapEnabledAppLevel() );
752 this.eventManager.removeEventListener( "toolOptionsChange", this, false); 767 this.eventManager.removeEventListener( "toolOptionsChange", this, false);
753 this.eventManager.removeEventListener( "toolDoubleClick", this, false); 768 this.eventManager.removeEventListener( "toolDoubleClick", this, false);
769
770 if (this._targetedElement) {
771 this._targetedElement.classList.remove("active-element-outline");
772 this._targetedElement = null;
773 }
754 } 774 }
755 } 775 }
756 }, 776 },
@@ -764,20 +784,22 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
764 captureSelectionDrawn: { 784 captureSelectionDrawn: {
765 value: function(event){ 785 value: function(event){
766 this._targets = []; 786 this._targets = [];
787 this._origin = null;
788 this._delta = null;
767 789
768 var len = this.application.ninja.selectedElements.length; 790 var len = this.application.ninja.selectedElements.length;
769 if(len) 791 if(len)
770 { 792 {
771 if(len === 1) 793 if(len === 1)
772 { 794 {
773 this.target = this.application.ninja.selectedElements[0]._element; 795 this.target = this.application.ninja.selectedElements[0];
774 drawUtils.addElement(this.target); 796 drawUtils.addElement(this.target);
775 } 797 }
776 else 798 else
777 { 799 {
778 this.target = this.application.ninja.currentDocument.documentRoot; 800 this.target = this.application.ninja.currentDocument.documentRoot;
779 } 801 }
780 this._updateTargets(); 802// this._updateTargets();
781 } 803 }
782 else 804 else
783 { 805 {
@@ -798,6 +820,8 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
798 HandleLeftButtonDown: { 820 HandleLeftButtonDown: {
799 value: function(event) { 821 value: function(event) {
800 822
823// console.log( "modifier-tool-base.HandleLeftButtonDown" );
824
801 var point = webkitConvertPointFromPageToNode(this.application.ninja.stage.canvas, new WebKitPoint(event.pageX, event.pageY)); 825 var point = webkitConvertPointFromPageToNode(this.application.ninja.stage.canvas, new WebKitPoint(event.pageX, event.pageY));
802 this.downPoint.x = point.x; 826 this.downPoint.x = point.x;
803 this.downPoint.y = point.y; 827 this.downPoint.y = point.y;
@@ -866,7 +890,6 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
866 this._updateTargets(true); 890 this._updateTargets(true);
867 } 891 }
868 892
869 this.endDraw(event);
870 this._hasDraw = false; 893 this._hasDraw = false;
871 } 894 }
872 if(this._handleMode !== null) 895 if(this._handleMode !== null)
@@ -874,6 +897,7 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
874 this._handleMode = null; 897 this._handleMode = null;
875 this._delta = null; 898 this._delta = null;
876 } 899 }
900 this.endDraw(event);
877 this.DrawHandles(); 901 this.DrawHandles();
878 } 902 }
879 }, 903 },
@@ -998,19 +1022,6 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
998 } 1022 }
999 }, 1023 },
1000 1024
1001 _updateDelta: {
1002 value: function(delta, handleMode){
1003 if(this._clickedObject !== this.application.ninja.currentDocument.documentRoot)
1004 {
1005 this._delta += ~~(delta[handleMode]);