aboutsummaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/components/treeview/ninja-branch.reel/ninja-branch.css11
-rw-r--r--js/components/treeview/ninja-leaf.reel/ninja-leaf.css2
-rw-r--r--js/components/treeview/treeview.reel/treeview.html2
-rw-r--r--js/controllers/elements/shapes-controller.js25
-rw-r--r--js/helper-classes/3D/math-utils.js97
-rw-r--r--js/helper-classes/3D/snap-manager.js17
-rw-r--r--js/helper-classes/RDGE/GLLine.js29
-rw-r--r--js/helper-classes/RDGE/GLMaterial.js2
-rw-r--r--js/helper-classes/RDGE/GLRectangle.js141
-rw-r--r--js/helper-classes/RDGE/Materials/BumpMetalMaterial.js10
-rw-r--r--js/helper-classes/RDGE/Materials/FlatMaterial.js31
-rw-r--r--js/helper-classes/RDGE/Materials/UberMaterial.js6
-rw-r--r--js/helper-classes/RDGE/MaterialsLibrary.js2
-rw-r--r--js/ninja.reel/ninja.js3
-rw-r--r--js/panels/properties/sections/position-and-size.reel/position-and-size.js89
-rw-r--r--js/panels/properties/sections/three-d-view.reel/three-d-view.html12
-rw-r--r--js/panels/properties/sections/three-d-view.reel/three-d-view.js3
-rw-r--r--js/tools/Rotate3DToolBase.js2
-rw-r--r--js/tools/RotateStage3DTool.js2
-rw-r--r--js/tools/SelectionTool.js40
-rw-r--r--js/tools/modifier-tool-base.js35
21 files changed, 387 insertions, 174 deletions
</
diff --git a/js/components/treeview/ninja-branch.reel/ninja-branch.css b/js/components/treeview/ninja-branch.reel/ninja-branch.css
index 6a458cc7..d8c212e8 100644
--- a/js/components/treeview/ninja-branch.reel/ninja-branch.css
+++ b/js/components/treeview/ninja-branch.reel/ninja-branch.css
@@ -18,14 +18,15 @@
18 width: 100%; 18 width: 100%;
19} 19}
20.treeRoot .branch .branch-label { 20.treeRoot .branch .branch-label {
21 border-bottom: 1px solid #505050;
22 cursor: pointer;
23 padding: 3px 0 4px;
24 background-repeat: no-repeat; 21 background-repeat: no-repeat;
25 background-position: 3px 2px; 22 background-position: 3px 2px;
26 box-shadow: 0 0 0 0 rgba(0,0,0,0); 23 border-bottom: 1px solid #505050;
27 font-weight: bold;
28 box-shadow: 0 3px 4px -4px rgba(0,0,0,0.2); 24 box-shadow: 0 3px 4px -4px rgba(0,0,0,0.2);
25 color: #FFF;
26 cursor: pointer;
27 font-weight: bold;
28 padding: 3px 0 4px;
29 text-shadow: 1px 1px 0 #000;
29} 30}
30 31
31/* First Level */ 32/* First Level */
diff --git a/js/components/treeview/ninja-leaf.reel/ninja-leaf.css b/js/components/treeview/ninja-leaf.reel/ninja-leaf.css
index b2f427b5..085b11e0 100644
--- a/js/components/treeview/ninja-leaf.reel/ninja-leaf.css
+++ b/js/components/treeview/ninja-leaf.reel/ninja-leaf.css
@@ -19,6 +19,8 @@
19/* Second level */ 19/* Second level */
20.branch .branch .leaf-label { 20.branch .branch .leaf-label {
21 background-position: 25px center; 21 background-position: 25px center;
22 box-shadow: 0 3px 4px -4px rgba(0,0,0,0.2);
23 color: #FFF;
22 padding-left: 45px; 24 padding-left: 45px;
23} 25}
24/* Third level */ 26/* Third level */
diff --git a/js/components/treeview/treeview.reel/treeview.html b/js/components/treeview/treeview.reel/treeview.html
index d70b016c..4f9e6a72 100644
--- a/js/components/treeview/treeview.reel/treeview.html
+++ b/js/components/treeview/treeview.reel/treeview.html
@@ -26,7 +26,7 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
26 "name" : "Branch" 26 "name" : "Branch"
27 }, 27 },
28 "defaultLeaf" : { 28 "defaultLeaf" : {
29 "module" : "js/components/treeview/presets-leaf.reel", 29 "module" : "js/components/treeview/leaf.reel",
30 "name" : "Leaf" 30 "name" : "Leaf"
31 }, 31 },
32 "scrollview": { 32 "scrollview": {
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js
index e764de4e..b9c033aa 100644
--- a/js/controllers/elements/shapes-controller.js
+++ b/js/controllers/elements/shapes-controller.js
@@ -63,11 +63,11 @@ exports.ShapesController = Montage.create(CanvasController, {
63 canvas.height = el.height; 63 canvas.height = el.height;
64 this.application.ninja.elementMediator.replaceElement(el, canvas); 64 this.application.ninja.elementMediator.replaceElement(el, canvas);
65 NJevent("elementDeleted", el); 65 NJevent("elementDeleted", el);
66 this.application.ninja.selectionController.selectElement(canvas);
67 el = canvas; 66 el = canvas;
68 this.toggleWebGlMode(el, value); 67 this.toggleWebGlMode(el, value);
69 el.elementModel.shapeModel.GLGeomObj.buildBuffers(); 68 el.elementModel.shapeModel.GLWorld.render();
70 break; 69 this.application.ninja.selectionController.selectElement(el);
70 return;
71 case "strokeMaterial": 71 case "strokeMaterial":
72 var sm = Object.create(MaterialsLibrary.getMaterial(value)); 72 var sm = Object.create(MaterialsLibrary.getMaterial(value));
73 if(sm) 73 if(sm)
@@ -338,13 +338,26 @@ exports.ShapesController = Montage.create(CanvasController, {
338 { 338 {
339 return; 339 return;
340 } 340 }
341 var world, 341 var sm,
342 fm,
343 world,
342 worldData = el.elementModel.shapeModel.GLWorld.export(); 344 worldData = el.elementModel.shapeModel.GLWorld.export();
343 if(worldData) 345 if(worldData)
344 { 346 {
345 world = new GLWorld(el, true); 347 world = new GLWorld(el, true);
346 el.elementModel.shapeModel.GLWorld = world; 348 el.elementModel.shapeModel.GLWorld = world;
349 el.elementModel.shapeModel.GLGeomObj.setWorld(world);
347 el.elementModel.shapeModel.useWebGl = true; 350 el.elementModel.shapeModel.useWebGl = true;
351 sm = Object.create(MaterialsLibrary.getMaterial("FlatMaterial"));
352 fm = Object.create(MaterialsLibrary.getMaterial("FlatMaterial"));
353 if(sm && fm)
354 {
355 el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(sm);
356 el.elementModel.shapeModel.GLGeomObj.setFillMaterial(fm);
357 el.elementModel.shapeModel.strokeMaterial = sm;
358 el.elementModel.shapeModel.fillMaterial = fm;
359 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
360 }
348 world.import(worldData); 361 world.import(worldData);
349 } 362 }
350 363
@@ -365,6 +378,10 @@ exports.ShapesController = Montage.create(CanvasController, {
365 world = new GLWorld(el, false); 378 world = new GLWorld(el, false);
366 el.elementModel.shapeModel.GLWorld = world; 379 el.elementModel.shapeModel.GLWorld = world;
367 el.elementModel.shapeModel.useWebGl = false; 380 el.elementModel.shapeModel.useWebGl = false;
381 el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(null);
382 el.elementModel.shapeModel.GLGeomObj.setFillMaterial(null);
383 el.elementModel.shapeModel.strokeMaterial = null;
384 el.elementModel.shapeModel.fillMaterial = null;
368 world.import(worldData); 385 world.import(worldData);
369 } 386 }
370 387
diff --git a/js/helper-classes/3D/math-utils.js b/js/helper-classes/3D/math-utils.js
index 3d24f76e..37044763 100644
--- a/js/helper-classes/3D/math-utils.js
+++ b/js/helper-classes/3D/math-utils.js
@@ -8,7 +8,9 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
8// Class Utils 8// Class Utils
9// Math Utility functions 9// Math Utility functions
10/////////////////////////////////////////////////////////////////////// 10///////////////////////////////////////////////////////////////////////
11var VecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; 11var VecUtils = require("js/helper-classes/3D/vec-utils").VecUtils,
12 ViewUtils = require("js/helper-classes/3D/view-utils").ViewUtils,
13 Rectangle = require("js/helper-classes/3D/rectangle").Rectangle;
12 14
13var MathUtilsClass = exports.MathUtilsClass = Object.create(Object.prototype, { 15var MathUtilsClass = exports.MathUtilsClass = Object.create(Object.prototype, {
14 /////////////////////////////////////////////////////////////////////// 16 ///////////////////////////////////////////////////////////////////////
@@ -536,6 +538,99 @@ var MathUtilsClass = exports.MathUtilsClass = Object.create(Object.prototype, {
536 } 538 }
537 }, 539 },
538 540
541 rectsOverlap:
542 {
543 value: function( pt, width, height, elt )
544 {
545 // only consider rectangles with non-zero area
546 if ((width == 0) || (height == 0)) return false;
547
548 // get the mins/maxs of the onput rectangle
549 var xMin, xMax, yMin, yMax;
550 if (width > 0) { xMin = pt[0]; xMax = pt[0] + width; }
551 else { xMax = pt[0]; xMin = pt[0] + width; }
552 if (height > 0) { yMin = pt[1]; yMax = pt[1] + height; }
553 else { yMax = pt[1]; yMin = pt[1] + height; }
554
555 // get the bounds of the element in global screen space
556 var bounds = ViewUtils.getElementViewBounds3D( elt );
557 var bounds3D = [];
558 for (var i=0; i<4; i++)
559 bounds3D[i] = ViewUtils.localToGlobal( bounds[i], elt );
560
561 // get the min/maxs for the element
562 var xMinElt = bounds3D[0][0], xMaxElt = bounds3D[0][0],
563 yMinElt = bounds3D[0][1], yMaxElt = bounds3D[0][1];
564 for (var i=1; i<4; i++)
565 {
566 if (bounds3D[i][0] < xMinElt) xMinElt = bounds3D[i][0];
567 else if (bounds3D[i][0] > xMaxElt) xMaxElt = bounds3D[i][0];
568 if (bounds3D[i][1] < yMinElt) yMinElt = bounds3D[i][1];
569 else if (bounds3D[i][1] > yMaxElt) yMaxElt = bounds3D[i][1];
570 }
571
572 // test 1. Overall bounding box test
573 if ((xMaxElt < xMin) || (xMinElt > xMax) || (yMaxElt < yMin) || (yMinElt > yMax))
574 return false;
575
576 // test 2. See if any of the corners of the element are contained in the rectangle
577 var rect = Object.create(Rectangle, {});
578 rect.set( pt[0], pt[1], width, height );
579 for (var i=0; i<4; i++)
580 {
581 if (rect.contains( bounds3D[i][0], bounds3D[i][1] )) return true;
582 }
583
584 // test 3. Bounding box tests on individual edges of the element
585 for (var i=0; i<4; i++)