From 5be207da2c11b33ed57d35a7d995241d927785c9 Mon Sep 17 00:00:00 2001 From: Amanda Ghassaei <amandaghassaei@gmail.com> Date: Thu, 9 Apr 2015 15:49:04 -0400 Subject: [PATCH] added troxes as freeform default --- assets/stls/parts/troxOcta.stl | Bin 0 -> 53684 bytes assets/stls/parts/troxTetra.stl | Bin 0 -> 22884 bytes index.html | 6 +--- js/fea/DMAPartTrox.js | 62 ++++++++++++++++++++++++++++++++ js/fea/DmaCellOcta.js | 4 +-- js/fea/DmaCellTetra.js | 10 ++++-- js/models/AppState.js | 2 +- 7 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 assets/stls/parts/troxOcta.stl create mode 100644 assets/stls/parts/troxTetra.stl create mode 100644 js/fea/DMAPartTrox.js diff --git a/assets/stls/parts/troxOcta.stl b/assets/stls/parts/troxOcta.stl new file mode 100644 index 0000000000000000000000000000000000000000..b113b73de405df5e33499edd9ad871dc3429ab96 GIT binary patch literal 53684 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 F{{Y9=eDeSR literal 0 HcmV?d00001 diff --git a/assets/stls/parts/troxTetra.stl b/assets/stls/parts/troxTetra.stl new file mode 100644 index 0000000000000000000000000000000000000000..cf90fabbb97fa7942fa35e424b421996a002de25 GIT binary patch literal 22884 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 GGx1*|h*?_z literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 60898e3d..ca27133d 100644 --- a/index.html +++ b/index.html @@ -36,11 +36,6 @@ <!--numerical javascript--> <script src="dependencies/numeric-1.2.6.js"></script> - <!--global variables--> - <script> - - </script> - <!--multi-threading--> <script src="js/worker.js"></script> <script src="js/persistentWorkers.js"></script><!--global workers--> @@ -53,6 +48,7 @@ <script src="js/fea/DmaCellTetra.js"></script> <script src="js/fea/DmaCellOther.js"></script> <script src="js/fea/DmaPart.js"></script> + <script src="js/fea/DMAPartTrox.js"></script> <!--models--> <script src="js/models/ThreeModel.js"></script> diff --git a/js/fea/DMAPartTrox.js b/js/fea/DMAPartTrox.js new file mode 100644 index 00000000..9c0ecd2f --- /dev/null +++ b/js/fea/DMAPartTrox.js @@ -0,0 +1,62 @@ +/** + * Created by aghassaei on 4/9/15. + */ + + +(function () { + + var tetraTrox; + + //import part geometry + var loader = new THREE.STLLoader(); + loader.load("assets/stls/parts/troxTetra.stl", function(geometry){ + + tetraTrox = geometry; + tetraTrox.computeBoundingBox(); + var unitScale = 1/3.25; + tetraTrox.applyMatrix(new THREE.Matrix4().makeScale(unitScale, unitScale, unitScale)); +// tetraTrox.applyMatrix(new THREE.Matrix4().makeTranslation(0.25,-0.6, -0.45)); +// tetraTrox.applyMatrix(new THREE.Matrix4().makeRotationZ(-Math.PI/6)); + }); + + function DMATetraTroxPart(type, parent){ + DMAPart.call(this, type, parent); + } + DMATetraTroxPart.prototype = Object.create(DMAPart.prototype); + + DMATetraTroxPart.prototype._makeMeshForType = function(){ + console.log("mesh"); + var mesh = new THREE.Mesh(tetraTrox, partMaterial); + mesh.myPart = this;//need a ref back to this part + return mesh; + }; + + self.DMATetraTroxPart = DMATetraTroxPart; + + var octaTrox; + + //import part geometry + loader.load("assets/stls/parts/troxOcta.stl", function(geometry){ + + octaTrox = geometry; + octaTrox.computeBoundingBox(); + var unitScale = 1/3.25; + octaTrox.applyMatrix(new THREE.Matrix4().makeScale(unitScale, unitScale, unitScale)); +// octaTrox.applyMatrix(new THREE.Matrix4().makeTranslation(0.25,-0.6, -0.45)); +// octaTrox.applyMatrix(new THREE.Matrix4().makeRotationZ(-Math.PI/6)); + }); + + function DMAOctaTroxPart(type, parent){ + DMAPart.call(this, type, parent); + } + DMAOctaTroxPart.prototype = Object.create(DMAPart.prototype); + + DMAOctaTroxPart.prototype._makeMeshForType = function(){ + var mesh = new THREE.Mesh(octaTrox, partMaterial); + mesh.myPart = this;//need a ref back to this part + return mesh; + }; + + self.DMAOctaTroxPart = DMAOctaTroxPart; + +})(); diff --git a/js/fea/DmaCellOcta.js b/js/fea/DmaCellOcta.js index 8bbea381..0c269cf7 100644 --- a/js/fea/DmaCellOcta.js +++ b/js/fea/DmaCellOcta.js @@ -91,9 +91,7 @@ DMAFreeFormOctaCell.prototype._doMeshTransformations = function(mesh){ DMAFreeFormOctaCell.prototype._initParts = function(){ var parts = []; - for (var i=0;i<3;i++){ - parts.push(new DMATrianglePart(i, this)); - } + parts.push(new DMAOctaTroxPart(1, this)); return parts; }; diff --git a/js/fea/DmaCellTetra.js b/js/fea/DmaCellTetra.js index e7b4a36e..3faa86fa 100644 --- a/js/fea/DmaCellTetra.js +++ b/js/fea/DmaCellTetra.js @@ -3,7 +3,7 @@ */ /////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////FACE CONNECTED OCTA//////////////////////////////////////////////////// +////////////////////////FACE CONNECTED TETRA/////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// var unitCellGeo = new THREE.TetrahedronGeometry(Math.sqrt(3/8)); @@ -37,7 +37,7 @@ DMATetraFaceCell.prototype._getGeometry = function(){ /////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////EDGE CONNECTED OCTA//////////////////////////////////////////////////// +////////////////////////EDGE CONNECTED TETRA/////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// function DMATetraEdgeCell(indices, scale, cellMode, partType){ @@ -83,6 +83,12 @@ DMAFreeFormTetraCell.prototype.getType = function(){ return "tetra"; }; +DMAFreeFormTetraCell.prototype._initParts = function(){ + var parts = []; + parts.push(new DMATetraTroxPart(1, this)); + return parts; +}; + DMAFreeFormTetraCell.prototype.xScale = function(scale){ if (!scale) scale = this.getScale(); return scale; diff --git a/js/models/AppState.js b/js/models/AppState.js index 4e51b2d0..9922c1b2 100644 --- a/js/models/AppState.js +++ b/js/models/AppState.js @@ -64,7 +64,7 @@ AppState = Backbone.Model.extend({ //truss:"Truss" }, freeformFace: { - triangle:"Triangle" + trox:"Troxes" //beam:"Beam" }, edge: null, -- GitLab