UNPKG

io3fix

Version:

toolkit for interior apps

876 lines (774 loc) 120 kB
'use strict'; // dependencies import getSchema from './common/get-schema.js' import getMaterial from './common/get-material.js' import updateSchema from './common/update-schema.js' import generateNormals from '../../../utils/data3d/buffer/get-normals' import cloneDeep from 'lodash/cloneDeep' export default { schema: getSchema('door'), init: function () { var this_ = this // listen to wall parent for updated geometry this.el.parentEl.addEventListener('wall-changed', this.updateFromWall) // FIXME: check for parent initially - we need to wait till it is available setTimeout(function() { this_.updateFromWall() }, 20) }, updateFromWall: function(evt) { // if we have no event yet we need to get the attributes directly if (!evt) { var wallAttributes = this.el.parentEl.getAttribute('io3d-wall') if (wallAttributes) { // let's make sure we deal with an object if (typeof wallAttributes === 'string') wallAttributes = AFRAME.utils.styleParser.parse(wallAttributes) this.wallWidth = wallAttributes.w this.wallControlLine = wallAttributes.controlLine } } else { this.wallWidth = evt.detail.w this.wallControlLine = evt.detail.controlLine } this.update() }, updateSchema: updateSchema, update: function (oldData) { var this_ = this var data = this_.data // remove old mesh this.remove() // get defaults and this.attributes = cloneDeep(data) // get meshes and materials from el3d modules var meshes = this.generateMeshes3d() // clean up empty meshes to prevent errors var meshKeys = Object.keys(meshes) meshKeys.forEach(key => { if (!meshes[key].positions || !meshes[key].positions.length) { // console.warn('no vertices for mesh', key) delete meshes[key] } }) // setup materials // defaults var materials = { frame: { colorDiffuse: [0.95, 0.95, 0.95], colorSpecular: [0.04, 0.04, 0.04], specularCoef: 30 }, leaf: 'doorLeaf-flush-white', handle: 'aluminium', threshold: 'wood_parquet_oak' } // check for adapted materials var materialKeys = Object.keys(data).filter(function(key) { return key.indexOf('material_') > -1 }) // add materials to instance materialKeys.forEach(function(key) { var mesh = key.replace('material_', '') materials[mesh] = data[key] }) // fetch materials from mat library Object.keys(materials).forEach(mat => { materials[mat] = getMaterial(materials[mat]) }) // construct data3d object var data3d = { meshes: meshes, materials: materials } // create new one this_.mesh = new THREE.Object3D() this_.data3dView = new io3d.aFrame.three.Data3dView({parent: this_.mesh}) // update view this_.data3dView.set(data3d) this_.el.setObject3D('mesh', this_.mesh) // emit event this_.el.emit('mesh-updated'); }, remove: function () { this.el.parentEl.removeEventListener('wall-changed', this.updateFromWall) if (this.data3dView) { this.data3dView.destroy() this.data3dView = null } if (this.mesh) { this.el.removeObject3D('mesh') this.mesh = null } }, generateMeshes3d: function () { var a = this.attributes var wallWidth = a.w || 0.15 var wallControlLine = 'back' // get parent wall attributes if (this.wallWidth || this.wallControlLine) { wallWidth = this.wallWidth wallControlLine = this.wallControlLine a.w = wallWidth } // definitions var wallBackPos = wallControlLine === 'front' ? -wallWidth : wallControlLine === 'center' ? -wallWidth / 2 : 0, wallFrontPos = wallWidth + wallBackPos, frameLength = a.frameLength, frameWidth = a.w, leafLength = a.l - (frameLength * 2), leafOffset = a.leafOffset, frameOffset = a.frameOffset, prevLeafs = 0, doorType = a.doorType, threshold = a.threshold, thresholdHeight = a.thresholdHeight, leaf, doorOpening = a.l - (frameLength * 2), handleHeight = 1, handleThickness = 0.018, handleLength = 0.13, handleWidth = 0.035, handleDistance = 0.06, //Dornmass handlePlateLength = 0.04, handlePlateHeight = 0.21, handlePlateWidth = 0.002, handlePlateDistance = handleDistance+handleThickness/2-handlePlateLength/ 2, leafGap = threshold && thresholdHeight ? thresholdHeight : 0.005, // internals frameFacesCount = 0, floorFacesCount = threshold ? thresholdHeight > 0 ? 6 : 2 : 0, hvPos = 0, fvPos = 0, lvPos = 0, lvUvPos = 0, xCursor = 0, zCursor, xRotate, sinAngle, cosAngle, rotationOffset, lvs, lve, hvs, hve, hvf, hvt, hvm = [], aX,aY,aZ,bY,cX,cZ,dY,eX,eZ,gX,iZ,mZ,uZ // DOOR TYPE CONFIGURATIONS // swing default if (doorType==='singleSwing') { leaf = [{ leafLength : leafLength, handle : true, angle : a.doorAngle }] } else if (doorType==='opening') { leaf = [] } else if (doorType==='doubleSwing') { leaf = [{ leafLength : leafLength/2, handle : true, angle : a.doorAngle }, { leafLength : leafLength/2, handle : true, angle : a.doorAngle, flipLeaf : true }] } else if (doorType==='swingFix') { leaf = [{ leafLength : doorOpening * (1-a.fixLeafRatio), handle : true, angle : a.doorAngle }, { leafLength : doorOpening * a.fixLeafRatio, handle : false, angle : 0 }] if (a.hinge==='left') leaf.reverse() } else if (doorType==='swingDoubleFix') { leaf = [{ leafLength : doorOpening * a.fixLeafRatio/2, handle : false, angle : 0 }, { leafLength : doorOpening * (1-a.fixLeafRatio), handle : true, angle : a.doorAngle }, { leafLength : doorOpening * a.fixLeafRatio/2, handle : false, angle : 0 }] if (a.hinge==='left') leaf.reverse() } else if (doorType==='doubleSwingDoubleFix') { leaf = [{ leafLength : doorOpening * a.fixLeafRatio/2, handle : false, angle : 0 }, { leafLength : doorOpening * ((1-a.fixLeafRatio)/2), handle : true, angle : a.doorAngle }, { leafLength : doorOpening * ((1-a.fixLeafRatio)/2), handle : true, angle : a.doorAngle, flipLeaf : true }, { leafLength : doorOpening * a.fixLeafRatio/2, handle : false, angle : 0 }] } else if (doorType==='slidingDoor') { leaf = [{ leafLength : leafLength* (1-a.doorAngle/180), handle : false, angle : 0 }] leafOffset = -0.1 if (a.hinge==='left') xCursor = doorOpening - leafLength* (1-a.doorAngle/180) } else { // Fallback old doors a.doorType = 'singleSwing' leaf = [{ leafLength : leafLength, handle : true, angle : a.doorAngle }] } // FIXME Workaround for older Doors - remove Feb '16 if (leafOffset>0.005) leafOffset = 0.005 // Set Face Count if (frameLength>0) { frameFacesCount += 18 if (frameOffset>0) frameFacesCount += 12 } var leafVertices = [], //new Float32Array(leafFacesCount * 9), handleVertices = [], //new Float32Array(handleFacesCount * 9), leafUvs = [], //new Float32Array(leafFacesCount * 6), frameVertices = new Float32Array(frameFacesCount * 9) // Threshold VERTICES // // E------G // /| /| // A------C | // | F----|-H // |/ |/ // B------D var floorVertices = new Float32Array(floorFacesCount * 9), floorUvs = new Float32Array(floorFacesCount * 6), wvPos = 0, fvUvPos = 0 aX = frameLength aY = thresholdHeight aZ = wallFrontPos bY = 0 cX = a.l - frameLength eZ = wallBackPos if (threshold) { // Top //E floorVertices[wvPos] = floorVertices[wvPos + 9] = aX floorVertices[wvPos + 1] = floorVertices[wvPos + 10] = aY floorVertices[wvPos + 2] = floorVertices[wvPos + 11] = eZ //A floorVertices[wvPos + 3] = aX floorVertices[wvPos + 4] = aY floorVertices[wvPos + 5] = aZ //C floorVertices[wvPos + 6] = floorVertices[wvPos + 12] = cX floorVertices[wvPos + 7] = floorVertices[wvPos + 13] = aY floorVertices[wvPos + 8] = floorVertices[wvPos + 14] = aZ //G floorVertices[wvPos + 15] = cX floorVertices[wvPos + 16] = aY floorVertices[wvPos + 17] = eZ floorUvs [fvUvPos] = floorUvs [fvUvPos + 2] = floorUvs [fvUvPos + 6] = 1 - cX floorUvs [fvUvPos + 1] = floorUvs [fvUvPos + 7] = floorUvs [fvUvPos + 11] = aZ floorUvs [fvUvPos + 3] = floorUvs [fvUvPos + 5] = floorUvs [fvUvPos + 9] = 0 floorUvs [fvUvPos + 4] = floorUvs [fvUvPos + 8] = floorUvs [fvUvPos + 10] = 1 wvPos += 18 fvUvPos += 12 if (thresholdHeight > 0) { // Front //A floorVertices[wvPos] = floorVertices[wvPos + 9] = aX floorVertices[wvPos + 1] = floorVertices[wvPos + 10] = aY floorVertices[wvPos + 2] = floorVertices[wvPos + 11] = aZ //B floorVertices[wvPos + 3] = aX floorVertices[wvPos + 4] = bY floorVertices[wvPos + 5] = aZ //D floorVertices[wvPos + 6] = floorVertices[wvPos + 12] = cX floorVertices[wvPos + 7] = floorVertices[wvPos + 13] = bY floorVertices[wvPos + 8] = floorVertices[wvPos + 14] = aZ //C floorVertices[wvPos + 15] = cX floorVertices[wvPos + 16] = aY floorVertices[wvPos + 17] = aZ floorUvs [fvUvPos] = floorUvs [fvUvPos + 2] = floorUvs [fvUvPos + 6] = 1 - cX floorUvs [fvUvPos + 1] = floorUvs [fvUvPos + 7] = floorUvs [fvUvPos + 11] = thresholdHeight floorUvs [fvUvPos + 3] = floorUvs [fvUvPos + 5] = floorUvs [fvUvPos + 9] = 0 floorUvs [fvUvPos + 4] = floorUvs [fvUvPos + 8] = floorUvs [fvUvPos + 10] = 1 wvPos += 18 fvUvPos += 12 // Back //G floorVertices[wvPos] = floorVertices[wvPos + 9] = cX floorVertices[wvPos + 1] = floorVertices[wvPos + 10] = aY floorVertices[wvPos + 2] = floorVertices[wvPos + 11] = eZ //H floorVertices[wvPos + 3] = cX floorVertices[wvPos + 4] = bY floorVertices[wvPos + 5] = eZ //F floorVertices[wvPos + 6] = floorVertices[wvPos + 12] = aX floorVertices[wvPos + 7] = floorVertices[wvPos + 13] = bY floorVertices[wvPos + 8] = floorVertices[wvPos + 14] = eZ //E floorVertices[wvPos + 15] = aX floorVertices[wvPos + 16] = aY floorVertices[wvPos + 17] = eZ floorUvs [fvUvPos] = floorUvs [fvUvPos + 2] = floorUvs [fvUvPos + 6] = 1 - cX floorUvs [fvUvPos + 1] = floorUvs [fvUvPos + 7] = floorUvs [fvUvPos + 11] = thresholdHeight floorUvs [fvUvPos + 3] = floorUvs [fvUvPos + 5] = floorUvs [fvUvPos + 9] = 0 floorUvs [fvUvPos + 4] = floorUvs [fvUvPos + 8] = floorUvs [fvUvPos + 10] = 1 } } // DOOR FRAME CREATION if (frameLength>0) { // DOOR FRAME FRONT // A/I-------H/L // | D---E | // | | | | // | | | | // B/J-C F-G/K // DOOR FRAME BACK // M/U-------T/X // | P---Q | // | | | | // | | | | // N/V-O R-S/W aX = 0 aY = a.h aZ = wallFrontPos + frameOffset bY = 0 cX = frameLength dY = a.h - frameLength eX = a.l - frameLength gX = a.l iZ = wallFrontPos mZ = wallBackPos - frameOffset uZ = wallBackPos // DOOR FRAME FRONT FACES // A frameVertices[fvPos] = frameVertices[fvPos + 9] = aX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = aY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = aZ // B frameVertices[fvPos + 3] = aX frameVertices[fvPos + 4] = bY frameVertices[fvPos + 5] = aZ // C frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = cX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = bY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = aZ // D frameVertices[fvPos + 15] = cX frameVertices[fvPos + 16] = dY frameVertices[fvPos + 17] = aZ fvPos += 18 // A frameVertices[fvPos] = frameVertices[fvPos + 9] = aX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = aY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = aZ // D frameVertices[fvPos + 3] = cX frameVertices[fvPos + 4] = dY frameVertices[fvPos + 5] = aZ // E frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = eX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = dY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = aZ // H frameVertices[fvPos + 15] = gX frameVertices[fvPos + 16] = aY frameVertices[fvPos + 17] = aZ fvPos += 18 // E frameVertices[fvPos] = frameVertices[fvPos + 9] = eX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = dY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = aZ // F frameVertices[fvPos + 3] = eX frameVertices[fvPos + 4] = bY frameVertices[fvPos + 5] = aZ // G frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = gX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = bY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = aZ // H frameVertices[fvPos + 15] = gX frameVertices[fvPos + 16] = aY frameVertices[fvPos + 17] = aZ fvPos += 18 // DOOR FRAME BACK FACES // M frameVertices[fvPos] = frameVertices[fvPos + 9] = gX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = aY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = mZ // N frameVertices[fvPos + 3] = gX frameVertices[fvPos + 4] = bY frameVertices[fvPos + 5] = mZ // O frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = eX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = bY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = mZ // P frameVertices[fvPos + 15] = eX frameVertices[fvPos + 16] = dY frameVertices[fvPos + 17] = mZ fvPos += 18 // M frameVertices[fvPos] = frameVertices[fvPos + 9] = gX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = aY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = mZ // P frameVertices[fvPos + 3] = eX frameVertices[fvPos + 4] = dY frameVertices[fvPos + 5] = mZ // Q frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = cX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = dY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = mZ // T frameVertices[fvPos + 15] = aX frameVertices[fvPos + 16] = aY frameVertices[fvPos + 17] = mZ fvPos += 18 // Q frameVertices[fvPos] = frameVertices[fvPos + 9] = cX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = dY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = mZ // R frameVertices[fvPos + 3] = cX frameVertices[fvPos + 4] = bY frameVertices[fvPos + 5] = mZ // S frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = aX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = bY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = mZ // T frameVertices[fvPos + 15] = aX frameVertices[fvPos + 16] = aY frameVertices[fvPos + 17] = mZ fvPos += 18 // FRAME INSIDE // D frameVertices[fvPos] = frameVertices[fvPos + 9] = cX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = dY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = aZ // C frameVertices[fvPos + 3] = cX frameVertices[fvPos + 4] = bY frameVertices[fvPos + 5] = aZ // R frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = cX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = bY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = mZ // Q frameVertices[fvPos + 15] = cX frameVertices[fvPos + 16] = dY frameVertices[fvPos + 17] = mZ fvPos += 18 // D frameVertices[fvPos] = frameVertices[fvPos + 9] = cX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = dY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = aZ // Q frameVertices[fvPos + 3] = cX frameVertices[fvPos + 4] = dY frameVertices[fvPos + 5] = mZ // P frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = eX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = dY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = mZ // E frameVertices[fvPos + 15] = eX frameVertices[fvPos + 16] = dY frameVertices[fvPos + 17] = aZ fvPos += 18 // Q frameVertices[fvPos] = frameVertices[fvPos + 9] = eX frameVertices[fvPos + 1] = frameVertices[fvPos + 10] = dY frameVertices[fvPos + 2] = frameVertices[fvPos + 11] = mZ // R frameVertices[fvPos + 3] = eX frameVertices[fvPos + 4] = bY frameVertices[fvPos + 5] = mZ // F frameVertices[fvPos + 6] = frameVertices[fvPos + 12] = eX frameVertices[fvPos + 7] = frameVertices[fvPos + 13] = bY frameVertices[fvPos + 8] = frameVertices[fvPos + 14] = aZ // E frameVertices[fvPos + 15] = eX frameVertices[fvPos + 16] = dY frameVertices[fvPos + 17] = aZ fvPos += 18 // FRAME OFFSET SIDE FACES if (frameOffset>0) { // FRONT // I frameVertices[ fvPos ] = frameVertices[ fvPos + 9 ] = aX frameVertices[ fvPos + 1 ] = frameVertices[ fvPos + 10 ] = aY frameVertices[ fvPos + 2 ] = frameVertices[ fvPos + 11 ] = iZ // J frameVertices[ fvPos + 3 ] = aX frameVertices[ fvPos + 4 ] = bY frameVertices[ fvPos + 5 ] = iZ // B frameVertices[ fvPos + 6 ] = frameVertices[ fvPos + 12 ] = aX frameVertices[ fvPos + 7 ] = frameVertices[ fvPos + 13 ] = bY frameVertices[ fvPos + 8 ] = frameVertices[ fvPos + 14 ] = aZ // A frameVertices[ fvPos + 15 ] = aX frameVertices[ fvPos + 16 ] = aY frameVertices[ fvPos + 17 ] = aZ fvPos += 18 // I frameVertices[ fvPos ] = frameVertices[ fvPos + 9 ] = aX frameVertices[ fvPos + 1 ] = frameVertices[ fvPos + 10 ] = aY frameVertices[ fvPos + 2 ] = frameVertices[ fvPos + 11 ] = iZ // A frameVertices[ fvPos + 3 ] = aX frameVertices[ fvPos + 4 ] = aY frameVertices[ fvPos + 5 ] = aZ // H frameVertices[ fvPos + 6 ] = frameVertices[ fvPos + 12 ] = gX frameVertices[ fvPos + 7 ] = frameVertices[ fvPos + 13 ] = aY frameVertices[ fvPos + 8 ] = frameVertices[ fvPos + 14 ] = aZ // L frameVertices[ fvPos + 15 ] = gX frameVertices[ fvPos + 16 ] = aY frameVertices[ fvPos + 17 ] = iZ fvPos += 18 // H frameVertices[ fvPos ] = frameVertices[ fvPos + 9 ] = gX frameVertices[ fvPos + 1 ] = frameVertices[ fvPos + 10 ] = aY frameVertices[ fvPos + 2 ] = frameVertices[ fvPos + 11 ] = aZ // G frameVertices[ fvPos + 3 ] = gX frameVertices[ fvPos + 4 ] = bY frameVertices[ fvPos + 5 ] = aZ // K frameVertices[ fvPos + 6 ] = frameVertices[ fvPos + 12 ] = gX frameVertices[ fvPos + 7 ] = frameVertices[ fvPos + 13 ] = bY frameVertices[ fvPos + 8 ] = frameVertices[ fvPos + 14 ] = iZ // L frameVertices[ fvPos + 15 ] = gX frameVertices[ fvPos + 16 ] = aY frameVertices[ fvPos + 17 ] = iZ fvPos += 18 // BACK // U frameVertices[ fvPos ] = frameVertices[ fvPos + 9 ] = gX frameVertices[ fvPos + 1 ] = frameVertices[ fvPos + 10 ] = aY frameVertices[ fvPos + 2 ] = frameVertices[ fvPos + 11 ] = uZ // V frameVertices[ fvPos + 3 ] = gX frameVertices[ fvPos + 4 ] = bY frameVertices[ fvPos + 5 ] = uZ // N frameVertices[ fvPos + 6 ] = frameVertices[ fvPos + 12 ] = gX frameVertices[ fvPos + 7 ] = frameVertices[ fvPos + 13 ] = bY frameVertices[ fvPos + 8 ] = frameVertices[ fvPos + 14 ] = mZ // M frameVertices[ fvPos + 15 ] = gX frameVertices[ fvPos + 16 ] = aY frameVertices[ fvPos + 17 ] = mZ fvPos += 18 // U frameVertices[ fvPos ] = frameVertices[ fvPos + 9 ] = gX frameVertices[ fvPos + 1 ] = frameVertices[ fvPos + 10 ] = aY frameVertices[ fvPos + 2 ] = frameVertices[ fvPos + 11 ] = uZ // M frameVertices[ fvPos + 3 ] = gX frameVertices[ fvPos + 4 ] = aY frameVertices[ fvPos + 5 ] = mZ // T frameVertices[ fvPos + 6 ] = frameVertices[ fvPos + 12 ] = aX frameVertices[ fvPos + 7 ] = frameVertices[ fvPos + 13 ] = aY frameVertices[ fvPos + 8 ] = frameVertices[ fvPos + 14 ] = mZ // X frameVertices[ fvPos + 15 ] = aX frameVertices[ fvPos + 16 ] = aY frameVertices[ fvPos + 17 ] = uZ fvPos += 18 // T frameVertices[ fvPos ] = frameVertices[ fvPos + 9 ] = aX frameVertices[ fvPos + 1 ] = frameVertices[ fvPos + 10 ] = aY frameVertices[ fvPos + 2 ] = frameVertices[ fvPos + 11 ] = mZ // S frameVertices[ fvPos + 3 ] = aX frameVertices[ fvPos + 4 ] = bY frameVertices[ fvPos + 5 ] = mZ // W frameVertices[ fvPos + 6 ] = frameVertices[ fvPos + 12 ] = aX frameVertices[ fvPos + 7 ] = frameVertices[ fvPos + 13 ] = bY frameVertices[ fvPos + 8 ] = frameVertices[ fvPos + 14 ] = uZ // X frameVertices[ fvPos + 15 ] = aX frameVertices[ fvPos + 16 ] = aY frameVertices[ fvPos + 17 ] = uZ } } // LEAF + HANDLE CREATION depending on Door Type for (var c = 0;c<leaf.length;c++){ // set start position in leaf vertex array for current door leaf lvs = leafVertices.length // set Leaf Length leafLength = leaf[c].leafLength prevLeafs = 0 if ( c>1) prevLeafs = leaf[c-1].leafLength+leaf[c-2].leafLength else if (c>0) prevLeafs = leaf[c-1].leafLength // Vertex Front View // A/H____D/E // | | // | | // B/G____C/F aX = xCursor + frameLength// + leafGap aY = a.h - frameLength aZ = wallBackPos + a.leafWidth - leafOffset - frameOffset bY = leafGap cX = xCursor + frameLength + leafLength//-leafGap eZ = wallBackPos-leafOffset-frameOffset // door leaf front ABCD leafVertices[lvPos] = leafVertices[lvPos + 3] = leafVertices[lvPos + 9] = aX leafVertices[lvPos + 1] = leafVertices[lvPos + 10] = leafVertices[lvPos + 16] = aY leafVertices[lvPos + 2] = leafVertices[lvPos + 5] = leafVertices[lvPos + 11] = aZ leafVertices[lvPos + 4] = leafVertices[lvPos + 7] = leafVertices[lvPos + 13] = bY leafVertices[lvPos + 6] = leafVertices[lvPos + 12] = leafVertices[lvPos + 15] = cX leafVertices[lvPos + 8] = leafVertices[lvPos + 14] = leafVertices[lvPos + 17] = aZ // UV Mapping depending on Door Configuration if (a.hinge==='left') leafUvs [lvUvPos] = leafUvs [lvUvPos + 2] = leafUvs [lvUvPos + 6] = xCursor/doorOpening else leafUvs [lvUvPos] = leafUvs [lvUvPos + 2] = leafUvs [lvUvPos + 6] = -xCursor/doorOpening leafUvs [lvUvPos + 1] = leafUvs [lvUvPos + 7] = leafUvs [lvUvPos + 11] = 1 leafUvs [lvUvPos + 3] = leafUvs [lvUvPos + 5] = leafUvs [lvUvPos + 9] = 0 if (a.hinge==='left')leafUvs [lvUvPos + 4] = leafUvs [lvUvPos + 8] = leafUvs [lvUvPos + 10] = (xCursor+leafLength)/doorOpening else leafUvs [lvUvPos + 4] = leafUvs [lvUvPos + 8] = leafUvs [lvUvPos + 10] = -(xCursor+leafLength)/doorOpening lvPos += 18 lvUvPos += 12 // door leaf back EFGH leafVertices[lvPos] = leafVertices[lvPos + 3] = leafVertices[lvPos + 9] = cX leafVertices[lvPos + 1] = leafVertices[lvPos + 10] = leafVertices[lvPos + 16] = aY leafVertices[lvPos + 2] = leafVertices[lvPos + 5] = leafVertices[lvPos + 11] = eZ leafVertices[lvPos + 4] = leafVertices[lvPos + 7] = leafVertices[lvPos + 13] = bY leafVertices[lvPos + 6] = leafVertices[lvPos + 12] = leafVertices[lvPos + 15] = aX leafVertices[lvPos + 8] = leafVertices[lvPos + 14] = leafVertices[lvPos + 17] = eZ // UV Mapping depending on Door Configuration if (a.hinge==='right') leafUvs [lvUvPos] = leafUvs [lvUvPos + 2] = leafUvs [lvUvPos + 6] = -xCursor/doorOpening else leafUvs [lvUvPos] = leafUvs [lvUvPos + 2] = leafUvs [lvUvPos + 6] = xCursor/doorOpening leafUvs [lvUvPos + 1] = leafUvs [lvUvPos + 7] = leafUvs [lvUvPos + 11] = 1 leafUvs [lvUvPos + 3] = leafUvs [lvUvPos + 5] = leafUvs [lvUvPos + 9] = 0 if (a.hinge==='right') leafUvs [lvUvPos + 4] = leafUvs [lvUvPos + 8] = leafUvs [lvUvPos + 10] = -(xCursor+leafLength)/doorOpening else leafUvs [lvUvPos + 4] = leafUvs [lvUvPos + 8] = leafUvs [lvUvPos + 10] = (xCursor+leafLength)/doorOpening lvPos += 18 lvUvPos += 12 // door leaf extrusion top HADE // H leafVertices[ lvPos ] = leafVertices[ lvPos + 9 ] = aX leafVertices[ lvPos + 1 ] = leafVertices[ lvPos + 10 ] = aY leafVertices[ lvPos + 2 ] = leafVertices[ lvPos + 11 ] = eZ // A leafVertices[ lvPos + 3 ] = aX leafVertices[ lvPos + 4 ] = aY leafVertices[ lvPos + 5 ] = aZ // D leafVertices[ lvPos + 6 ] = leafVertices[ lvPos + 12 ] = cX leafVertices[ lvPos + 7 ] = leafVertices[ lvPos + 13 ] = aY leafVertices[ lvPos + 8 ] = leafVertices[ lvPos + 14 ] = aZ // E leafVertices[ lvPos + 15 ] = cX leafVertices[ lvPos + 16 ] = aY leafVertices[ lvPos + 17 ] = eZ leafUvs [lvUvPos] = leafUvs [lvUvPos + 2] = leafUvs [lvUvPos + 6] = 0 leafUvs [lvUvPos + 1] = leafUvs [lvUvPos + 7] = leafUvs [lvUvPos + 11] = 1 leafUvs [lvUvPos + 3] = leafUvs [lvUvPos + 5] = leafUvs [lvUvPos + 9] = 0 leafUvs [lvUvPos + 4] = leafUvs [lvUvPos + 8] = leafUvs [lvUvPos + 10] = 0.05 lvPos += 18 lvUvPos += 12 // door leaf extrusion outer side DCFE // D leafVertices[ lvPos ] = leafVertices[ lvPos + 9 ] = cX leafVertices[ lvPos + 1 ] = leafVertices[ lvPos + 10 ] = aY leafVertices[ lvPos + 2 ] = leafVertices[ lvPos + 11 ] = aZ // C leafVertices[ lvPos + 3 ] = cX leafVertices[ lvPos + 4 ] = bY leafVertices[ lvPos + 5 ] = aZ // F leafVertices[ lvPos + 6 ] = leafVertices[ lvPos + 12 ] = cX leafVertices[ lvPos + 7 ] = leafVertices[ lvPos + 13 ] = bY leafVertices[ lvPos + 8 ] = leafVertices[ lvPos + 14 ] = eZ // E leafVertices[ lvPos + 15 ] = cX leafVertices[ lvPos + 16 ] = aY leafVertices[ lvPos + 17 ] = eZ leafUvs [lvUvPos] = leafUvs [lvUvPos + 2] = leafUvs [lvUvPos + 6] = 0 leafUvs [lvUvPos + 1] = leafUvs [lvUvPos + 7] = leafUvs [lvUvPos + 11] = 1 leafUvs [lvUvPos + 3] = leafUvs [lvUvPos + 5] = leafUvs [lvUvPos + 9] = 0 leafUvs [lvUvPos + 4] = leafUvs [lvUvPos + 8] = leafUvs [lvUvPos + 10] = 0.05 lvPos += 18 lvUvPos += 12 // door leaf extrusion inner side HGBA // H leafVertices[ lvPos ] = leafVertices[ lvPos + 9 ] = aX leafVertices[ lvPos + 1 ] = leafVertices[ lvPos + 10 ] = aY leafVertices[ lvPos + 2 ] = leafVertices[ lvPos + 11 ] = eZ // G leafVertices[ lvPos + 3 ] = aX leafVertices[ lvPos + 4 ] = bY leafVertices[ lvPos + 5 ] = eZ // B leafVertices[ lvPos + 6 ] = leafVertices[ lvPos + 12 ] = aX leafVertices[ lvPos + 7 ] = leafVertices[ lvPos + 13 ] = bY leafVertices[ lvPos + 8 ] = leafVertices[ lvPos + 14 ] = aZ // A leafVertices[ lvPos + 15 ] = aX leafVertices[ lvPos + 16 ] = aY leafVertices[ lvPos + 17 ] = aZ leafUvs [lvUvPos] = leafUvs [lvUvPos + 2] = leafUvs [lvUvPos + 6] = 0 leafUvs [lvUvPos + 1] = leafUvs [lvUvPos + 7] = leafUvs [lvUvPos + 11] = 1 leafUvs [lvUvPos + 3] = leafUvs [lvUvPos + 5] = leafUvs [lvUvPos + 9] = 0 leafUvs [lvUvPos + 4] = leafUvs [lvUvPos + 8] = leafUvs [lvUvPos + 10] = 0.05 lvPos += 18 lvUvPos += 12 // set end position in leaf vertex array for current door leaf lve = leafVertices.length if (leaf[c].handle){ // DOOR HANDLE // // Top View: // // I/J__K/L // | | // E/F______G/H | // | | // A/B___________C/D // Size Definitions zCursor = wallBackPos-leafOffset-frameOffset aX = xCursor + frameLength + leafLength-handleDistance-handleLength aY = handleHeight aZ = zCursor+a.leafWidth+handleWidth+handleThickness*0.6 bY = handleHeight-handleThickness cX = xCursor + frameLength + leafLength-handleDistance cZ = zCursor+a.leafWidth+handleWidth+handleThickness eZ = zCursor+a.leafWidth+handleWidth gX = xCursor + frameLength + leafLength-handleDistance-handleThickness iZ = zCursor+a.leafWidth var l // set start position in handle vertex array for current door leaf hvs = handleVertices.length if (a.handleType==='knob') { handleVertices = handleVertices.concat([0.025203,-0.091811,-1.094472e-08,0.025203,-0.091811,0.007999989,0.0265,-0.1,0.007999988,0.0025,-0.099188,0.007999988,0.0025,-0.1,0.007999988,0.0265,-0.1,0.007999988,0.025203,-0.091811,-1.094472e-08,0.021439,-0.084424,-1.006412e-08,0.021439,-0.084424,0.00799999,0.015576,-0.078561,-9.365201e-09,0.015576,-0.078561,0.007999991,0.021439,-0.084424,0.00799999,0.008189,-0.074797,-8.916497e-09,0.008189,-0.074797,0.007999991,0.015576,-0.078561,0.007999991,0,-0.0735,0.007999992,0.008189,-0.074797,0.007999991,0.008189,-0.074797,-8.916497e-09,0.0025,-0.0875,0.00799999,0.0025,-0.092306,0.007999989,0.008189,-0.074797,0.007999991,-0.008189,-0.074797,-8.916497e-09,-0.008189,-0.074797,0.007999991,0,-0.0735,0.007999992,-0.015576,-0.078561,0.007999991,-0.008189,-0.074797,0.007999991,-0.008189,-0.074797,-8.916497e-09,-0.021439,-0.084424,0.00799999,-0.015576,-0.078561,0.007999991,-0.015576,-0.078561,-9.365201e-09,-0.025203,-0.091811,0.007999989,-0.021439,-0.084424,0.00799999,-0.021439,-0.084424,-1.006412e-08,-0.0025,-0.098184,0.007999988,-0.021439,-0.084424,0.00799999,-0.025203,-0.091811,0.007999989,-0.0265,-0.1,0.007999988,-0.025203,-0.091811,0.007999989,-0.025203,-0.091811,-1.094472e-08,-0.025203,-0.108189,0.007999987,-0.0265,-0.1,0.007999988,-0.0265,-0.1,-1.192093e-08,-0.021439,-0.115576,0.007999986,-0.025203,-0.108189,0.007999987,-0.025203,-0.108189,-1.289713e-08,-0.0025,-0.101816,0.007999988,-0.0025,-0.100812,0.007999988,-0.025203,-0.108189,0.007999987,-0.015576,-0.121439,0.007999985,-0.021439,-0.115576,0.007999986,-0.021439,-0.115576,-1.377773e-08,-0.008189,-0.125203,0.007999985,-0.015576,-0.121439,0.007999985,-0.015576,-0.121439,-1.447666e-08,0,-0.1265,0.007999985,-0.008189,-0.125203,0.007999985,-0.008189,-0.125203,-1.492536e-08,0.008189,-0.125203,0.007999985,0,-0.1265,0.007999985,0,-0.1265,-1.507997e-08,0.0025,-0.1125,0.007999987,0,-0.1125,0.007999987,0,-0.1265,0.007999985,0.008189,-0.125203,0.007999985,0.0025,-0.107694,0.007999987,0.0025,-0.1125,0.007999987,0.015576,-0.121439,0.007999985,0.008189,-0.125203,0.007999985,0.008189,-0.125203,-1.492536e-08,0.0025,-0.107694,0.007999987,0.008189,-0.125203,0.007999985,0.015576,-0.121439,0.007999985,0.021439,-0.115576,0.007999986,0.015576,-0.121439,0.007999985,0.015576,-0.121439,-1.447666e-08,0.025203,-0.108189,0.007999987,0.021439,-0.115576,0.007999986,0.021439,-0.115576,-1.377773e-08,0.0265,-0.1,0.007999988,0.025203,-0.108189,0.007999987,0.025203,-0.108189,-1.289713e-08,-0.021439,-0.115576,0.007999986,-0.015576,-0.121439,0.007999985,-0.0025,-0.103441,0.007999988,0.0025,-0.098184,0.007999988,0.0025,-0.099188,0.007999988,0.025203,-0.091811,0.007999989,-0.0025,-0.100812,0.007999988,-0.0025,-0.1,0.007999988,-0.0265,-0.1,0.007999988,-0.008189,-0.074797,0.007999991,-0.0025,-0.092306,0.007999989,-0.0025,-0.0875,0.00799999,-0.015576,-0.121439,0.007999985,-0.008189,-0.125203,0.007999985,-0.0025,-0.107694,0.007999987,-0.0025,-0.096559,0.007999989,-0.015576,-0.078561,0.007999991,-0.021439,-0.084424,0.00799999,-0.0265,-0.1,0.007999988,-0.0025,-0.1,0.007999988,-0.0025,-0.099188,0.007999988,-0.0025,-0.0875,0.00799999,0,-0.0875,0.00799999,0,-0.0735,0.007999992,-0.0025,-0.092306,0.007999989,-0.008189,-0.074797,0.007999991,-0.015576,-0.078561,0.007999991,-0.0025,-0.1125,0.0008419866,0.0025,-0.1125,0.0008419866,0.0025,-0.0875,0.0008419896,0,-0.1125,0.007999987,0.0025,-0.1125,0.007999987,0.0025,-0.1125,0.0008419866,0.0025,-0.101816,0.007999988,0.021439,-0.115576,0.007999986,0.025203,-0.108189,0.007999987,-0.0025,-0.1125,0.007999987,-0.0025,-0.107694,0.007999987,-0.008189,-0.125203,0.007999985,0.0025,-0.1,0.007999988,0.0025,-0.1125,0.0008419866,0.0025,-0.100812,0.007999988,-0.0025,-0.0875,0.0008419896,-0.0025,-0.098184,0.007999988,-0.0025,-0.099188,0.007999988,0.0265,-0.1,0.007999988,0.0025,-0.1,0.007999988,0.0025,-0.100812,0.007999988,0,-0.0875,0.00799999,-0.0025,-0.0875,0.00799999,-0.0025,-0.0875,0.0008419896,0,-0.1265,0.007999985,0,-0.1125,0.007999987,-0.0025,-0.1125,0.007999987,0.0025,-0.103441,0.007999988,0.015576,-0.121439,0.007999985,0.021439,-0.115576,0.007999986,0,-0.0735,0.007999992,0,-0.0875,0.00799999,0.0025,-0.0875,0.00799999,0.021439,-0.084424,0.00799999,0.015576,-0.078561,0.007999991,0.0025,-0.096559,0.007999989,0.015576,-0.078561,0.007999991,0.008189,-0.074797,0.007999991,0.0025,-0.092306,0.007999989,-0.010141,0.024483,0.033,0,0.0265,0.033,0,0.009999997,0.033,0.0265,-4.53789e-09,0.049,0.024483,-0.010141,0.049,0.024483,-0.010141,0.033,-0.010141,-0.024483,0.033,-0.018738,-0.018738,0.033,-0.007071,-0.007071002,0.033,0,-0.0265,0.033,0,-0.0265,0.049,-0.010141,-0.024483,0.049,-0.007071,-0.007071002,0.033,-0.018738,-0.018738,0.033,-0.024483,-0.010141,0.033,-0.024483,-0.010141,0.033,-0.0265,-2.630541e-09,0.033,-0.01,-2.630541e-09,0.033,0.010141,0.024483,0.033,0.018738,0.018738,0.033,0.007071,0.007070998,0.033,0,0.009999997,0.033,0,0.0265,0.033,0.010141,0.024483,0.033,0.018738,0.018738,0.04900001,0,-4.53789e-09,0.049,0.024483,0.010141,0.049,0.010141,0.024483,0.04900001,0,-4.53789e-09,0.049,0.018738,0.018738,0.04900001,0.024483,-0.010141,0.033,0.024483,-0.010141,0.049,0.018738,-0.018738,0.049,-0.024483,0.010141,0.049,-0.018738,0.018738,0.04900001,-0.018738,0.018738,0.033,-0.0265,-2.630541e-09,0.033,-0.0265,-4.53789e-09,0.049,-0.024483,0.010141,0.049,0.024483,-0.010141,0.033,0.018738,-0.018738,0.033,0.007071,-0.007071002,0.033,-0.018738,-0.018738,0.049,0,-4.53789e-09,0.049,-0.024483,-0.010141,0.049,-0.010141,-0.024483,0.049,0,-4.53789e-09,0.049,-0.018738,-0.018738,0.049,0,-0.01,0.033,0,-0.0265,0.033,-0.010141,-0.024483,0.033,0,-0.0265,0.049,0,-4.53789e-09,0.049,-0.010141,-0.024483,0.049,0.0265,-4.53789e-09,0.049,0,-4.53789e-09,0.049,0.024483,-0.010141,0.049,-0.024483,0.010141,0.033,-0.007071,0.007070998,0.033,-0.01,-2.630541e-09,0.033,0.010141,-0.024483,0.049,0,-0.0265,0.049,0,-0.0265,0.033,-0.024483,0.010141,0.033,-0.018738,0.018738,0.033,-0.007071,0.007070998,0.033,-0.010141,0.024483,0.033,0,0.009999997,0.033,-0.007071,0.007070998,0.033,0.010141,-0.024483,0.049,0,-4.53789e-09,0.049,0,-0.0265,0.049,0.024483,0.010141,0.049,0.0265,-4.53789e-09,0.049,0.0265,-2.630541e-09,0.033,0.024483,0.010141,0.049,0,-4.53789e-09,0.049,0.0265,-4.53789e-09,0.049,0.018738,-0.018738,0.049,0.010141,-0.024483,0.049,0.010141,-0.024483,0.033,0.018738,0.018738,0.033,0.018738,0.018738,0.04900001,0.024483,0.010141,0.049,0.018738,-0.018738,0.049,0,-4.53789e-09,0.049,0.010141,-0.024483,0.049,0.010141,0.024483,0.04900001,0.018738,0.018738,0.04900001,0.018738,0.018738,0.033,0,0.0265,0.04900001,0.010141,0.024483,0.04900001,0.010141,0.024483,0.033,0,0.0265,0.04900001,0,-4.53789e-09,0.049,0.010141,0.024483,0.04900001,0.024483,-0.010141,0.049,0,-4.53789e-09,0.049,0.018738,-0.018738,0.049,-0.010141,0.024483,0.04900001,0,0.0265,0.04900001,0,0.0265,0.033,-0.010141,0.024483,0.04900001,0,-4.53789e-09,0.049,0,0.0265,0.04900001,0.007071,0.007070998,0.033,0.018738,0.018738,0.033,0.024483,0.010141,0.033,-0.010141,0.024483,0.033,-0.018738,0.018738,0.033,-0.018738,0.018738,0.04900001,-0.018738,0.018738,0.04900001,0,-4.53789e-09,0.049,-0.010141,0.024483,0.04900001,0.024483,0.010141,0.033,0.0265,-2.630541e-09,0.033,0.01,-2.630541e-09,0.033,-0.024483,0.010141,0.049,0,-4.53789e-09,0.049,-0.018738,0.018738,0.04900001,0.01,-2.630541e-09,0.033,0.0265,-2.630541e-09,0.033,0.024483,-0.010141,0.033,-0.0265,-4.53789e-09,0.049,0,-4.53789e-09,0.049,-0.024483,0.010141,0.049,-0.024483,-0.010141,0.033,-0.024483,-0.010141,0.049,-0.0265,-4.53789e-09,0.049,-0.024483,-0.010141,0.049,0,-4.53789e-09,0.049,-0.0265,-4.53789e-09,0.049,0.007071,-0.007071002,0.033,0.018738,-0.018738,0.033,0.010141,-0.024483,0.033,-0.018738,-0.018738,0.049,-0.024483,-0.010141,0.049,-0.024483,-0.010141,0.033,0.010141,-0.024483,0.033,0,-0.0265,0.033,0,-0.01,0.033,-0.010141,-0.024483,0.049,-0.018738,-0.018738,0.049,-0.018738,-0.018738,0.033,0.025203,0.008188999,0.008000001,0.0265,-9.536744e-10,0.008,0.0265,0,0,0.021439,0.015576,0.008000002,0.025203,0.008188999,0.008000001,0.025203,0.008189,9.762049e-10,0.007071,0.007071001,0.008000001,0.01,-9.536744e-10,0.008,0.025203,0.008188999,0.008000001,0.015576,0.021439,0.008000003,0.021439,0.015576,0.008000002,0.021439,0.015576,1.856804e-09,0.008189,0.025203,0.008000003,0.015576,0.021439,0.008000003,0.015576,0.021439,2.555728e-09,0,0.0265,0.008000003,0.008189,0.025203,0.008000003,0.008189,0.025203,3.004432e-09,-0.008189,0.025203,0.008000003,0,0.0265,0.008000003,0,0.0265,3.159046e-09,-0.015576,0.021439,0.008000003,-0.008189,0.025203,0.008000003,-0.008189,0.025203,3.004432e-09,-0.021439,0.015576,0.008000002,-0.015576,0.021439,0.008000003,-0.015576,0.021439,2.555728e-09,-0.025203,0.008188999,0.008000001,-0.021439,0.015576,0.008000002,-0.021439,0.015576,1.856804e-09,-0.0265,0,0,-0.0265,-9.536744e-10,0.008,-0.025203,0.008188999,0.008000001,-0.025203,-0.008189001,0.007999999,-0.0265,-9.536744e-10,0.008,-0.0265,0,0,-0.021439,-0.015576,0.007999999,-0.025203,-0.008189001,0.007999999,-0.025203,-0.008189,-9.762049e-10,-0.015576,-0.021439,0.007999998,-0.021439,-0.015576,0.007999999,-0.021439,-0.015576,-1.856804e-09,-0.008189,-0.025203,0.007999998,-0.015576,-0.021439,0.007999998,-0.015576,-0.021439,-2.555728e-09,0,-0.0265,0.007999998,-0.008189,-0.025203,0.007999998,-0.008189,-0.025203,-3.004432e-09,0.008189,-0.025203,0.007999998,0,-0.0265,0.007999998,0,-0.0265,-3.159046e-09,0.015576,-0.021439,0.007999998,0.008189,-0.025203,0.007999998,0.008189,-0.025203,-3.004432e-09,0.021439,-0.015576,-1.856804e-09,0.021439,-0.015576,0.007999999,0.015576,-0.021439,0.007999998,0.025203,-0.008189001,0.007999999,0.021439,-0.015576,0.007999999,0.021439,-0.015576,-1.856804e-09,0.0265,-9.536744e-10,0.008,0.025203,-0.008189001,0.007999999,0.025203,-0.008189,-9.762049e-10,0.007071,0.007070998,0.033,0.01,-2.630541e-09,0.033,0.01,-9.536744e-10,0.008,0,0.009999997,0.033,0.007071,0.007070998,0.033,0.007071,0.007071001,0.008000001,-0.007071,0.007071,0.008,-0.007071,0.007070998,0.033,0,0.009999997,0.033,-0.01,-2.630541e-09,0.033,-0.007071,0.007070998,0.033,-0.007071,0.007071,0.008,-0.007071,-0.007071002,0.033,-0.01,-2.630541e-09,0.033,-0.01,-1.186505e-09,0.008,0,-0.01,0.007999999,0,-0.01,0.033,-0.007071,-0.007071002,0.033,0.007071,-0.007071,0.007999999,0.007071,-0.007071002,0.033,0,-0.01,0.033,0.01,-9.536744e-10,0.008,0.01,-2.630541e-09,0.033,0.007071,-0.007071002,0.033,0.0265,-9.536744e-10,0.008,0.025203,0.008188999,0.008000001,0.01,-9.536744e-10,0.008,0.021439,0.015576,0.008000002,0.015576,0.021439,0.008000003,0.007071,0.007071001,0.008000001,0.008189,0.025203,0.008000003,0,0.01,0.008000001,0.007071,0.007071001,0.008000001,0.008189,0.025203,0.008000003,0,0.0265,0.008000003,0,0.01,0.008000001,-0.008189,0.025203,0.008000003,-0.007071,0.007071,0.008,0,0.01,0.008000001,-0.008189,0.025203,0.008000003,-0.015576,0.021439,0.008000003,-0.007071,0.007071,0.008,-0.021439,0.015576,0.008000002,-0.007071,0.007071,0.008,-0.015576,0.021439,0.008000003,-0.025203,0.008188999,0.008000001,-0.01,-1.186505e-09,0.008,-0.007071,0.007071,0.008,-0.0265,-9.536744e-10,0.008,-0.01,-1.186505e-09,0.008,-0.025203,0.008188999,0.008000001,-0.025203,-0.008189001,0.007999999,-0.007071,-0.007071,0.007999999,-0.01,-1.186505e-09,0.008,-0.021439,-0.015576,0.007999999,-0.007071,-0.007071,0.007999999,-0.025203,-0.008189001,0.007999999,-0.021439,-0.015576,0.007999999,-0.015576,-0.021439,0.007999998,-0.007071,-0.007071,0.007999999,-0.008189,-0.025203,0.007999998,0,-0.01,0.007999999,-0.007071,-0.007071,0.007999999,-0.008189,-0.025203,0.007999998,0,-0.0265,0.007999998,0,-0.01,0.007999999,0.008189,-0.025203,0.007999998,0,-0.01,0.007999999,0,-0.0265,0.007999998,0.008189,-0.025203,0.007999998,0.015576,-0.021439,0.007999998,0.007071,-0.007071,0.007999999,0.021439,-0.015576,0.007999999,0.007071,-0.007071,0.007999999,0.015576,-0.021439,0.007999998,0.021439,-0.015576,0.007999999,0.025203,-0.008189001,0.007999999,0.007071,-0.007071,0.007999999,0.01,-9.536744e-10,0.008,0.007071,-0.007071,0.007999999,0.025203,-0.008189001,0.007999999,0.0265,-0.1,-1.192093e-08,0.025203,-0.091811,-1.094472e-08,0.0265,-0.1,0.007999988,0.025203,-0.091811,0.007999989,0.0025,-0.099188,0.007999988,0.0265,-0.1,0.007999988,0.025203,-0.091811,0.007999989,0.025203,-0.091811,-1.094472e-08,0.021439,-0.084424,0.00799999,0.021439,-0.084424,-1.006412e-08,0.015576,-0.078561,-9.365201e-09,0.021439,-0.084424,0.00799999,0.015576,-0.078561,-9.365201e-09,0.008189,-0.074797,-8.916497e-09,0.015576,-0.078561,0.007999991,0,-0.0735,-8.761883e-09,0,-0.0735,0.007999992,0.008189,-0.074797,-8.916497e-09,0,-0.0735,-8.761883e-09,-0.008189,-0.074797,-8.916497e-09,0,-0.0735,0.007999992,-0.015576,-0.078561,-9.365201e-09,-0.015576,-0.078561,0.007999991,-0.008189,-0.074797,-8.916497e-09,-0.021439,-0.084424,-1.006412e-08,-0.021439,-0.084424,0.00799999,-0.015576,-0.078561,-9.365201e-09,-0.025203,-0.091811,-1.094472e-08,-0.025203,-0.091811,0.007999989,-0.021439,-0.084424,-1.006412e-08,-0.0025,-0.099188,0.007999988,-0.0025,-0.098184,0.007999988,-0.025203,-0.091811,0.007999989,-0.0265,-0.1,-1.192093e-08,-0.0265,-0.1,0.007999988,-0.025203,-0.091811,-1.094472e-08,-0.025203,-0.108189,-1.289713e-08,-0.025203,-0.108189,0.007999987,-0.0265,-0.1,-1.192093e-08,-0.021439,-0.115576,-1.377773e-08,-0.021439,-0.115576,0.007999986,-0.025203,-0.108189,-1.289713e-08,-0.021439,-0.115576,0.007999986,-0.0025,-0.101816,0.007999988,-0.025203,-0.108189,0.007999987,-0.015576,-0.121439,-1.447666e-08,-0.015576,-0.121439,0.007999985,-0.021439,-0.115576,-1.377773e-08,-0.008189,-0.125203,-1.492536e-08,-0.008189,-0.125203,0.007999985,-0.015576,-0.121439,-1.447666e-08,0,-0.1265,-1.507997e-08,0,-0.1265,0.007999985,-0.008189,-0.125203,-1.492536e-08,0.008189,-0.125203,-1.492536e-08,0.008189,-0.125203,0.007999985,0,-0.1265,-1.507997e-08,0.008189,-0.125203,0.007999985,0.0025,-0.1125,0.007999987,0,-0.1265,0.007999985,0.015576,-0.121439,-1.447666e-08,0.015576,-0.121439,0.007999985,0.008189,-0.125203,-1.492536e-08,0.0025,-0.103441,0.007999988,0.0025,-0.107694,0.007999987,0.015576,-0.121439,0.007999985,0.021439,-0.115576,-1.377773e-08,0.021439,-0.115576,0.007999986,0.015576,-0.121439,-1.447666e-08,0.025203,-0.108189,-1.289713e-08,0.025203,-0.108189,0.007999987,0.021439,-0.115576,-1.377773e-08,0.0265,-0.1,-1.192093e-08,0.0265,-0.1,0.007999988,0.025203,-0.108189,-1.289713e-08,-0.0025,-0.101816,0.007999988,-0.021439,-0.115576,0.007999986,-0.0025,-0.103441,0.007999988,0.021439,-0.084424,0.00799999,0.0025,-0.098184,0.007999988,0.025203,-0.091811,0.007999989,-0.025203,-0.108189,0.007999987,-0.0025,-0.100812,0.007999988,-0.0265,-0.1,0.007999988,-0.0025,-0.103441,0.007999988,-0.015576,-0.121439,0.007999985,-0.0025,-0.107694,0.007999987,-0.0025,-0.098184,0.007999988,-0.0025,-0.096559,0.007999989,-0.021439,-0.084424,0.00799999,-0.025203,-0.091811,0.007999989,-0.0265,-0.1,0.007999988,-0.0025,-0.099188,0.007999988,-0.008189,-0.074797,0.007999991,-0.0025,-0.0875,0.00799999,0,-0.0735,0.007999992,-0.0025,-0.096559,0.007999989,-0.0025,-0.092306,0.007999989,-0.015576,-0.078561,0.007999991,-0.0025,-0.0875,0.0008419896,-0.0025,-0.1125,0.0008419866,0.0025,-0.0875,0.0008419896,-0.0025,-0.1125,0.0008419866,-0.0025,-0.1125,0.007999987,0,-0.1125,0.007999987,0,-0.1125,0.007999987,0.0025,-0.1125,0.0008419866,-0.0025,-0.1125,0.0008419866,0.0025,-0.100812,0.007999988,0.0025,-0.101816,0.007999988,0.025203,-0.108189,0.007999987,0.0025,-0.0875,0.0008419896,0.0025,-0.096559,0.007999989,0.0025,-0.092306,0.007999989,0.0025,-0.0875,0.0008419896,0.0025,-0.1,0.007999988,0.0025,-0.098184,0.007999988,0.0025,-0.1125,0.0008419866,0.0025,-0.101816,0.007999988,0.0025,-0.100812,0.007999988,0.0025,-0.1125,0.0008419866,0.0025,-0.1125,0.007999987,0.0025,-0.107694,0.007999987,0.0025,-0.1125,0.0008419866,0.0025,-0.103441,0.007999988,0.0025,-0.101816,0.007999988,0.0025,-0.092306,0.007999989,0.0025,-0.0875,0.00799999,0.0025,-0.0875,0.0008419896,0.0025,-0.0875,0.0008419896,0.0025,-0.1125,0.0008419866,0.0025,-0.1,0.007999988,0.0025,-0.098184,0.007999988,0.0025,-0.096559,0.007999989,0.0025,-0.0875,0.0008419896,0.0025,-0.103441,0.007999988,0.0025,-0.1125,0.0008419866,0.0025,-0.107694,0.007999987,-0.0025,-0.1,0.007999988,-0.0025,-0.1125,0.0008419866,-0.0025,-0.0875,0.0008419896,-0.0025,-0.1125,0.0008419866,-0.0025,-0.103441,0.007999988,-0.0025,-0.107694,0.007999987,-0.0025,-0.107694,0.007999987,-0.0025,-0.1125,0.007999987,-0.0025,-0.1125,0.0008419866,-0.0025,-0.0875,0.0008419896,-0.0025,-0.0875,0.00799999,-0.0025,-0.092306,0.007999989,-0.0025,-0.0875,0.0008419896,-0.0025,-0.096559,0.007999989,-0.0025,-0.098184,0.007999988,-0.0025,-0.0875,0.0008419896,-0.0025,-0.099188,0.007999988,-0.0025,-0.1,0.007999988,-0.0025,-0.1125,0.0008419866,-0.0025,-0.100812,0.007999988,-0.0025,-0.101816,0.007999988,-0.0025,-0.101816,0.007999988,-0.0025,-0.103441,0.007999988,-0.0025,-0.1125,0.0008419866,-0.0025,-0.0875,0.0008419896,-0.0025,-0.092306,0.007999989,-0.0025,-0.096559,0.007999989,-0.0025,-0.1125,0.0008419866,-0.0025,-0.1,0.007999988,-0.0025,-0.100812,0.007999988,0.025203,-0.108189,0.007999987,0.0265,-0.1,0.007999988,0.0025,-0.100812,0.007999988,0.0025,-0.0875,0.0008419896,0.0025,-0.0875,0.00799999,0,-0.0875,0.00799999,0,-0.0875,0.00799999,-0.0025,-0.0875,0.0008419896,0.0025,-0.0875,0.0008419896,-0.008189,-0.125203,0.007999985,0,-0.1265,0.007999985,-0.0025,-0.1125,0.007999987,0.0025,-0.101816,0.007999988,0.0025,-0.103441,0.007999988,0.021439,-0.115576,0.007999986,0.008189,-0.074797,0.007999991,0,-0.0735,0.007999992,0.0025,-0.0875,0.00799999,0.0025,-0.098184,0.007999988,0.021439,-0.084424,0.00799999,0.0025,-0.096559,0.007999989,0.0025,-0.096559,0.007999989,0.015576,-0.078561,0.007999991,0.0025,-0.092306,0.007999989,0.0265,-2.630541e-09,0.033,0.0265,-4.53789e-09,0.049,0.024483,-0.010141,0.033,-0.010141,-0.024483,0.033,0,-0.0265,0.033,-0.010141,-0.024483,0.049,-0.01,-2.630541e-09,0.033,-0.007071,-0.007071002,0.033,-0.024483,-0.010141,0.033,0.007071,0.007070998,0.033,0,0.009999997,0.033,0.010141,0.024483,0.033,0.018738,-0.018738,0.033,0.024483,-0.010141,0.033,0.018738,-0.018738,0.049,-0.024483,0.010141,0.033,-0.024483,0.010141,0.049,-0.018738,0.018738,0.033,-0.024483,0.010141,0.033,-0.0265,-2.630541e-09,0.033,-0.024483,0.010141,0.049,-0.007071,-0.007071002,0.033,0,-0.01,0.033,-0.010141,-0.024483,0.033,-0.0265,-2.630541e-09,0.033,-0.024483,0.010141,0.033,-0.01,-2.630541e-09,0.033,0.010141,-0.024483,0.033,0.010141,-0.024483,0.049,0,-0.0265,0.033,-0.018738,0.018738,0.033,-0.010141,0.024483,0.033,-0.007071,0.007070998,0.033,0.024483,0.010141,0.033,0.024483,0.010141,0.049,0.0265,-2.630541e-09,0.033,0.018738,-0.018738,0.033,0.018738,-0.018738,0.049,0.010141,-0.024483,0.033,0.024483,0.010141,0.033,0.018738,0.018738,0.033,0.024483,0.010141,0.049,0.010141,0.024483,0.033,0.010141,0.024483,0.04900001,0.018738,0.018738,0.033,0,0.0265,0.033,0,0.0265,0.04900001,0.010141,0.024483,0.033,-0.010141,0.024483,0.033,-0.010141,0.024483,0.04900001,0,0.0265,0.033,0.01,-2.630541e-09,0.033,0.007071,0.007070998,0.033,0.024483,0.010141,0.033,-0.010141,0.024483,0.04900001,-0.010141,0.024483,0.033,-0.018738,0.018738,0.04900001,0.007071,-0.007071002,0.033,0.01,-2.630541e-09,0.033,0.024483,-0.010141,0.033,-0.0265,-2.630541e-09,0.033,-0.024483,-0.010141,0.033,-0.0265,-4.53789e-09,0.049,0,-0.01,0.033,0.007071,-0.007071002,0.033,0.010141,-0.024483,0.033,-0.018738,-0.018738,0.033,-0.018738,-0.018738,0.049,-0.024483,-0.010141,0.033,-0.010141,-0.024483,0.033,-0.010141,-0.024483,0.049,-0.018738,-0.018738,0.033,0.025203,0.008189,9.762049e-10,0.025203,0.008188999,0.008000001,0.0265,0,0,0.021439,0.015576,1.856804e-09,0.021439,0.015576,0.008000002,0.025203,0.008189,9.762049e-10,0.021439,0.015576,0.008000002,0.007071,0.007071001,0.008000001,0.025203,0.008188999,0.008000001,0.015576,0.021439,2.555728e-09,0.015576,0.021439,0.008000003,0.021439,0.015576,1.856804e-09,0.008189,0.025203,3.004432e-09,0.008189,0.025203,0.008000003,0