Newer
Older
/**
* Created by aghassaei on 6/10/15.
*/
define(['underscore', 'backbone', 'appState', 'globals', 'plist', 'three', 'threeModel', 'latticeBase', 'materials'],
function(_, Backbone, appState, globals, plist, THREE, three, LatticeBase, materials){
function makeRandomColor(){
return '#' + Math.floor(Math.random()*16777215).toString(16);
}
var CompositeEditorLattice = LatticeBase.extend({
defaults: _.extend(LatticeBase.prototype.defaults, {
if (!options.id || options.id == "") this.set("id", "super" + this.cid);
if (!options.color || options.color == "") this.set("color", makeRandomColor(), {silent:true});
//3d ui
addHighlightableCell: function(cell){
three.addCompositeCell(cell);
},
removeHighlightableCell: function(cell){
three.removeCompositeCell(cell);
},
getHighlightableCells: function(){
return three.getCompositeCells();
},
makeNewCompositeMaterial: function(dimensions){
materials.setMaterial(id, this.toJSONForSave(dimensions));
},
toJSONForSave: function(dimensions){
var name = this.get("name");
if (name == "") name = "Composite Material " + compositeNum++;
if (dimensions) var _dimensions = dimensions.clone();
var cellsMin = this.get("cellsMin");
if (cellsMin) cellsMin = cellsMin.clone();
var cellsMax = this.get("cellsMax");
if (cellsMax) cellsMax = cellsMax.clone();
color: this.get("color"),
altColor: this.get("color"),
numCells: this.get("numCells"),
sparseCells: JSON.parse(JSON.stringify(this.sparseCells)),
cellsMin: cellsMin,
cellsMax: cellsMax,
elementaryChildren: this._getChildCellTypes(true),
compositeChildren: this._getChildCellTypes(false),
_getChildCellTypes: function(elementaryTypes){
var children = [];
this._loopCells(this.sparseCells, function(cell){
if (!cell) return;
var isComposite = cell.materialName.substr(0,5) == "super";
if ((elementaryTypes && !isComposite) || (!elementaryTypes && isComposite)) children.push(cell.materialName);
});
if (children.length == 0) return null;
return _.uniq(children);//remove duplicates
},
//deallocate
__clearCells: function(silent){
three.removeAllCompositeCells();//todo add flag in cell destroy to avoid redundancy here
},
_.each(_.keys(this.attributes), function(key){
self.set(key, null, {silent:true});
self.unset(key, {silent:true});
});
return CompositeEditorLattice;
});