/** * Created by aghassaei on 6/2/15. */ define(['underscore', 'backbone', 'appState', 'lattice', 'threeModel', 'three', 'baseplane'], function(_, Backbone, appState, lattice, three, THREE, BasePlane){ return BasePlane.extend({ _makeBasePlaneMesh: function(){ var geometry = new THREE.Geometry(); geometry.vertices = this._calcOctaFaceVertices(0.0); var faces = geometry.faces; 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(); // // _.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); } }); });