From b21d315866684470cacb13fd6c63f877da0e4db5 Mon Sep 17 00:00:00 2001
From: Amanda Ghassaei <amandaghassaei@gmail.com>
Date: Wed, 1 Apr 2015 00:59:33 -0400
Subject: [PATCH] low poly part

---
 assets/stls/parts/edgeVoxPartLowPoly.stl | Bin 34688 -> 6684 bytes
 js/fea/DmaCell.js                        |   3 +++
 js/fea/DmaCellOcta.js                    |  17 ++++++++++++-
 js/fea/DmaPart.js                        |  30 +++++++++++++++++++++++
 4 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/assets/stls/parts/edgeVoxPartLowPoly.stl b/assets/stls/parts/edgeVoxPartLowPoly.stl
index 42ad99e0e53e5cc1443780d51e551ce4677ce582..efef6ae803fd1e357be42cd9bb331ea7f8b14cee 100644
GIT binary patch
literal 6684
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
VR~LPEUHXyJz_kj5@+mr{e*uqwp4|Wd

literal 34688
zcmdU&+m7Wn4n^Pd73Y0WhGqHsIYCkbG|-bCbY}+n{GntYi<>?cMcGw7si#ysvZbX>
zilQ#{<J;FSzdwHc@!OX#zdRoQ{Pnl@KOcX5`~I(Azdoj>om@N4?{BSpv`rg--v80I
zk2n5^iaj3R{`2Si_s7?7-~JtceLVjA{{7GQzv#(Z4<%jGwUZAob$xiY__kk`@YYua
zC#r#4Kj|7j&7I#04)jvjx%RAJs;hf`KD6Ta!S_FY-)c?&6`P;MFgD%X`l+Sr4;L^f
zl@j=>DWrn<!2>;=!kcUQe(uI$?KtYjdGwBYqnjV}EQzB)4yjsH($K3*w{&yVO8BIo
zr)gT&jyN>vl;B>~D2GG2A`qTPgr)}t&&@o$Y3|p0>~DYSId2yU#9r`qwXiwW99Ti+
zgF1(RF8oCA01n~t#-A1FVSP_@EGGBRGd+ylS&^9!S@)2@YYO~S5arcEK~#en82SUj
z$t_)UzOf5+5PVR;@q#}o&;!E|29Keirq$TOZ)IMey0!1Re)6kbQbBAD@@vx<(Jl@j
zG*Wo$nt>|Zug;<xgHkEc7}lpY3aQ}XgGf)Ou)iQ!HN*}yf>KN|bfIGkv~XUheB^Lm
zF0X`CjwF-~Rg4hmb<;HZVU_aSbkjhQgqea?t5YrPJ+j3?1`JtC(lNaG#t+M~1S9Z|
zy&gdszHxo)<`7hPT@1`yaZ?IWU7rghnR}GwvctrX+=5c>5(MJo=Bb+_p8^WSwL&da
zQ%ELppkQ?iJTSodg*9eK5OzV8giaX=4cHij7a7FaMiTI5NWu^4Qn(L7>KTNfOsi@k
zlq*PwfDxmkD7tggHo4$3)9hh~8Qh79LU}OEr69gHEW^@|<i1`_W~~&+kNIWnhA^q2
z_g%n{trl+%DJ2Ebh%dA>6Kt_^G$v&yV^$6jFH}<qwQ73`zn;C59r0LmeACYDJZ`;k
z2mv`hp@z*%ydGhH4h8H}B@V8GkkQZqo(=&zAAZ@JLZ+^{h0svy?=^R{7kqY1p{`Bk
z*!Reev$K|;0zs=3m$juwPs=H0q(caC<1~zv9Sm_JnKK)N>E->f#Pp9XaC}pyx!4>w
z;vEa-RK!9@t>9G<6rIm)aB?Lel2K^Yx(h^#Q4U`eL3;s+-QPw_=0n4SKhnIz{{M!c
z!8T49Iu;3*`_|9n0Cuj}E4HQ@1B*Rx&;$4c7%ccNCONpKIC!d-5ft3pP&=PM&&V4N
znHM7kjAg_mhl>FkV=*QuC@F|w?V3#(Czs6Y56w7Gwu;jG>*`T9U*M9jlg)9t$tAOi
zv2nTYeJY0XYH>OAO)UmiZkNVe+lBOw!?E^fVUTJN1K24Br8%Np8lw*?`Ws@nK}8Ba
zT@CC74%1HjiRK`~qEh&Y>(LN<kV3OkU~>c6rP(<)b42oc!V!HQgYr6|tZNxW<gYVt
z7sm)hTCD`?d>kXPQgF$-X>n+xq}S}82@2umkRQ_?4QIEG5_f@6s)g;T2Jvyj#1#(A
zEDnMYwkkLzpTZ>gYScR|M?S^7ZV8J?F%2n#4c#|De1r}X9_b#k8iPUJryLZ1ItTUw
z+A9Qd;E!|+%-N9|vdJK94aXoe6<NQ++$6=|7gy|fW3O>Y;?`<)69+Cp2~gOfQ4bg7
zupkCnX^I=*Xa`x}%(<0IKFyZHjA#w=V_#&Q8NJG44I<eKE=5n}b;7n(L*T}wj7^`X
zg*mOa1d{+Qh^`SBn240toEJQZ2<N4L0}RzFD#xc&z_Eb>IX};|9g%iJPB47xBLx??
z;;%%nvOx0Ct7zi9;BL(8dTBP-Rl&ivQ|H%BSKMD}94xist)VGd9R|vLGCfE;6h7I^
zfi{KG>${MYAB}pbjvT7vY3?PZ0!7GS1p&E8iymOAt>uYP5VvrU26d4G<&=9r%%lgq
ze@HUr0M$KDtXEB0E2cjsRbdqa#X7VTvLC~4i3?Vt)C$E=OM!_<eosu&%@k&u^v`|{
z6b7SjV7^XjArlM=-x~F_?b;?USQvdu4T<knP#9^e%W#o`QY)^7dJ1fykXkU06VPq0
zS*EdXX?dHx0z?$raEb0wI;-qPHf9kAznU#*h+B0v00)`_^^05g!df{PYQ@!n0OhEc
z<-pc)!(vzN5Q>olscZ0~3mb&ZXNy=;j9!z=1|f#c8*J;~*|Y%`<n!!<05SYDVxVzi
z=ms*a8V-hPVS8=?aS+la5D+~X{R86wwie)GrA{$OXD71lSdM*9amq$DbYT}F?T)@E
z2BlKi7^Vdi1T@0<mgl<hPfW=&kAIK?&i;`Cb96`{45gWkq2*DEE(ORwL$qW)WL93Q
zJ1AJ94J!rk1Q#$IhyU|l746Ap4UivG-|>Sezt07+nr9sN4sILk#T!%)f|=9paRWP8
z1nMxwktXNBy7k~%&*{N_GsUUsYJdvU>8fs8{I-_LAL$TS*C>_ZQh*rJ1c3#u_`Q&o
z0?(>L*adlQM<g{SCDIO!!Ac>7^63$lV+y*w>FGWQ$tx(8!p77>VC7gFZdj%PH(=Tu
zTQBSK#vr`^Pjg60IG97u!IjGzA(X?r<P#vED)5Yng7j1(qQ%zS;7p`FnDcJz1#&UJ
zo&tNRzD1*!Lb--MQwte06@4SLkThiSsf>cOKyx~tb=yTP)KbXU_f7P4E#ROKwx10&
zZx1089j~#4OssQw!LTfm&7PeuFN7X~(C1V{QVimIRt!_K^nLd{?Z+FVyGKSrsTH=S
zmO^G(!W=mAmWJMUuA@W?X`zRCwh02hQ`r=I8g(BI4I;b@bhBT;3Qx3b>xOs^{{jT5
z1W_q$Of7_RH&kE`;2i-8e^Q`?G=+e-<dcs3H`W~qakSXir?N>$rUdyt0sS)}q~T7f
z6jwq$gmMKHK-h!4Z9!m}d>gO)isvtVKaX8FjahJUOL;DoW5^yJ5vy&d<#v|Uhesp^
z3gp@)q@a7cV!%1t*%9~J>K4H$D789m&0d%71X3*p^8i6vs?8RkVxYY}!?r3zD__-O
zC|{k*;1kU`#TRmIV@rNL_8xg6!Ov<GlxJGTWe)ux?y{*A1EIZzLN;_Pr&k1l)+VQT
zL&xzf_UJp`+fAaDg4U-f1{862iBso5G4nJ`n=e2Mq3fdhb{M0Z&^?2pR@fZYt5-N&
zyxNNHJ?sX$%xVo75kwg7XYZ$YElL526g5yu!(Mqd@|n&qvnX0Sf};z9Kuqm0wA&4J
z=riZ0b#7dvY8`~3UMPuL5G;r!fR3)I3*LP_LV}aAA`ZSEr(yN8h+%BPJ+ghgP{o8{
zf6X@bW!)WXjj7z}Wb7~xDWcHRSTjann64v=11QZ4eCvH7h4NaV7HTOl4M}=pVqQQY
z96+HBk85UOe_f#9Y5X1B7_Lk03#5=@>HRHFDddu{%(=>P*$D;nt+JdsY@mA%$FW<x
z8<jv&gLky?|1twnClo?0gG@QGS+GC|Ea<&-bcAg$p)mrFTW0sOupYIImTYcG+2W5o
zZpjJh24Scbs-c<#E6A!^w?YMJcgQl;uTUN3kaG;>tr7TGjN+P+_V$O(-0M&&W+I<x
z6<iGmtH@#C1r>1%4#^>3R|BR;mS&=>p0<&*J{zrVGQsw65GI0bcn*FgcQbu~Adm!w
z)?@3#og+bD{F&|`4E4H+1dm#;n+9)fxS7cfJxwl&gnfmAne3r!F}f8bSi!^2pj<(=
z#6wq?QPQF7!iARcl&4rNHEUuajrGfRvdX9lL%nVxv3rIsZ<M`-Q6~YC@XauElUr?r
zKhaHt+q&#mkuDY(lG8hkHrawKrdB4XMhY|CQAJa&b*^QjP+q5-Ag~F^<w+)Q>Vr~w
zbZ%g~J%c~drBEGC@`6%Bcg3MbEs!L;wi~LB(y(yI79Ce}V6zMQ;>9EsrB@cW<|K!Z
zi=}H2W0C<c8Q0~&BubSs9LY9}eP~V0CGXyHTdgpMlk_JBC==(_l!K>jkbU@rI%|45
z;npdX*9qHF4S}ieGK7I{PNutlx3e=Lb3=pWG5?@bU|NtV0MRpoLK-BL#)xt$+EBiy
z`vp(}DVcH|V@$PNFbJhm*qCYw6~ogZ#FTD74lh!0;l8EklMhrvagPdk>0$_k9`poT
zV+tSyH|A(`jB|+nbul0t>CmUAzl{<e=@eMJu)ijz;10FI)-bPt<qmtCu^gMgV7bHh
z3Mfp?NPlZ=U5LOO9I1p3G0>e2B@}jp4*alI*%P$ca@j;AGbH&vk@V9kjLq0nGGJYx
z*xweVKv5I@4U#rUp<qeByi&YNKLmn(Iz<N2`nlhxl87PPGd*{0G#1SwL~{%$VHmzc
zlp#9xlphtmIGbAHlJ)a1El3U_WgVv#svLlWRxRG1VE^Ig`B(ig+{%E!g4ZY5q==r5
z+rC=C3>h6-C@x&8VJ<R&$ejpA5X{$wg1ICT7GyyR6-0s}O40oTxkA$Z*l+nJlmzYJ
z>y~zj>w=nT(1a`vVOqVgLDeMKFhgIwn3&x)9R@f)qr7s;&XjxNrlBYt0rKRAlF`)_
zaUTa}=}N7zIn^9kLDq^_TlIeu1}TSp0x9uRT7&qQ9bV44un%7}iqsfe8qJ_>#Biq=
zaP0~*u=R^qa;vb|%8spJu5S0y+hVxz`B;wOQ_f%LCh;K@lv-hHYAM{AY`BjC%cC8%
zfO9@UA=whM&sVFmr{$!EMCA3ETBxN^uIy6^3cUgf5GTO$1ULyjcw(o;;GN_wv#DiP
z&Y+>a;jiYjVs2`sK#|x)JEpgJw+Vx#TG**|7+_K%O~O3O#D1fbMGNgcj@uw1oYb|z
zECS!DXn~b8Xd$Fa!%v)&NeJdmKTu(sop?H87H3jM2IX}^A=ENpBZOpN_Kk3L5Bx&5
zks788fem-sUR9(}9s*)HMq#(b>T?v(a`?rHAu@~lRBDB-sikmh<OmIiU#t|)Gt1eX
zvE{8frMIj0x&0EOlY$Wf8;-y2Z>Pb?WD|SA*VV%2luH}SmE+Sf>=k|vyECoiQ~K4@
zayI=%JGw>qBXhBq(XN<*n0y!+P{h=`#fN6EXUu46B3_POvNmz<6-1>@8?*PvQ$V?G
za~~!I+AcJ=Bi)D@De$#S-5OY>$emy=P>frr6ihyqe^AL$8MP4H;WQ30+jvC`w{a*{
Tk;3l<2KuKT-@bnN{g?j%hNw@>

diff --git a/js/fea/DmaCell.js b/js/fea/DmaCell.js
index e44345cd..cb00ab34 100644
--- a/js/fea/DmaCell.js
+++ b/js/fea/DmaCell.js
@@ -167,6 +167,9 @@ DMACell.prototype._initParts = function(){
     return [];//override in subclasses
 };
 
+DMACell.prototype.changePartType = function(){//override in subclasses
+};
+
 DMACell.prototype.removePart = function(index){
     this.parts[index].destroy();
     this.parts[index] = null;
diff --git a/js/fea/DmaCellOcta.js b/js/fea/DmaCellOcta.js
index fda02f81..a0a1afc1 100644
--- a/js/fea/DmaCellOcta.js
+++ b/js/fea/DmaCellOcta.js
@@ -156,7 +156,22 @@ function DMARotatedEdgeCell(indices, scale, cellMode, partType){
 DMARotatedEdgeCell.prototype = Object.create(DMACell.prototype);
 
 DMARotatedEdgeCell.prototype._initParts = function(){
-    return [new DMAEdgeVoxPart(0, this)];
+    return this.changePartType(dmaGlobals.lattice.get("partType"));
+};
+
+DMARotatedEdgeCell.prototype.changePartType = function(type){
+    var newParts = [];
+    if (type == "vox"){
+        newParts.push(new DMAEdgeVoxPart(0, this));
+    } else if (type == "voxLowPoly"){
+        newParts.push(new DMAEdgeVoxPartLowPoly(0, this));
+    } else {
+        console.warn("part type not recognized");
+        return;
+    }
+    if (!this.parts) return newParts;
+    this.destroyParts();
+    this.parts = newParts;
 };
 
 DMARotatedEdgeCell.prototype._doMeshTransformations = function(mesh){
diff --git a/js/fea/DmaPart.js b/js/fea/DmaPart.js
index 48afeb37..804b40e2 100644
--- a/js/fea/DmaPart.js
+++ b/js/fea/DmaPart.js
@@ -180,6 +180,36 @@ var partMaterial = new THREE.MeshLambertMaterial({ color:0xffffff, shading: THRE
 })();
 
 
+(function () {
+
+    var unitPartGeo;
+
+    //import part geometry
+    var loader = new THREE.STLLoader();
+    loader.load("assets/stls/parts/edgeVoxPartLowPoly.stl", function(geometry){
+
+        unitPartGeo = geometry;
+        unitPartGeo.computeBoundingBox();
+        var unitScale = 0.706/unitPartGeo.boundingBox.max.y;
+        unitPartGeo.applyMatrix(new THREE.Matrix4().makeScale(unitScale, unitScale, unitScale));
+    });
+
+    function DMAEdgeVoxPartLowPoly(type, parent){
+        DMAPart.call(this, type, parent);
+    }
+    DMAEdgeVoxPartLowPoly.prototype = Object.create(DMAPart.prototype);
+
+    DMAEdgeVoxPartLowPoly.prototype._makeMeshForType = function(){
+        var mesh = new THREE.Mesh(unitPartGeo, partMaterial);
+        mesh.myPart = this;//need a ref back to this part
+        return mesh;
+    };
+
+    self.DMAEdgeVoxPartLowPoly = DMAEdgeVoxPartLowPoly;
+
+})();
+
+
 (function () {
 
     var unitPartGeo;
-- 
GitLab