diff --git a/js/materials/DMAMaterials.js b/js/materials/DMAMaterials.js index 6b9ee78e2837369be54da71d53213a648275d9cd..5f40bb49291a153c62573bfd1881cf7aa3ba493f 100644 --- a/js/materials/DMAMaterials.js +++ b/js/materials/DMAMaterials.js @@ -12,6 +12,16 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu } }; + var listener = {}; + _.extend(listener, Backbone.Events); + + listener.listenTo(appState, "change:realisticColorScheme", changeColorScheme); + listener.listenTo(appState, "change:materialClass", loadMaterialClass); + listener.listenTo(lattice, "change:connectionType cellType", loadMaterialClass); + listener.listenTo(appState, "change:materialType", setMaterialDefaults); + + loadMaterialClass(); + @@ -38,6 +48,25 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu return false; } + function deleteMaterial(id){ + if (materialsList[id].noDelete) { + console.warn("no delete flag on this material type"); + return false; + } + delete materialsList[id];//todo check if being used first + var deleted = true; + if (deleted) loadMaterialClass();//set to defaults + return deleted; + } + + + + + + + + + function findAllChangedmaterialsList(runningList){ // _.each(getCompositeKeys(), function(key){ @@ -51,26 +80,26 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu }); } - function deleteMaterial(id){ - if (materialsList[id].noDelete) { - console.warn("no delete flag on this material type"); - return false; - } - delete materialsList[id];//todo check if being used first - var deleted = true; - if (deleted) loadMaterialClass();//set to defaults - return deleted; + function getVaildCompositeKeys(id){//for "available materials" list in composite editor + var compositeKeys = getCompositeKeys(); + var invalidKeys = getAllParentComposites(id); + invalidKeys.push(id); + return _.difference(compositeKeys, invalidKeys); } - var listener = {}; - _.extend(listener, Backbone.Events); + function getAllParentComposites(id){ + var parentComposites = []; + _.each(_.keys(materialsList), function(key){ + if (materialsList[key].compositeChildren && materialsList[key].compositeChildren.indexOf(id)>-1){ + parentComposites.push(key); + } + }); + return parentComposites; + } + + - listener.listenTo(appState, "change:realisticColorScheme", changeColorScheme); - listener.listenTo(appState, "change:materialClass", loadMaterialClass); - listener.listenTo(lattice, "change:connectionType cellType", loadMaterialClass); - listener.listenTo(appState, "change:materialType", setMaterialDefaults); - loadMaterialClass(); @@ -149,6 +178,8 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu return { list:materialsList, - setMaterial: setMaterial + setMaterial: setMaterial, + getCompositeKeys: getCompositeKeys, + getVaildCompositeKeys: getVaildCompositeKeys }; }); \ No newline at end of file diff --git a/js/menus/CompositeMenuView.js b/js/menus/CompositeMenuView.js index afb1fbf7ee19f1783c6cded220e0b1490fdcf764..9d30fedea3967be70de469a8c7e856cf905cfa13 100644 --- a/js/menus/CompositeMenuView.js +++ b/js/menus/CompositeMenuView.js @@ -90,7 +90,8 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'lattice', 'globals', 'ma return _.extend(this.model.toJSON(), plist, globals, lattice.compositeEditor.toJSON(), { dimensions: dimensions, - materials: materials.list + materials: materials.list, + validCompositeMaterials: materials.getVaildCompositeKeys(lattice.compositeEditor.get("id")) }); }, diff --git a/js/menus/MaterialMenuView.js b/js/menus/MaterialMenuView.js index c3ab007a61fddc3130a9f6e831049c98418b926f..fb3e6c333ec63f9361dbc6a819b1ed43696f95db 100644 --- a/js/menus/MaterialMenuView.js +++ b/js/menus/MaterialMenuView.js @@ -69,7 +69,7 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'lattice', 'globals', 'ma }, _makeTemplateJSON: function(){ - return _.extend(lattice.toJSON(), this.model.toJSON(), plist, globals, {materials:materials.list}); + return _.extend(lattice.toJSON(), this.model.toJSON(), plist, globals, {materials:materials.list, compositeMaterialsKeys:materials.getCompositeKeys()}); }, template: _.template(template) diff --git a/js/menus/templates/CompositeMenuView.html b/js/menus/templates/CompositeMenuView.html index 200f89b65293c25cbb904179728039c50052a38d..90e019ebd38e121907ba3a51cd38b76b11fe9bd4 100644 --- a/js/menus/templates/CompositeMenuView.html +++ b/js/menus/templates/CompositeMenuView.html @@ -13,21 +13,7 @@ Available Materials:<br/> <span><%= allMaterials[materialClass][key].name %></span></div> </label> <% }); %> -<% _.each(_.keys(materials), function(key){ - if (key == id || key.substr(0,5) != "super") return; - <!--if (checkForLoops(key)) return;--> - <!--function checkForLoops(_key){--> - <!--console.log(materials[_key].compositeChildren);--> - <!--if (materials[_key].compositeChildren) {--> - <!--if (materials[_key].compositeChildren.indexOf(id)>0) return true;--> - <!--var childMatches = _.filter(materials[_key].compositeChildren, function(childKey){--> - <!--return checkForLoops(childKey);--> - <!--});--> - <!--if (childMatches.length>0) return true;--> - <!--}--> - <!--return false;--> - <!--}--> - %> +<% _.each(validCompositeMaterials, function(key){%> <label class="radio colorSwatches"> <input type="radio" <%if (key == materialType){ %>checked<%}%> name="materialType" value="<%= key %>" data-toggle="radio" class="custom-radio appState"><span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span> <div class="materialColorSwatch"> diff --git a/js/menus/templates/MaterialMenuView.html b/js/menus/templates/MaterialMenuView.html index 2efcb1e634d26f9c4f32bb7dbf8bdb638200e524..a024e35c0df3151612bdd13c2c9f6cfd89542200 100644 --- a/js/menus/templates/MaterialMenuView.html +++ b/js/menus/templates/MaterialMenuView.html @@ -27,8 +27,7 @@ Composite Materials:<br/> <% if ((cellType == "octa" && connectionType != "vertex") || cellType == "tetra"){ %> not available for this lattice type <% } else { %> - <% _.each(_.keys(materials), function(key){ - if (key.substr(0,5) != "super") return; %> + <% _.each(compositeMaterialsKeys, function(key){ %> <label class="radio colorSwatches"> <input type="radio" <%if (key == materialType){ %>checked<%}%> name="materialType" value="<%= key %>" data-toggle="radio" class="custom-radio appState"><span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span> <div class="materialColorSwatch">