From 0c709aebdc3558bd0b19cb9c10422085646b9124 Mon Sep 17 00:00:00 2001 From: Amanda Ghassaei <amandaghassaei@gmail.com> Date: Tue, 18 Aug 2015 19:10:33 -0400 Subject: [PATCH] gik lattice reorientation, and axes --- assets/imgs/axes.png | Bin 0 -> 8947 bytes js/cam/assemblers/Assembler.js | 8 ++-- js/lattice/latticeSubclasses/GIKLattice.js | 4 +- js/main.js | 1 + js/menus/Ribbon.js | 9 +++- js/menus/templates/Ribbon.html | 1 + js/models/AppState.js | 9 ++++ js/plists/CamPList.js | 6 +-- js/three/Axes.js | 53 +++++++++++++++++++++ 9 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 assets/imgs/axes.png create mode 100644 js/three/Axes.js diff --git a/assets/imgs/axes.png b/assets/imgs/axes.png new file mode 100644 index 0000000000000000000000000000000000000000..572060aac6865b27b61fd5e2ffa1c2c711b82bda GIT binary patch literal 8947 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 literal 0 HcmV?d00001 diff --git a/js/cam/assemblers/Assembler.js b/js/cam/assemblers/Assembler.js index 4edf6fd8..c4fa5a07 100644 --- a/js/cam/assemblers/Assembler.js +++ b/js/cam/assemblers/Assembler.js @@ -72,7 +72,7 @@ define(['underscore', 'appState', 'lattice', 'stlLoader', 'threeModel', 'cam', ' if (json.scale) geometry.applyMatrix(new THREE.Matrix4().makeScale(json.scale, json.scale, json.scale)); geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-21, -0.63, 0));//todo get rid of these - geometry.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI/2)); +// geometry.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI/2)); return geometry; } @@ -339,10 +339,10 @@ define(['underscore', 'appState', 'lattice', 'stlLoader', 'threeModel', 'cam', ' if (totalThreads > 0) return; callback(); } - var startingPos = {x:this.components.yAxis.getPosition().x, y:this.components.xAxis.getPosition().y, z:this.components.zAxis.getPosition().z}; + var startingPos = {x:this.components.xAxis.getPosition().x, y:this.components.yAxis.getPosition().y, z:this.components.zAxis.getPosition().z}; speed = this._normalizeSpeed(startingPos, position, new THREE.Vector3(speed, speed, speed)); - this.components.yAxis.moveTo(this._makeAxisVector(position, "x"), speed.x, sketchyCallback); - this.components.xAxis.moveTo(this._makeAxisVector(position, "y"), speed.y, sketchyCallback); + this.components.xAxis.moveTo(this._makeAxisVector(position, "x"), speed.x, sketchyCallback); + this.components.yAxis.moveTo(this._makeAxisVector(position, "y"), speed.y, sketchyCallback); this.components.zAxis.moveTo(this._makeAxisVector(position, "z"), speed.z, sketchyCallback); }; diff --git a/js/lattice/latticeSubclasses/GIKLattice.js b/js/lattice/latticeSubclasses/GIKLattice.js index 1c0150a2..67f16a40 100644 --- a/js/lattice/latticeSubclasses/GIKLattice.js +++ b/js/lattice/latticeSubclasses/GIKLattice.js @@ -44,12 +44,12 @@ define(['underscore', 'backbone', 'appState', 'globals', 'plist', 'three', 'thre }, _zIndexRotation: function(index){ - if (index.z%2 == 0) return Math.PI/2; + if (index.z%2 != 0) return Math.PI/2; return 0; }, _zIndexRotationSuperCell: function(index){ - if (index.z%2 != 0) return -Math.PI/2;//this never changes + if (index.z%2 != 0) return Math.PI/2;//this goes neg if zIndexRotation rules are opp? need to clear this up eventually return 0; }, diff --git a/js/main.js b/js/main.js index ee92b4e1..82f8cf4e 100644 --- a/js/main.js +++ b/js/main.js @@ -22,6 +22,7 @@ require.config({ threeModel: 'three/ThreeModel', threeView: 'three/ThreeView', fillGeometry: 'three/FillGeometry', + axes: 'three/Axes', //plist plist: 'plists/PList', diff --git a/js/menus/Ribbon.js b/js/menus/Ribbon.js index cbfaf48f..9b30673d 100644 --- a/js/menus/Ribbon.js +++ b/js/menus/Ribbon.js @@ -12,7 +12,8 @@ define(['jquery', 'underscore', 'backbone', 'plist', 'lattice', 'appState', 'tex "click .ribbonCellMode": "_updateCellMode", "click .ribbonDeleteMode": "_updateDeleteMode", "click .highlightMode": "_updateHighlightMode", - "click .cellsVisible": "_updateCellVisibility" + "click .cellsVisible": "_updateCellVisibility", + "click #ribbonAxesToggle": "_setAxesVis" }, initialize: function(){ @@ -25,6 +26,7 @@ define(['jquery', 'underscore', 'backbone', 'plist', 'lattice', 'appState', 'tex this.listenTo(this.model, "change:deleteMode", this.render); this.listenTo(this.model, "change:highlightMode", this.render); this.listenTo(this.model, "change:cellsVisible", this.render); + this.listenTo(this.model, "change:axesAreVisible", this.render); this.listenTo(lattice, "change:cellType change:connectionType", this.render); this.render(); }, @@ -55,6 +57,11 @@ define(['jquery', 'underscore', 'backbone', 'plist', 'lattice', 'appState', 'tex else this.$el.hide(); }, + _setAxesVis: function(e){ + e.preventDefault(); + this.model.set("axesAreVisible", !this.model.get("axesAreVisible")); + }, + render: function(){ this.$el.html(this.template(_.extend(lattice.toJSON(), this.model.toJSON(), plist))); }, diff --git a/js/menus/templates/Ribbon.html b/js/menus/templates/Ribbon.html index 72ed5e43..1539dd93 100644 --- a/js/menus/templates/Ribbon.html +++ b/js/menus/templates/Ribbon.html @@ -10,6 +10,7 @@ <% if (currentNav != "electronicNavSim" && currentNav != "mechanicalNavSim" && currentNav != "navAssemble" && currentNav != "navOptimize"){%> <a class="btn btn-primary btn-ribbon ribbonDeleteMode<% if (deleteMode){ %> ribbon-selected"<% } %>"><span class="fui-cross"></span></a> <% } %> + <a id="ribbonAxesToggle" class="btn btn-primary btn-ribbon <% if (axesAreVisible){ %> ribbon-selected"<% } %>">Axes</a> </div> </div> <!--//<a class="btn btn-primary btn-ribbon highlightMode<% if (highlightMode){ %> ribbon-selected<% } %>" href="#"><img data-type="part" src="assets/imgs/cursor-light.png"></a>--> diff --git a/js/models/AppState.js b/js/models/AppState.js index fde99e78..fc26021b 100644 --- a/js/models/AppState.js +++ b/js/models/AppState.js @@ -62,6 +62,7 @@ define(['underscore', 'backbone', 'threeModel', 'three', 'plist', 'globals'], fu this.listenTo(this, "change:materialType", this._materialTypeChanged); this.listenTo(this, "change:gikLength", this._gikLengthChanged); this.listenTo(this, "change:turnOffRendering", this._renderingOnOff); + this.listenTo(this, "change:axesAreVisible", this._showAxes); this.downKeys = {};//track keypresses to prevent repeat keystrokes on hold this.lastCellMode = this.get("cellMode");//store this to toggle on/off hide mode @@ -149,6 +150,14 @@ define(['underscore', 'backbone', 'threeModel', 'three', 'plist', 'globals'], fu if (!this.get("turnOffRendering")) three.render(); }, + _showAxes: function(){ + var visible = this.get("axesAreVisible"); + require(['axes'], function(axes){ + axes.setVisibility(visible); + three.render(); + }) + }, + /////////////////////////////////////////////////////////////////////////////// /////////////////////KEY BINDINGS////////////////////////////////////////////// diff --git a/js/plists/CamPList.js b/js/plists/CamPList.js index 06369459..fa1a63aa 100644 --- a/js/plists/CamPList.js +++ b/js/plists/CamPList.js @@ -111,8 +111,7 @@ define(['three'], function(THREE){ }, name: "Stock 1", parent: "zAxis", - position: {x:0,y:0,z:0}, - rotation: {x:0, y:0, z:Math.PI/2} + position: {x:0,y:0,z:0} }, stock2: { description:{ @@ -121,8 +120,7 @@ define(['three'], function(THREE){ }, name: "Stock 2", parent: "zAxis", - position: {x:0.236,y:26,z:0}, - rotation: {x:0, y:0, z:Math.PI/2} + position: {x:26,y:0.236,z:0} } }, lattice:{ diff --git a/js/three/Axes.js b/js/three/Axes.js new file mode 100644 index 00000000..ffd7759b --- /dev/null +++ b/js/three/Axes.js @@ -0,0 +1,53 @@ +/** + * Created by aghassaei on 8/18/15. + */ + + +define(['three', 'threeModel'], function(THREE, three){ + + var radius = 0.5; + var height = 20; + + var arrowGeometry = new THREE.CylinderGeometry(0, 2 * radius, height / 5); + var axisGeometry = new THREE.CylinderGeometry(radius, radius, height); + + var xAxisMaterial = new THREE.MeshBasicMaterial({color: 0xFF0000}); + var xAxisMesh = new THREE.Mesh(axisGeometry, xAxisMaterial); + var xArrowMesh = new THREE.Mesh(arrowGeometry, xAxisMaterial); + xAxisMesh.add(xArrowMesh); + xArrowMesh.position.y += height / 2; + xAxisMesh.rotation.z -= 90 * Math.PI / 180; + xAxisMesh.position.x += height / 2; + + var yAxisMaterial = new THREE.MeshBasicMaterial({color: 0x00FF00}); + var yAxisMesh = new THREE.Mesh(axisGeometry, yAxisMaterial); + var yArrowMesh = new THREE.Mesh(arrowGeometry, yAxisMaterial); + yAxisMesh.add(yArrowMesh); + yArrowMesh.position.y += height / 2; + yAxisMesh.position.y += height / 2; + + var zAxisMaterial = new THREE.MeshBasicMaterial({color: 0x0000FF}); + var zAxisMesh = new THREE.Mesh(axisGeometry, zAxisMaterial); + var zArrowMesh = new THREE.Mesh(arrowGeometry, zAxisMaterial); + zAxisMesh.add(zArrowMesh); + zAxisMesh.rotation.x += 90 * Math.PI / 180; + zArrowMesh.position.y += height / 2; + zAxisMesh.position.z += height / 2; + + var axesMesh = new THREE.Object3D(); + axesMesh.add(xAxisMesh); + axesMesh.add(yAxisMesh); + axesMesh.add(zAxisMesh); + three.sceneAdd(axesMesh); + setVisibility(false); + + + function setVisibility(visible){ + axesMesh.visible = visible; + } + + return { + setVisibility: setVisibility + } + +}); \ No newline at end of file -- GitLab