diff --git a/js/fea/DMASuperCell.js b/js/fea/DMASuperCell.js index 2210bc15dd36dcb45e32b945b969f2a3afd21581..085fb8c14dcdf424c9216f8855f4706ffcddfaf5 100644 --- a/js/fea/DMASuperCell.js +++ b/js/fea/DMASuperCell.js @@ -11,11 +11,7 @@ DMASuperCell = function(length, range, cells){ this.material = dmaGlobals.lattice.get("materialType"); this.mesh = this._buildSuperCellMesh(length, shouldRotate); this.setVisibility(dmaGlobals.appState.get("cellMode")=="cell"); - if (range) { - this.index = _.clone(range.max); - if (this.index.z %2 == 0) this.index.x -= cells.length/2.0-0.5; - else this.index.y -= cells.length/2.0-0.5; - } + if (range) this.indices = _.clone(range.max); this.cells = cells; this.setScale(); dmaGlobals.three.sceneAdd(this.mesh); @@ -24,6 +20,7 @@ DMASuperCell = function(length, range, cells){ DMASuperCell.prototype._buildSuperCellMesh = function(length, shouldRotate){ var superCellGeo = new THREE.BoxGeometry(1,1,1); superCellGeo.applyMatrix(new THREE.Matrix4().makeScale(length, 1, 1)); + superCellGeo.applyMatrix(new THREE.Matrix4().makeTranslation(-length/2+0.5, 0, 0)); if (shouldRotate) superCellGeo.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI/2)); var mesh = THREE.SceneUtils.createMultiMaterialObject(superCellGeo, [this.getMaterialType()]); var wireframe = new THREE.BoxHelper(mesh.children[0]); @@ -47,7 +44,7 @@ DMASuperCell.prototype._setPosition = function(index){ DMASuperCell.prototype.setScale = function(scale){ if (!scale) scale = dmaGlobals.lattice.get("scale"); this.mesh.scale.set(scale, scale, scale); - this._setPosition(this.index); + this._setPosition(this.indices); }; DMASuperCell.prototype.setVisibility = function(visible){ @@ -99,6 +96,6 @@ DMASuperCell.prototype.destroy = function(){ }); this.cells = null; this.mesh = null; - this.index = null; + this.indices = null; this.material = null; } \ No newline at end of file diff --git a/js/models/Lattice.js b/js/models/Lattice.js index 886637dd3e1b6e3dae88c21f588c94d7ba1674ae..638f747d2f86f72d41ab985807ecd96651a303fc 100644 --- a/js/models/Lattice.js +++ b/js/models/Lattice.js @@ -552,25 +552,11 @@ Lattice = Backbone.Model.extend({ newVarOrder = 2; newVarDim = cells[0][0].length; } else if (firstLetter == ""){ - for (var i=this._getRasterLoopInit(var1);this._getRasterLoopCondition(i,var1);i+=this._getRasterLoopIterator(var1)){ - for (var j=this._getRasterLoopInit(var2);this._getRasterLoopCondition(j,var2);j+=this._getRasterLoopIterator(var2)){ - for (var k=this._getRasterLoopInit(var3);this._getRasterLoopCondition(k,var3);k+=this._getRasterLoopIterator(var3)){ - if (var1.order == 0){ - if (var2.order == 1) callback(cells[i][j][k], i, j, k); - else if (var2.order == 2) callback(cells[i][k][j], i, k, j); - } else if (var1.order == 1){ - if (var2.order == 0) callback(cells[j][i][k], j, i, k); - else if (var2.order == 2) callback(cells[k][i][j], k, i, j); - } else { - if (var2.order == 0) callback(cells[j][k][i], j, k, i); - else if (var2.order == 1) { - callback(cells[k][j][i], k, j, i); - } - } - - } - } + if (this._rasterGikCells) { + this._rasterGikCells(order, callback, var1, var2, var3, cells); + return; } + this._rasterCells(order, callback, var1, var2, var3, cells); return; } if (var3 == null) var3 = {order: newVarOrder, dim: newVarDim, neg:isNeg}; @@ -579,6 +565,28 @@ Lattice = Backbone.Model.extend({ this.rasterCells(order, callback, var1, var2, var3, cells); }, + _rasterCells: function(order, callback, var1, var2, var3, cells){ + for (var i=this._getRasterLoopInit(var1);this._getRasterLoopCondition(i,var1);i+=this._getRasterLoopIterator(var1)){ + for (var j=this._getRasterLoopInit(var2);this._getRasterLoopCondition(j,var2);j+=this._getRasterLoopIterator(var2)){ + for (var k=this._getRasterLoopInit(var3);this._getRasterLoopCondition(k,var3);k+=this._getRasterLoopIterator(var3)){ + if (var1.order == 0){ + if (var2.order == 1) callback(cells[i][j][k], i, j, k); + else if (var2.order == 2) callback(cells[i][k][j], i, k, j); + } else if (var1.order == 1){ + if (var2.order == 0) callback(cells[j][i][k], j, i, k); + else if (var2.order == 2) callback(cells[k][i][j], k, i, j); + } else { + if (var2.order == 0) callback(cells[j][k][i], j, k, i); + else if (var2.order == 1) { + callback(cells[k][j][i], k, j, i); + } + } + + } + } + } + }, + _getRasterLoopInit: function(variable){ if (variable.neg) return variable.dim-1; return 0; diff --git a/js/models/LatticeOther.js b/js/models/LatticeOther.js index 5a7d99f1736cb22081e9df0dd04345218f39e91a..7666c8e9bc67b85aaca2cb381249c8f4536741ac 100644 --- a/js/models/LatticeOther.js +++ b/js/models/LatticeOther.js @@ -106,6 +106,32 @@ OtherLatticeSubclasses = { return superCell; }, + _rasterGikCells: function(order, callback, var1, var2, var3, cells){ + for (var i=this._getRasterLoopInit(var1);this._getRasterLoopCondition(i,var1);i+=this._getRasterLoopIterator(var1)){ + for (var j=this._getRasterLoopInit(var2);this._getRasterLoopCondition(j,var2);j+=this._getRasterLoopIterator(var2)){ + for (var k=this._getRasterLoopInit(var3);this._getRasterLoopCondition(k,var3);k+=this._getRasterLoopIterator(var3)){ + if (var1.order == 0){ + if (var2.order == 1) callback(this._retrieveSuperCell(cells[i][j][k]), i, j, k); + else if (var2.order == 2) callback(this._retrieveSuperCell(cells[i][k][j]), i, k, j); + } else if (var1.order == 1){ + if (var2.order == 0) callback(this._retrieveSuperCell(cells[j][i][k]), j, i, k); + else if (var2.order == 2) callback(this._retrieveSuperCell(cells[k][i][j]), k, i, j); + } else { + if (var2.order == 0) callback(this._retrieveSuperCell(cells[j][k][i]), j, k, i); + else if (var2.order == 1) { + callback(this._retrieveSuperCell(cells[k][j][i]), k, j, i); + } + } + } + } + } + }, + + _retrieveSuperCell: function(cell){ + if (cell) return cell.superCell; + return null; + }, + _undo: function(){//remove all the mixins, this will help with debugging later var self = this; _.each(_.keys(this.GIKLattice), function(key){