diff --git a/js/baseplane/HexagonalBasePlane.js b/js/baseplane/HexagonalBasePlane.js index 0aec6a61d7c0fd1773cf692db01a3f65c77ca004..b012fd787ed5a1e1778b3a546f5561a4ff3dad6c 100644 --- a/js/baseplane/HexagonalBasePlane.js +++ b/js/baseplane/HexagonalBasePlane.js @@ -10,96 +10,36 @@ define(['underscore', 'backbone', 'appState', 'lattice', 'threeModel', 'three', 'baseplane'], function(_, Backbone, appState, lattice, three, THREE, BasePlane){ - return BasePlane.extend({ + return BasePlane.extend({ _makeBasePlaneMesh: function(){ - var geometry = new THREE.Geometry(); - geometry.vertices = this._calcOctaFaceVertices(0.0); - var faces = geometry.faces; + var scale = lattice.xScale(); + var dimX = this.get("dimX")*scale; + var dimY = this.get("dimY")*scale; - var dimX = this.get("dimX"); - var dimY = this.get("dimY"); - - var currentOffset = 0; - for (var j=-dimX;j<=dimX;j++){ - for (var i=-dimY;i<=dimY;i++){ - - currentOffset++; - if (j == -dimX || i == -dimY) continue; - - if (Math.abs(j)%2==1){ - 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 - } - - } - - } - - geometry.computeFaceNormals(); - return [new THREE.Mesh(geometry, this.get("material"))]; - }, - -// _renderZIndexChange: function(){ -// var zIndex = this.get("zIndex"); -// var xScale = lattice.xScale(); -// var yScale = lattice.yScale(); -// var zScale = lattice.zScale(); +// var geometry = new THREE.Geometry(); // -// _.each(this.get("mesh"), function(mesh){ -// mesh.position.set(xScale*(zIndex%2)/2, -yScale/3*(zIndex%2), zIndex*zScale); -// mesh.rotation.set(Math.PI*(zIndex%2),0,0) -// }); -// three.render(); -// }, - - _calcOctaFaceVertices: function(xySep){ - - var vertices = []; - - var xScale = lattice.xScale(); - var yScale = lattice.yScale(); - - var dimX = this.get("dimX"); - var dimY = this.get("dimY"); - - var baseVertOffset = xySep/Math.sqrt(3); - var pointVertOffset = 2*baseVertOffset; - var horizontalOffset = xySep; - - var yOffset = 1/Math.sqrt(3)/2; - - for (var j=-dimX;j<=dimX;j++){ - for (var i=-dimY;i<=dimY;i++){ - - var xOffset = 0; - if (Math.abs(j)%2!=0) { - xOffset = 1/2*xScale; - } - - vertices.push(new THREE.Vector3(i*xScale + xOffset - horizontalOffset - xScale/2, j*yScale + baseVertOffset - yOffset, 0)); - vertices.push(new THREE.Vector3(i*xScale + xOffset + horizontalOffset - xScale/2, j*yScale + baseVertOffset - yOffset, 0)); - vertices.push(new THREE.Vector3(i*xScale + xOffset - xScale/2, j*yScale - pointVertOffset - yOffset, 0)); - - } - - } - return vertices; - }, - - updateXYSeparation: function(xySep){ - var geometry = this.get("mesh")[0].geometry; - geometry.vertices = this._calcOctaFaceVertices(xySep); - geometry.verticesNeedUpdate = true; - }, - - calcHighlighterParams: function(face, point){ - point.z = 0; - var index = lattice.getIndexForPosition(point); - if (index.z%2 != 0) index.x -= 1; - return BasePlane.prototype.calcHighlighterParams.call(this, face, point, index); +// for ( var i = - dimX; i <= dimX+1; i += scale ) { +// geometry.vertices.push( new THREE.Vector3(-dimX-scale/2, i-scale/2, 0.01)); +// geometry.vertices.push( new THREE.Vector3(dimX-scale/2, i-scale/2, 0.01)); +// geometry.vertices.push( new THREE.Vector3(i-scale/2, -dimX-scale/2, 0.01)); +// geometry.vertices.push( new THREE.Vector3(i-scale/2, dimX-scale/2, 0.01)); +// +// } +// + var planeGeometry = new THREE.Geometry(); + planeGeometry.vertices.push( new THREE.Vector3(-dimX-scale/2, -dimX-scale/2, 0)); + planeGeometry.vertices.push( new THREE.Vector3(dimX+scale/2, -dimX-scale/2, 0)); + planeGeometry.vertices.push( new THREE.Vector3(-dimX-scale/2, dimX+scale/2, 0)); + planeGeometry.vertices.push( new THREE.Vector3(dimX+scale/2, dimX+scale/2, 0)); + planeGeometry.faces.push(new THREE.Face3(0, 1, 3)); + planeGeometry.faces.push(new THREE.Face3(0, 3, 2)); + planeGeometry.computeFaceNormals(); + + var mesh = new THREE.Mesh(planeGeometry, new THREE.MeshBasicMaterial({color:0x000000, transparent:true, opacity:0.0})); + return [mesh]; +// return [mesh, new THREE.Line(geometry, new THREE.LineBasicMaterial({color:0x000000, transparent:true, linewidth:2, opacity:this.get("material").opacity}), THREE.LinePieces)]; } }); }); \ No newline at end of file diff --git a/js/cells/HexagonalCell.js b/js/cells/HexagonalCell.js index e3cd7d14fe4e1f286e51f7e5a450531ca5f45ca3..3b5b687462e0906303de46e1b80e724a0e931a91 100644 --- a/js/cells/HexagonalCell.js +++ b/js/cells/HexagonalCell.js @@ -6,7 +6,7 @@ define(['underscore', 'three', 'threeModel', 'lattice', 'appState', 'cell'], function(_, THREE, three, lattice, appState, DMACell){ - var unitCellGeo = new THREE.CylinderGeometry(Math.sqrt(3)/2, Math.sqrt(3)/2, 1, 6); + var unitCellGeo = new THREE.CylinderGeometry(1, 1, 1, 6); unitCellGeo.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI/2)); function HexagonalCell(json, superCell){ @@ -26,5 +26,18 @@ define(['underscore', 'three', 'threeModel', 'lattice', 'appState', 'cell'], // return wireframe; // }; + + HexagonalCell.prototype._buildWireframe = function(mesh){//abstract mesh representation of cell + var wireframe = new THREE.EdgesHelper(mesh, 0x000000); + wireframe.matrixWorld = mesh.matrixWorld; + wireframe.matrixAutoUpdate = true; + return wireframe; + }; + + HexagonalCell.prototype.calcHighlighterParams = function(face, point){//this works for rectalinear, override in subclasses + var direction = this.applyAbsoluteRotation(face.normal.clone());//todo local orientation? + if (direction.z < 0.9) return null; + }; + return HexagonalCell; }); \ No newline at end of file diff --git a/js/lattice/latticeSubclasses/HexagonalLattice.js b/js/lattice/latticeSubclasses/HexagonalLattice.js index 24a6d36d578e9507b927290e316323999a2cf510..b62b5c27dd5df9a616e5070a8c78c4a69c1db3e4 100644 --- a/js/lattice/latticeSubclasses/HexagonalLattice.js +++ b/js/lattice/latticeSubclasses/HexagonalLattice.js @@ -22,20 +22,28 @@ define(['underscore', 'backbone', 'appState', 'globals', 'plist', 'three', 'thre }, getIndexForPosition: function(absPosition){ - return this._indexForPosition(absPosition); + var index = this._indexForPosition(absPosition); + if (index.y%2 != 0) { + absPosition.x += this.xScale()/2; + index = this._indexForPosition(absPosition); + } + return index; }, getPositionForIndex: function(index){ - return this._positionForIndex(index); + var position = this._positionForIndex(index); + if ((index.y%2) != 0) position.x -= this.xScale()/2; + return position; }, xScale: function(cellSeparation){ if (cellSeparation === undefined) cellSeparation = this.get("cellSeparation").xy; - return 2*Math.sqrt(3)+2*cellSeparation; + return Math.sqrt(3)+2*cellSeparation; }, yScale: function(cellSeparation){ - return this.xScale(cellSeparation); + if (cellSeparation === undefined) cellSeparation = this.get("cellSeparation").xy; + return 1.5+2*cellSeparation; }, zScale: function(cellSeparation){