/*
This file contains proprietary software owned by Motorola Mobility, Inc.
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
*/
////////////////////////////////////////////////////////////////////////
//
var Montage = require("montage/core/core").Montage,
Component = require("montage/ui/component").Component,
MaterialsModel = require("js/models/materials-model").MaterialsModel,
NJUtils = require("js/lib/NJUtils").NJUtils,
GLWorld = require("js/lib/drawing/world").World;
////////////////////////////////////////////////////////////////////////
//
exports.webGlDocumentHelper = Montage.create(Component, {
////////////////////////////////////////////////////////////////////
//
hasTemplate: {
value: false
},
////////////////////////////////////////////////////////////////////
//This is set when the design view is ready, for local reference
iframe: {
value: null
},
////////////////////////////////////////////////////////////////////
//
_glData: {
value: null
},
////////////////////////////////////////////////////////////////////
//
glData: {
//
get: function() {
//
var elt = this.iframe.contentWindow.document.body;
//
if (elt) {
var matLib = MaterialsModel.exportMaterials();
this._glData = [matLib];
this.collectGLData(this.iframe.contentWindow.document, this._glData );
} else {
this._glData = null
}
//
return this._glData;
},
//
set: function(value) {
//
var elt = this.iframe.contentWindow.document.body;
//
if (elt) {
/*
// Use this code to test the runtime version of WebGL
var cdm = new NinjaCvsRt.CanvasDataManager();
cdm.loadGLData(elt, value, null );
*/
//
var i, nWorlds= value.length;
//
for (i = 0; i < nWorlds; i++) {
// get the data for the next canvas
var importStr = value[i], id, jObj, index = importStr.indexOf(';'), matLibStr, matLibObj, startIndex, endIndex, canvas, useWebGL, world;
// determine if it is the new (JSON) or old style format
if ((importStr[0] === 'v') && (index < 24)) {
// JSON format. pull off the
importStr = importStr.substr(index+1);
jObj = JSON.parse(importStr);
id = jObj.id;
} else {
// at this point the data could be either the materials library or
// an old style world. We can determine which by converting the string
// to an object via JSON.parse. That operation will fail if the string
// is an old style world.
matLibStr = 'materialLibrary;';
index = importStr.indexOf(matLibStr);
if (index == 0) {
importStr = importStr.substr(matLibStr.length);
matLibObj = JSON.parse(importStr);
MaterialsModel.importMaterials(matLibObj);
} else {
startIndex = importStr.indexOf("id: ");
if (startIndex >= 0) {
endIndex = importStr.indexOf("\n", startIndex);
if (endIndex > 0) id = importStr.substring(startIndex+4, endIndex);
}
}
}
//
if (id != null) {
//
canvas = this.findCanvasWithID(id, elt);
//
if (canvas) {
//
if (canvas.elementModel) {
if (canvas.elementModel.shapeModel.GLWorld) {
canvas.elementModel.shapeModel.GLWorld.clearTree();
}
//
if (jObj) {
useWebGL = jObj.webGL;
world = new GLWorld(canvas, useWebGL);
world.importJSON(jObj);
}
//
this.buildShapeModel(canvas.elementModel, world);
}
}
}
}
}
}
},
////////////////////////////////////////////////////////////////////
//
findCanvasWithID: {
value: function(id, elt) {
//
var i, child, nKids, foundElt, cid = elt.getAttribute("data-RDGE-id");
//
if (cid == id) return elt;
//
if (elt.children) {
nKids = elt.children.length;
for (i=0; i