//Created by Ken on Oct 20,2016 for volume compute when upload function SignedVolumeOfTriangle(p1, p2, p3) { var v321 = p3.X*p2.Y*p1.Z; var v231 = p2.X*p3.Y*p1.Z; var v312 = p3.X*p1.Y*p2.Z; var v132 = p1.X*p3.Y*p2.Z; var v213 = p2.X*p1.Y*p3.Z; var v123 = p1.X*p2.Y*p3.Z; var singnedVolume=(1/6)*(-v321 + v231 + v312 - v132 - v213 + v123); return singnedVolume; } function VolumeOfMesh(points) { var i= 0,vols=0; var P1,P2,P3; do { P1={X:points[i],Y:points[i+1],Z:points[i+2]}; P2={X:points[i+3],Y:points[i+4],Z:points[i+5]}; P3={X:points[i+6],Y:points[i+7],Z:points[i+8]}; vols+=SignedVolumeOfTriangle(P1, P2, P3); i+=9; } while (i<points.length); return customRound(Math.abs(vols)/1000,2); } function customRound(number,fractiondigits){ with(Math){ return round(number*pow(10,fractiondigits))/pow(10,fractiondigits); } } function SuperficialAreaOfMesh(points) { var _len =points.length, _area = 0.0; if (!_len) return 0.0; var i= 0,vols=0; var va,vb,vc; do { va={X:points[i],Y:points[i+1],Z:points[i+2]}; vb={X:points[i+3],Y:points[i+4],Z:points[i+5]}; vc={X:points[i+6],Y:points[i+7],Z:points[i+8]}; var ab = {X:vb.X-va.X,Y:vb.Y-va.Y,Z:vb.Z-va.Z}; //vb.clone().sub(va); var ac = {X:vc.X-va.X,Y:vc.Y-va.Y,Z:va.Z-vc.Z}; //vc.clone().sub(va); var cross = new THREE.Vector3(); cross=crossVectors( ab, ac ); _area += Math.sqrt(Math.pow(cross.X,2)+Math.pow(cross.Y,2)+Math.pow(cross.Z,2))/2; i+=9; } while (i<points.length); return customRound(Math.abs(_area)/100,2); } function crossVectors( a, b ) { var ax = a.X, ay = a.Y, az = a.Z; var bx = b.X, by = b.Y, bz = b.Z; var P={X:ay * bz - az * by, Y:az * bx - ax * bz, Z:ax * by - ay * bx} return P; }