diff options
Diffstat (limited to 'js')
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 | /////////////////////////////////////////////////////////////////////// |
11 | var VecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; | 11 | var 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 | ||
13 | var MathUtilsClass = exports.MathUtilsClass = Object.create(Object.prototype, { | 15 | var 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++) |