diff --git a/js/fea/DmaBeam.js b/js/fea/DmaBeam.js index 52b8ad9c02afee4d51cf81ae2212ce39bf582d58..d1d1e22b8c578dba8832e457b35144b28ce72229 100644 --- a/js/fea/DmaBeam.js +++ b/js/fea/DmaBeam.js @@ -35,22 +35,25 @@ DmaBeam.prototype._buildBeamMesh = function(){ var eulerRot = new THREE.Euler().setFromQuaternion(quaternion); mesh.rotation.set(eulerRot.x, eulerRot.y, eulerRot.z); + dmaGlobals.three.sceneAdd(mesh, "part"); + return mesh; +}; +DmaBeam.prototype.updateForScale = function(scale){ + if (!this.mesh) this.mesh = this._buildBeamMesh(); var position = this.nodes[0].getPosition(); position.add(this.nodes[1].getPosition()); position.multiplyScalar(0.5); position.add(this.parentCell.getPosition()); - mesh.position.set(position.x, position.y, position.z); - var scale = this.parentCell.getScale(); - mesh.scale.set(scale, scale, scale); - - - dmaGlobals.three.sceneAdd(mesh, "part"); - return mesh; + this.mesh.position.set(position.x, position.y, position.z); + this.mesh.scale.set(scale, scale, scale); }; DmaBeam.prototype.setVisibility = function(visible){ - if (visible && !this.mesh) this.mesh = this._buildBeamMesh(); + if (visible && !this.mesh) { + this.mesh = this._buildBeamMesh(); + this.updateForScale(this.parentCell.getScale()); + } else if (!this.mesh) return; this.mesh.visible = visible; }; diff --git a/js/fea/DmaCell.js b/js/fea/DmaCell.js index cf43bad9c024735895f418379284959c1656d04c..c71393244c03f93ad13c0f5a240a99aabefdf0a1 100644 --- a/js/fea/DmaCell.js +++ b/js/fea/DmaCell.js @@ -60,7 +60,10 @@ DMACell.prototype.updateForScale = function(scale, cellMode){ if (cellMode == "part"){ _.each(this.parts, function(part){ if (part) part.updateForScale(scale, position); - }); + }); + _.each(this.beams, function(beam){ + if (beam) beam.updateForScale(scale, position); + }); } }; diff --git a/js/menus/LatticeMenuView.js b/js/menus/LatticeMenuView.js index 532d9b6862137b69cd4e3057acf5aeef5caa8e24..81aa04a96eab0c8f156b212da66224a6f38913d2 100644 --- a/js/menus/LatticeMenuView.js +++ b/js/menus/LatticeMenuView.js @@ -15,7 +15,6 @@ LatticeMenuView = Backbone.View.extend({ "click .connectionType": "_changeConnectionType", "slide #scaleSlider": "_sliderDidSlide", "slideStop #scaleSlider": "_changeScaleSlider", - "change #preserveCells": "_changePreserveCells", "click #freeformTetraCell": "_setTetraCell", "click #freeformOctaCell": "_setOctaCell" }, @@ -89,10 +88,6 @@ LatticeMenuView = Backbone.View.extend({ this.lattice.set("partType", partType, {silent:true}); }, - _changePreserveCells: function(e){ - this.lattice.set("shouldPreserveCells", $(e.target).prop("checked")); - }, - _setTetraCell: function(e){ e.preventDefault(); this.lattice.set("freeformCellType", "tetra"); @@ -142,11 +137,7 @@ LatticeMenuView = Backbone.View.extend({ <li><a id="freeformTetraCell" href="#">tetra</a></li>\ </ul>\ </div>\ - <% } else { %>\ - <label class="checkbox">\ - <input type="checkbox" <% if (shouldPreserveCells) { %> checked="checked" <% } %> value="" id="preserveCells" data-toggle="checkbox" class="custom-checkbox"><span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>\ - Preserve cells on lattice change\ - </label>\ + <br/><br/>\ <% } %>\ <br/>\ Scale: <input id="scaleSlider" data-slider-id="ex1Slider" type="text" data-slider-min="1" data-slider-max="100" data-slider-step="0.1" data-slider-value="<%= scale %>"/>\ diff --git a/js/models/BasePlane.js b/js/models/BasePlane.js index f95c81518d35b024ad4d2a0d08b685e919219324..7afbb7125af22702ff7b272de245202ac2da38f9 100644 --- a/js/models/BasePlane.js +++ b/js/models/BasePlane.js @@ -39,6 +39,8 @@ BasePlane = Backbone.Model.extend({ }); }, + updateXYSeparation: function(xySep) {}, + getOrientation: function(){ return new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0,0,1), Math.PI); }, @@ -112,11 +114,9 @@ OctaBasePlane = BasePlane.extend({ if (j == -dimX || i == -dimY) continue; if (Math.abs(j)%2==1){ -// faces.push(new THREE.Face3(currentOffset-1, currentOffset-2, currentOffset-2-2*baseDim)); faces.push(new THREE.Face3(3*currentOffset-4, 3*currentOffset-8-6*dimY, 3*currentOffset-6-6*dimY));//pt, base, base } else { faces.push(new THREE.Face3(3*currentOffset-1, 3*currentOffset-8-6*dimY, 3*currentOffset-6-6*dimY));//pt, base, base -// faces.push(new THREE.Face3(currentOffset-1, currentOffset-2, currentOffset-3-2*baseDim)); } } @@ -143,7 +143,7 @@ OctaBasePlane = BasePlane.extend({ dmaGlobals.three.render(); }, - _calcOctaFaceVertices: function(colSep){ + _calcOctaFaceVertices: function(xySep){ var vertices = []; @@ -153,9 +153,9 @@ OctaBasePlane = BasePlane.extend({ var dimX = this.get("dimX"); var dimY = this.get("dimY"); - var baseVertOffset = colSep/Math.sqrt(3); + var baseVertOffset = xySep/Math.sqrt(3); var pointVertOffset = 2*baseVertOffset; - var horizontalOffset = colSep; + var horizontalOffset = xySep; for (var j=-dimX;j<=dimX;j++){ for (var i=-dimY;i<=dimY;i++){ @@ -175,9 +175,9 @@ OctaBasePlane = BasePlane.extend({ return vertices; }, - updateColSeparation: function(colSep){ + updateXYSeparation: function(xySep){ var geometry = this.get("mesh")[0].geometry; - geometry.vertices = this._calcOctaFaceVertices(colSep); + geometry.vertices = this._calcOctaFaceVertices(xySep); geometry.verticesNeedUpdate = true; }, diff --git a/js/models/Lattice.js b/js/models/Lattice.js index 50cf15998c9ee26fbed5e4c1e282fd11b235d1f6..6b19e6a36c161debcf7624fa882053001b784c39 100644 --- a/js/models/Lattice.js +++ b/js/models/Lattice.js @@ -16,10 +16,11 @@ Lattice = Backbone.Model.extend({ basePlane: null,//plane to build from scale: 20, highlighter: null,//highlights build-able surfaces + //todo this is not exposed in ui, is that useful? shouldPreserveCells: true,//preserve cells when changing lattice type //spacing for connectors/joints - cellSeparation: {xy:0.1, z:0}, + cellSeparation: {xy:0, z:0}, cellMode: "cell",//show cells vs parts cellType: "octa", @@ -312,7 +313,7 @@ Lattice = Backbone.Model.extend({ var cellSep = this.get("cellSeparation"); var scale = this.get("scale"); var cellMode = this.get("cellMode"); - //this.get("basePlane").updateColSeparation(cellSep.xy); + this.get("basePlane").updateXYSeparation(cellSep.xy); this._iterCells(this.get("cells"), function(cell){ if (cell) cell.updateForScale(scale, cellMode); });