io3fix
Version:
toolkit for interior apps
876 lines (774 loc) • 120 kB
JavaScript
'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