Skip to content
Snippets Groups Projects
CompositeEditorLattice.js 3.59 KiB
/**
 * 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 compositeNum = 1;

    var CompositeEditorLattice = LatticeBase.extend({

        defaults: _.extend(LatticeBase.prototype.defaults, {
            name: "",
            color: null,
        }),

        __initialize: function(options, callback){
            if (!options.id || options.id == "") this.set("id", "super" + this.cid);
            if (!options.color || options.color == "") this.set("color",  makeRandomColor(), {silent:true});
            if (callback) callback(this);
        },





        //3d ui

        addHighlightableCell: function(cell){
            three.addCompositeCell(cell);
        },

        removeHighlightableCell: function(cell){
            three.removeCompositeCell(cell);
        },

        getHighlightableCells: function(){
            return three.getCompositeCells();
        },






        //composite events

        _changeRandomColor: function(){
            this.set("color", makeRandomColor());
        },

        makeNewCompositeMaterial: function(dimensions){
            if (this.get("numCells") == 0) {
                console.warn("no cells in this composite");
                return;
            }
            var id = this.get("id");
            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");