aboutsummaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rwxr-xr-xjs/controllers/document-controller.js2
-rwxr-xr-xjs/document/document-html.js5
-rwxr-xr-xjs/document/html-document.js4
-rwxr-xr-xjs/document/models/html.js5
-rwxr-xr-xjs/helper-classes/3D/snap-manager.js146
-rwxr-xr-xjs/helper-classes/3D/view-utils.js13
-rwxr-xr-xjs/lib/geom/circle.js124
-rwxr-xr-xjs/lib/geom/rectangle.js190
-rw-r--r--js/lib/geom/shape-primitive.js27
-rwxr-xr-xjs/lib/rdge/materials/linear-gradient-material.js36
-rwxr-xr-xjs/lib/rdge/materials/material.js4
-rwxr-xr-xjs/lib/rdge/materials/radial-gradient-material.js70
-rwxr-xr-xjs/ninja.reel/ninja.js2
-rwxr-xr-xjs/panels/properties.reel/properties.js32
-rwxr-xr-xjs/panels/properties.reel/sections/custom.reel/custom.js2
-rwxr-xr-xjs/stage/stage.reel/stage.js27
16 files changed, 389 insertions, 300 deletions
diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js
index 2eba556e..9ca5ea99 100755
--- a/js/controllers/document-controller.js
+++ b/js/controllers/document-controller.js
@@ -501,7 +501,7 @@ var DocumentController = exports.DocumentController = Montage.create(Component,
501 if(currentDocument) { 501 if(currentDocument) {
502 if(currentDocument.currentView === "design") { 502 if(currentDocument.currentView === "design") {
503 currentDocument.serializeDocument(); 503 currentDocument.serializeDocument();
504 this.application.ninja.selectionController._selectionContainer = null; 504 this.application.ninja._currentSelectedContainer = this.application.ninja.selectionController._selectionContainer = null;
505 currentDocument.model.views.design.propertiesPanel.clear(); 505 currentDocument.model.views.design.propertiesPanel.clear();
506 } 506 }
507 507
diff --git a/js/document/document-html.js b/js/document/document-html.js
index d6b4ba95..f92a425c 100755
--- a/js/document/document-html.js
+++ b/js/document/document-html.js
@@ -147,9 +147,10 @@ exports.HtmlDocument = Montage.create(Component, {
147 this.model.userContentTop = this.application.ninja.stage._userContentTop; 147 this.model.userContentTop = this.application.ninja.stage._userContentTop;
148 148
149 149
150 // Serialize the selection 150 // Serialize the selection, the container and grid
151 //TODO: Move this property to the design view class 151 //TODO: Move this property to the design view class
152 this.model.selection = this.application.ninja.selectedElements.slice(0); 152 this.model.selection = this.application.ninja.selectedElements.slice(0);
153 this.model.selectionContainer = this.application.ninja.currentSelectedContainer;
153 this.draw3DGrid = this.application.ninja.appModel.show3dGrid; 154 this.draw3DGrid = this.application.ninja.appModel.show3dGrid;
154 155
155 // Serialize the undo 156 // Serialize the undo
@@ -177,7 +178,7 @@ exports.HtmlDocument = Montage.create(Component, {
177 178
178 //TODO: Move this property to the design view class 179 //TODO: Move this property to the design view class
179 this.application.ninja.selectedElements = this.model.selection.slice(0); 180 this.application.ninja.selectedElements = this.model.selection.slice(0);
180 181// this.application.ninja.currentSelectedContainer = this.model.selectionContainer;
181 this.application.ninja.appModel.show3dGrid = this.draw3DGrid; 182 this.application.ninja.appModel.show3dGrid = this.draw3DGrid;
182 183
183 // Serialize the undo 184 // Serialize the undo
diff --git a/js/document/html-document.js b/js/document/html-document.js
index bcf2b5c2..447d90e3 100755
--- a/js/document/html-document.js
+++ b/js/document/html-document.js
@@ -209,8 +209,8 @@ exports.HTMLDocument = Montage.create(TextDocument, {
209 { 209 {
210 /* 210 /*
211 // Use this code to test the runtime version of WebGL 211 // Use this code to test the runtime version of WebGL
212 var cdm = new NinjaCvsRt.CanvasDataManager(); 212 var cvsDataMngr = Object.create(NinjaCvsRt.CanvasDataManager, {});
213 cdm.loadGLData(elt, value, null ); 213 cvsDataMngr.loadGLData(elt, value);
214 */ 214 */
215 215
216 // /* 216 // /*
diff --git a/js/document/models/html.js b/js/document/models/html.js
index a97b4b5a..9cc8ce92 100755
--- a/js/document/models/html.js
+++ b/js/document/models/html.js
@@ -22,6 +22,11 @@ exports.HtmlDocumentModel = Montage.create(BaseDocumentModel, {
22 selection: { 22 selection: {
23 value: [] 23 value: []
24 }, 24 },
25 ////////////////////////////////////////////////////////////////////
26 //
27 selectionContainer: {
28 value: []
29 },
25 //////////////////////////////////////////////////////////////////// 30 ////////////////////////////////////////////////////////////////////
26 // 31 //
27 draw3DGrid: { 32 draw3DGrid: {
diff --git a/js/helper-classes/3D/snap-manager.js b/js/helper-classes/3D/snap-manager.js
index e22ac3ad..0f456e1e 100755
--- a/js/helper-classes/3D/snap-manager.js
+++ b/js/helper-classes/3D/snap-manager.js
@@ -223,64 +223,22 @@ var SnapManager = exports.SnapManager = Montage.create(Component, {
223 else 223 else
224 parentPt = [xScreen, yScreen, 0.0]; 224 parentPt = [xScreen, yScreen, 0.0];
225 225
226 var eyePt = []; 226 if (!snap3D && this._hasDragPlane)
227 var vec = viewUtils.parentToChildVec(parentPt, stage, eyePt); 227 this.activateDragPlane();
228 if (vec) 228
229 { 229 var hitRec = this.snapToStage( parentPt, quadPt );
230 // activate the drag working plane 230
231 if (!snap3D && this.hasDragPlane()) 231 // try snapping to the 3D grid, or to the stage boundaries if the grid is not displayed
232 this.activateDragPlane(); 232 if (this.gridSnapEnabled())
233 233 this.snapToGrid( hitRec );
234 // project to the working plane 234
235 var currentWorkingPlane = workingPlane.slice(0); 235 // save the hit record
236 var wp = currentWorkingPlane.slice(0); 236 hitRecArray.push( hitRec );
237 var mat = viewUtils.getMatrixFromElement(stage); 237
238 wp = MathUtils.transformPlane(wp, mat); 238 // restore the original working plane
239 var projPt = MathUtils.vecIntersectPlane(eyePt, vec, wp); 239 if (!snap3D && this.hasDragPlane())
240 if (projPt) 240 this.deactivateDragPlane();
241 { 241
242 // the local point gets stored in the coordinate space of the plane
243 var wpMat = drawUtils.getPlaneToWorldMatrix(currentWorkingPlane, MathUtils.getPointOnPlane(currentWorkingPlane));
244 projPt[3] = 1.0;
245 //var planeToViewMat = mat.multiply(wpMat);
246 var planeToViewMat = glmat4.multiply(mat, wpMat, []);
247 //var viewToPlaneMat = planeToViewMat.inverse();
248 var viewToPlaneMat = glmat4.inverse( planeToViewMat, [] );
249 var planePt = projPt.slice(0);
250 planePt[3] = 1.0;
251 //planePt = viewToPlaneMat.multiply(planePt);
252 planePt = glmat4.multiplyVec3( viewToPlaneMat, planePt );
253
254 // get the screen position of the projected point
255 viewUtils.setViewportObj(stage);
256 var offset = viewUtils.getElementOffset(stage);
257 offset[2] = 0;
258 var scrPt = viewUtils.viewToScreen(projPt);
259 //scrPt = scrPt.add(offset);
260 scrPt = vecUtils.vecAdd(3, scrPt, offset);
261
262 // create the hit record
263 var hitRec = Object.create(HitRecord);//new HitRecord();
264 hitRec.setLocalPoint(planePt);
265 hitRec.setPlaneMatrix( wpMat );
266 hitRec.setScreenPoint(scrPt);
267 hitRec.setPlane(currentWorkingPlane);
268 hitRec.setType( hitRec.SNAP_TYPE_STAGE );
269 hitRec.setElt( stage );
270 if (quadPt) hitRec.setUseQuadPoint( true );
271
272 // try snapping to the 3D grid, or to the stage boundaries if the grid is not displayed
273 if (this.gridSnapEnabled())
274 this.snapToGrid( hitRec );
275
276 // save the hit record
277 hitRecArray.push( hitRec );
278
279 // restore the original working plane
280 if (!snap3D && this.hasDragPlane())
281 this.deactivateDragPlane();
282 }
283 }
284 } //if (hitRecArray.length == 0) 242 } //if (hitRecArray.length == 0)
285 243
286 var rtnHit; 244 var rtnHit;
@@ -305,6 +263,62 @@ var SnapManager = exports.SnapManager = Montage.create(Component, {
305 } 263 }
306 }, 264 },
307 265
266 snapToStage:
267 {
268 value: function( scrPt, quadPt )
269 {
270 var stage = this.getStage();
271 var l2g = viewUtils.getLocalToGlobalMatrix( stage );
272 var g2l = glmat4.inverse( l2g, [] );
273
274 var pt0 = scrPt.slice(), pt1 = scrPt.slice();
275 pt0[2] = 0.0; pt1[2] = 10;
276
277 var localPt0 = MathUtils.transformAndDivideHomogeneousPoint( pt0, g2l ),
278 localPt1 = MathUtils.transformAndDivideHomogeneousPoint( pt1, g2l );
279
280 var stageWorldPt0 = viewUtils.localToStageWorld( localPt0, stage ),
281 stageWorldPt1 = viewUtils.localToStageWorld( localPt1, stage );
282 var vec = vecUtils.vecSubtract( 3, stageWorldPt1, stageWorldPt0 );
283
284 var ptOnWorkingPlane = MathUtils.vecIntersectPlane(stageWorldPt0, vec, workingPlane);
285
286 var wpMat = drawUtils.getPlaneToWorldMatrix(workingPlane, MathUtils.getPointOnPlane(workingPlane)),
287 wpMatInv = glmat4.inverse( wpMat, [] );
288 var localPt = MathUtils.transformPoint( ptOnWorkingPlane, wpMatInv );
289
290 // create the hit record
291 var hitRec = Object.create(HitRecord);
292 hitRec.setLocalPoint( localPt );
293 hitRec.setPlaneMatrix( wpMat );
294 hitRec.setScreenPoint(scrPt);
295 hitRec.setPlane(workingPlane);
296 hitRec.setType( hitRec.SNAP_TYPE_STAGE );