diff --git a/js/cells/GIKCell.js b/js/cells/GIKCell.js index 3fd43699f5ec06fa2f9a1340e65452821298e3f9..c5b0651946a1ba261d475aadd4f178e22b864478 100644 --- a/js/cells/GIKCell.js +++ b/js/cells/GIKCell.js @@ -41,8 +41,14 @@ define(['underscore', 'three', 'threeModel', 'lattice', 'appState', 'cubeCell'], callback(parts); }); } else if (lattice.get("partType") == "dnaStraight") { - require(['gikPartLowPoly'], function(PartSubclass){ - parts.push(new PartSubclass(self.index.x, self)); + require(['dnaStraightPart'], function(PartSubclass){ + for (var i=0;i<16;i++){ + parts.push(new PartSubclass(self.index.x, self, { + vertIndex: i, + isBridge: false + })); + } + parts.push(new PartSubclass(self.index.x, self, {isBridge: true})); callback(parts); }); } diff --git a/js/main.js b/js/main.js index f380e40a3f734bbf1ece96ac74a071b989dfc20b..895b59f9dfce9112cb9a561f23026cbe3181e904 100644 --- a/js/main.js +++ b/js/main.js @@ -108,6 +108,7 @@ require.config({ kennyTeqHighResPart: 'parts/KennyTeqHighResPart', samTeqPart: 'parts/SamTeqPart', legoPart: 'parts/LegoPart', + dnaStraightPart: 'parts/DNAStraightPart', //materials materials: 'materials/DMAMaterials', @@ -212,7 +213,8 @@ require.config({ gikEndPartLowPolySTL: 'assets/stls/parts/GIKEndPartLowPoly.stl', kennyTeqPartSTL: 'assets/stls/parts/KennyTeqPart.stl', kennyTeqPartHighResSTL: 'assets/stls/parts/KennyTeqPartHighRes.stl', - samTeqPartSTL: 'assets/stls/parts/SamTeqPart.stl' + samTeqPartSTL: 'assets/stls/parts/SamTeqPart.stl', + legoBrickSTL: 'assets/stls/parts/legoBrick1x1.stl' }, diff --git a/js/parts/DMAPart.js b/js/parts/DMAPart.js index 9efd36d3122b7e82c19b2beac0e99f54c5025250..ed351a788dced9ff8de84245276dfd0eee66019c 100644 --- a/js/parts/DMAPart.js +++ b/js/parts/DMAPart.js @@ -6,7 +6,7 @@ define(['underscore', 'three'], function(_, THREE){ - function DMAPart(index, parent) { + function DMAPart(index, parent, options) { this.parentCell = parent; this.index = index; this.mesh = this._buildMesh(); diff --git a/js/parts/DNAStraightPart.js b/js/parts/DNAStraightPart.js new file mode 100644 index 0000000000000000000000000000000000000000..80a8fbffc36c92132a5bc75679bad8603e543bc0 --- /dev/null +++ b/js/parts/DNAStraightPart.js @@ -0,0 +1,75 @@ +/** + * Created by aghassaei on 9/14/15. + */ + + +define(['underscore', 'stlLoader', 'gikPart'], function(_, THREE, GIKPart){ + + var zScale = 1/8; + var unitGeo = new THREE.BoxGeometry(0.2, 0.2, zScale); + + var bridgeGeo = new THREE.BoxGeometry(0.3, 0.4, zScale); + var bridgeMaterial = new THREE.MeshLambertMaterial({color:'#000000'}); + + var nuclMaterials = { + a: new THREE.MeshLambertMaterial({color:"#cc00cc"}), + t: new THREE.MeshLambertMaterial({color:"#ff6600"}), + c: new THREE.MeshLambertMaterial({color:"#66ffff"}), + g: new THREE.MeshLambertMaterial({color:"#00ff33"}) + }; + + + function DNAStraightPart(index, parent, options){ + + this._isBridge = options.isBridge; + if (!this._isBridge){ + this._vertIndex = options.vertIndex; + if (!options.nuclType) this._nuclType = this._randomNucleotide(); + else this._nuclType = options.nuclType; + } + + + GIKPart.call(this, index, parent, options); + } + DNAStraightPart.prototype = Object.create(GIKPart.prototype); + + DNAStraightPart.prototype._randomNucleotide = function(){ + var rand = Math.random(); + if (rand < 0.25) return 'a'; + if (rand < 0.5) return 't'; + if (rand < 0.75) return 'c'; + return 'g'; + }; + + DNAStraightPart.prototype._getGeometry = function(){ + if (this._isBridge) return bridgeGeo; + return unitGeo; + }; + + DNAStraightPart.prototype.getMaterial = function(returnTHREEObject){ + if (returnTHREEObject) { + if (this._isBridge) return bridgeMaterial; + return nuclMaterials[this._nuclType]; + } + return GIKPart.prototype.getMaterial.call(this, returnTHREEObject); + }; + + DNAStraightPart.prototype._translatePart = function(mesh){ + if (this._isBridge){ + mesh.translateX(0.15+0.2); + mesh.translateZ(this.parentCell.zScale()/2-zScale/2); + return mesh; + } + var xOffset = 0.1; + var yOffset = -0.1; + if (this.index == 1) { + xOffset = -0.1; + yOffset = 0.1; + } + mesh.position.set(xOffset, yOffset, this.parentCell.zScale()/2-zScale/2-this._vertIndex*zScale); + return mesh; + }; + + return DNAStraightPart; + +}); \ No newline at end of file diff --git a/js/parts/LegoPart.js b/js/parts/LegoPart.js index 5519e8e582568b9de90644ae184325fb2edda325..040bb79a1f1cbc14ea55b2583737e433031ab619 100644 --- a/js/parts/LegoPart.js +++ b/js/parts/LegoPart.js @@ -3,7 +3,7 @@ */ -define(['underscore', 'stlLoader', 'gikPart', 'bin!../assets/stls/parts/legoBrick1x1.stl'], function(_, THREE, GIKPart, stl){ +define(['underscore', 'stlLoader', 'gikPart', 'bin!legoBrickSTL'], function(_, THREE, GIKPart, stl){ var loader = new THREE.STLLoader(); var unitGeo = preProcessGeo(loader.parse(stl)); diff --git a/js/plists/PList.js b/js/plists/PList.js index fee1cb42b910735e8787fe7d879ffb5007c34ce6..56f4b6793d522d0953471b07586452ed4e2f58cb 100644 --- a/js/plists/PList.js +++ b/js/plists/PList.js @@ -254,11 +254,11 @@ define(['three'], function(THREE){ dnaBricks: { name: "DNA Bricks", parts: { - dnaLego: { - name: "Lego Blocks" - }, dnaStraight: { name: "DNA (straight chains)" + }, + dnaLego: { + name: "Lego Blocks" } }, aspectRatio: new THREE.Vector3(1,1,1),