zincjs 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/zinc.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://Zinc/webpack/universalModuleDefinition","webpack://Zinc/webpack/bootstrap","webpack://Zinc/./src/zinc.js","webpack://Zinc/external \"url-polyfill\"","webpack://Zinc/./src/primitives/geometry.js","webpack://Zinc/external \"three\"","webpack://Zinc/./src/primitives/zincObject.js","webpack://Zinc/./src/three/Geometry.js","webpack://Zinc/./src/utilities.js","webpack://Zinc/./src/primitives/marker.js","webpack://Zinc/./src/assets/mapMarker.svg","webpack://Zinc/./src/primitives/augmentShader.js","webpack://Zinc/./src/primitives/glyph.js","webpack://Zinc/./src/primitives/label.js","webpack://Zinc/external \"three-spritetext\"","webpack://Zinc/./src/primitives/glyphset.js","webpack://Zinc/./src/loader.js","webpack://Zinc/./src/three/Loader.js","webpack://Zinc/./src/videoHandler.js","webpack://Zinc/./src/primitives/pointset.js","webpack://Zinc/./src/three/Points.js","webpack://Zinc/./src/assets/disc.png","webpack://Zinc/./src/primitives/lines.js","webpack://Zinc/./src/three/line/LineSegments.js","webpack://Zinc/./src/three/line/Line.js","webpack://Zinc/./src/renderer.js","webpack://Zinc/external \"css-element-queries/src/ResizeSensor\"","webpack://Zinc/./src/scene.js","webpack://Zinc/./src/sceneLoader.js","webpack://Zinc/external \"three/examples/jsm/loaders/STLLoader\"","webpack://Zinc/external \"three/examples/jsm/loaders/OBJLoader\"","webpack://Zinc/external \"three/examples/jsm/loaders/GLTFLoader\"","webpack://Zinc/./src/sceneExporter.js","webpack://Zinc/./src/three/GLTFExporter.js","webpack://Zinc/./src/controls.js","webpack://Zinc/./src/region.js","webpack://Zinc/./src/minimap.js","webpack://Zinc/./src/geometryCSG.js","webpack://Zinc/./src/three-js-csg.js","webpack://Zinc/external \"webworkify-webpack\"","webpack://Zinc/external \"promise-polyfill\"","webpack://Zinc/./src/workers/geometryCSG.worker.js","webpack://Zinc/./src/workers/geometryCSGInternal.js","webpack://Zinc/./src/glyphsetCSG.js"],"names":["require","Zinc","Revision","defaultMaterialColor","defaultOpacity","modelPrefix","Geometry","Glyph","Glyphset","Pointset","Lines","Renderer","Scene","GeometryCSG","GlyphsetCSG","Viewport","CameraControls","SmoothCameraTransition","RayCaster","CameraAutoTumble","StereoEffect","loadExternalFile","loadExternalFiles","THREE","module","exports","ZincObject","call","videoHandler","isGeometry","createMesh","geometryIn","materialIn","options","geometry","morph","toBufferGeometry","isTransparent","opacity","material","_video","morphTargets","localTimeEnabled","morphNormals","BufferGeometry","attributes","color","MeshPhongMaterial","colour","transparent","side","DoubleSide","vertexColors","VertexColors","localMorphColour","morphAttributes","onBeforeCompile","augmentMorphColor","videoTexture","createCanvasVideoTexture","MeshBasicMaterial","Color","map","mesh","Mesh","setMesh","calculateUVs","computeBoundingBox","max","boundingBox","min","offset","Vector2","x","y","range","faceVertexUvs","i","faces","length","v1","vertices","a","v2","b","v3","c","push","uvsNeedUpdate","setWireframe","wireframe","prototype","Object","create","THREEGeometry","isZincObject","secondaryMesh","groupName","timeEnabled","morphColour","inbuildTime","mixer","animationGroup","duration","clipAction","userData","marker","markerUpdateRequired","markerVertexIndex","boundingBoxUpdateRequired","cachedBoundingBox","Box3","_vertex","Vector3","anatomicalId","region","animationClip","setDuration","durationIn","getDuration","setRegion","getRegion","morphNormalsReady","computeMorphNormals","toIndexedBufferGeometry","copyMorphColorsToIndexedBufferGeometry","clone","colorsNeedUpdate","computeBoundingSphere","checkAndCreateTransparentMesh","secondaryMaterial","FrontSide","renderOrder","name","BackSide","needsUpdate","add","checkAndRemoveTransparentMesh","remove","uncache","AnimationObjectGroup","AnimationMixer","position","AnimationClip","CreateClipsFromMorphTargetSequences","loop","loopOnce","clampWhenFinished","play","matrixAutoUpdate","setFrustumCulled","setName","groupNameIn","getCurrentTime","ratio","time","_clip","updateMorphColorAttribute","targetGeometry","morphColors","influences","morphTargetInfluences","deleteAttribute","bound","morphArray","setAttribute","setMorphTime","timeChanged","actualDuration","newTime","update","isTimeVarying","getVisibility","visible","setVisibility","setAlpha","alpha","transparentChanged","flag","frustumCulled","setVertexColors","getColour","setColour","getColourHex","getHexString","setColourHex","hex","setHex","setMaterial","dispose","getClosestVertexIndex","closestIndex","setFromBufferAttribute","center","getCenter","distance","currentDistance","current","count","fromArray","array","distanceTo","getClosestVertex","found","multiplyScalar","getBoundingBox","box","setFromArray","set","updateMarker","playAnimation","displayMarkers","isEnabled","disable","Marker","setPosition","z","camera","markerDepths","updateNDC","cameraObject","enable","processMarkerVisual","updateVisual","initiateMorphColor","setRenderOrder","render","delta","targetTime","_m1","Matrix4","_obj","Object3D","_offset","uuid","MathUtils","generateUUID","type","colors","normals","uvs","skinWeights","skinIndices","lineDistances","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","normalsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","assign","EventDispatcher","constructor","applyMatrix4","matrix","vertex","normalMatrix","Matrix3","getNormalMatrix","il","face","normal","applyMatrix3","normalize","j","jl","vertexNormals","rotateX","angle","makeRotationX","rotateY","makeRotationY","rotateZ","makeRotationZ","translate","makeTranslation","scale","makeScale","lookAt","vector","updateMatrix","fromBufferGeometry","addFace","materialIndex","scope","fromBufferAttribute","Face3","uv","uv2","index","console","error","groups","group","start","getX","computeFaceNormals","negate","radius","s","cb","ab","f","fl","vA","vB","vC","subVectors","cross","copy","computeVertexNormals","areaWeighted","Array","v","vl","computeFlatVertexNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","setFromPoints","Sphere","merge","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","colors1","colors2","vertexCopy","faceVertexNormals","faceVertexColors","faceCopy","faceVertexUvs2","uvs2","uvsCopy","k","kl","mergeMesh","isMesh","mergeVertices","precisionPoints","verticesMap","unique","changes","precision","Math","pow","key","round","faceIndicesToRemove","indices","n","idx","splice","diff","points","point","l","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","uvs1","id","toJSON","setBit","value","enabled","getNormalIndex","hash","toString","normalsHash","getColorIndex","r","g","colorsHash","getHex","getUvIndex","uvsHash","data","metadata","version","generator","parameters","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","source","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","computeGroups","DirectGeometry","fromGeometry","buffergeometry","positions","Float32Array","BufferAttribute","copyVector3sArray","copyColorsArray","copyVector2sArray","attribute","Float32BufferAttribute","copyVector4sArray","buffer","copyArray","colorArray","colorsArray","setIndex","normalsArray","computeTangents","computeLineDistances","applyMatrix","warn","dispatchEvent","createBufferGeometryFromObject","object","isPoints","isLine","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","isVector3","isArray","isColor","resolveURL","url","actualURL","prefix","test","callback","errorCallback","request","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","send","urls","partialCallback","text","urlIndex","result","numComplete","numUrls","getColorsRGB","index_in_colors","floor","remainder","hex_value","mycolor","copyMorphColorsToBufferGeometry","bufferGeometry","morphColor","tolerance","Number","EPSILON","hashToIndex","getIndex","getAttribute","vertexCount","nextIndex","attributeNames","keys","attrArrays","morphAttrsArrays","newIndices","getters","morphAttr","fill","decimalShift","log10","shiftMultiplier","itemSize","getterFunc","newarray","newMorphArrays","m","ml","oldAttribute","isInterleavedBufferAttribute","setArray","morphAttribute","cons","Uint8Array","Uint16Array","Uint32Array","newIndexBuffer","PhongToToon","isMeshPhongMaterial","MeshToonMaterial","markerImage","Image","src","texture","Texture","image","size","zincObject","spriteMaterial","sprite","Group","parent","isMarker","initialise","SpriteMaterial","alphaTest","depthTest","depthWrite","sizeAttenuation","Sprite","porportion","setSpriteSize","project","shader","vertexShader","replace","join","idIn","glyphsetIn","FaceColors","label","labelString","isGlyph","fromMesh","meshIn","getGlyphset","setLabel","String","showLabel","getPosition","getSprite","Label","getGroup","getLabel","getMesh","setTransformation","axis1","axis2","axis3","elements","SpriteText","default","textIn","getStyle","setScale","scaling","getString","JSONLoader","glyphList","axis1s","axis2s","axis3s","scales","labels","numberOfTimeSteps","numberOfVertices","baseSize","scaleFactors","repeat_mode","ready","morphColours","morphVertices","isGlyphset","_transformMatrix","_bot_colour","_top_colour","_boundingBox1","_boundingBox2","_boundingBox3","_points","load","glyphsetData","glyphURL","finishCallback","isInline","displayLabels","MorphColours","MorphVertices","number_of_time_steps","number_of_vertices","base_size","scale_factors","loader","InstancedMesh","parse","meshloader","materials","crossOrigin","resolve_glyph_axes","return_arrays","sign","axis_scale","final_axis1","final_axis2","final_axis3","final_point","mirrored_axis1","mirrored_axis2","mirrored_axis3","mirrored_point","number_of_glyphs","glyph_repeat_mode","use_axis1","use_axis2","use_scale","final_scale1","magnitude","sqrt","updateGlyphsetTransformation","current_positions","current_axis1s","current_axis2s","current_axis3s","current_scales","numberOfGlyphs","numberOfPositions","current_glyph_index","current_index","current_position","current_axis1","current_axis2","current_axis3","current_scale","arrays","setMatrixAt","glyph","instanceMatrix","updateGlyphsetHexColors","current_colors","hex_values","numberOfColours","setColorAt","instanceColor","updateMorphGlyphsets","current_time","bottom_frame","proportion","top_frame","ceil","bottom_positions","top_positions","bottom_axis1","top_axis1","bottom_axis2","top_axis2","bottom_axis3","top_axis3","bottom_scale","top_scale","bottom_colors","top_colors","setRGB","createGlyphs","addCustomGlyph","addMeshAsGlyph","forEachGlyph","callbackFunction","tempGeometry","getMatrixAt","setFromMatrixPosition","applyMatrix4ToBox","box1","box2","union","Loader","LoaderUtils","Vector4","FileLoader","DefaultLoadingManager","manager","withCredentials","onLoad","onProgress","onError","texturePath","extractUrlBase","setWithCredentials","json","JSON","toLowerCase","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","u","nUvLayers","parseSkin","influencesPerVertex","w","d","bones","parseMorphing","dstVertices","srcVertices","dstNormals","srcNormals","cl","dstColors","srcColors","parseAnimations","outputAnimations","animations","animation","concat","clip","parseAnimation","morphAnimationClips","initMaterials","video","fullPath","VideoHandler","singleSided","flipSided","specularCoef","shininess","Handlers","handlers","regex","get","file","onLoadStart","onLoadProgress","onLoadComplete","createMaterial","BlendingMode","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","textureLoader","TextureLoader","materialLoader","MaterialLoader","loadTexture","path","repeat","wrap","anisotropy","setCrossOrigin","wrapS","RepeatWrapping","wrapT","MirroredRepeatWrapping","textures","blending","specular","emissive","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","emissiveMap","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","lightMap","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","aoMap","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","bumpMap","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","bumpScale","normalMap","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","normalScale","specularMap","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","metalnessMap","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","roughnessMap","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","alphaMap","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","setTextures","srcIn","_this","lastPlayPos","currentPlayPos","bufferingDetected","actualTime","currentTime","getVideoDuration","VideoTexture","minFilter","LinearFilter","magFilter","format","RGBFormat","isReadyToPlay","document","createElement","Points","isPointset","getCircularTexture","setSize","setSizeAttenuation","_inverseMatrix","_ray","Ray","_sphere","_position","_morphA","_tempA","PointsMaterial","updateMorphTargets","raycast","raycaster","intersects","matrixWorld","threshold","params","drawRange","ray","intersectsSphere","invert","localThreshold","localThresholdSq","isBufferGeometry","positionAttribute","morphPosition","end","calculatePosition","testPoint","morphTargetDictionary","rayPointDistanceSq","distanceSqToPoint","intersectPoint","closestPointToPoint","origin","near","far","distanceToRay","morphInfluences","influence","addScaledVector","sub","isLines","createLineSegment","line","LineSegments","setWidth","width","linewidth","_start","_end","Line","isLineSegments","_morphB","_tempB","LineBasicMaterial","vStart","vEnd","interSegment","interRay","step","distSq","distanceSqToSegment","faceIndex","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","canvas","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","height","onWindowResize","rect","getBoundingClientRect","left","top","target","getSize","initialiseVisualisation","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","scene","createScene","setCurrentScene","getCurrentScene","sceneIn","removeActiveScene","oldScene","setInteractiveControlEnable","setAdditionalScenesGroup","getSceneByName","new_scene","sceneName","resetView","viewAll","boundingBox2","viewAllWithBoundingBox","loadModelsURL","colours","opacities","loadViewURL","loadFromViewURL","jsonFilePrefix","updateDirectionalLight","runAnimation","requestAnimationFrame","cancelAnimationFrame","stopAnimate","stop","animate","Date","now","addPreRenderCallbackFunction","removePreRenderCallbackFunction","addPostRenderCallbackFunction","removePostRenderCallbackFunction","getPlayRate","setPlayRate","playRateIn","setMorphsTime","getZincGeometryByID","addToScene","addObject","addToOrthoScene","OrthographicCamera","createHUDSprites","imagewidth","imageheight","addLogo","ImageUtils","getDelta","renderGeometries","sceneItem","clearDepth","hasOwnProperty","getThreeJSRenderer","isSceneActive","addActiveScene","additionalScene","getThreeJSScene","clearAllActiveScene","clearAll","transitionScene","endingScene","currentCamera","getZincCameraControls","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","SceneLoader","SceneExporter","defaultMetadata","Duration","OriginalDuration","TimeStamps","defaultDuration","rendererIn","sceneLoader","minimap","rootRegion","Region","directionalLight","ambient","zincCameraControls","stereoEffectFlag","stereoEffect","autoClearFlag","displayMinimap","minimapScissor","x_offset","y_offset","align","updateRequired","scissor","_markerTarget","getDownloadProgress","aspect","updateProjectionMatrix","onResize","changeZoomByScrollRateUnit","unit","setupCamera","PerspectiveCamera","AmbientLight","DirectionalLight","setDirectionalLight","Minimap","loadView","settings","viewPort","setFromObject","setCurrentCameraSettings","setupMultipleViews","defaultView","entries","viewport","addViewport","setDefaultViewport","forEachGeometry","forEachGlyphset","forEachPointset","forEachLine","findGeometriesWithGroupName","GroupName","findPointsetsWithGroupName","findGlyphsetsWithGroupName","findLinesWithGroupName","findObjectsWithGroupName","findObjectsWithAnatomicalId","getBoundingBoxOfZincObjects","objectsArray","vectorToScreenXY","widthHalf","heightHalf","getObjectsScreenXY","zincObjects","getNamedObjectsScreenXY","addZincObject","calculateMaxAllowedDistance","loadGlyphsetURL","metaurl","glyphurl","loadPointsetURL","loadLinesURL","loadSTL","loadOBJ","loadMetadataURL","allCompletedCallback","loadGLTF","removeObject","toBeDownloaded","pause","setTime","myPlayRate","setVideoHandler","videoHandlerIn","getWindowsPosition","renderer_width","renderer_height","includes","renderMinimap","setScissorTest","setScissor","setViewport","updateCamera","mask","clear","setPathDuration","setStereoEffectEnable","stereoFlag","objectIsInScene","objectIsInRegion","alignBoundingBoxToCameraView","transitionTime","targetPosition","eyePosition","upVector","newVec1","newVec2","newVec3","crossVectors","angleTo","rotateCameraTransition","rotateAboutLookAtpoint","alignObjectToCameraView","setCameraTargetToObject","addVectors","isStereoEffectEnable","removeZincObject","getPickableThreeJSObjects","returnedObjects","getNormalisedMinimapCoordinates","event","offsetY","clientY","clientX","getMinimapDiffFromNormalised","getDiffFromNormalised","toBeDwonloaded","addMetadataTimeStamp","convertDurationObjectTomSec","getMetadataTag","getMetadata","setMetadataTag","removeMetadataTag","resetMetadata","resetDuration","convertDurationObjectToString","years","months","weeks","days","hours","mins","secs","setDurationFromObject","string","millisec","setOriginalDurationFromObject","exportGLTF","binary","exporter","getRootRegion","STLLoader","OBJLoader","GLTFLoader","progressMap","viewLoaded","errorDownload","totalSize","totalLoaded","unknownFound","progress","xhr","loaded","total","loadMultipleViews","referenceURL","views","Default","Inline","addMultipleViews","Entries","promises","newURL","URL","href","Promise","resolve","reject","fetch","then","response","catch","all","values","forEach","entry","setCurrentViewport","xmlhttp","viewData","requestURL","number","filename","targetRegion","numberOfResources","linesloader","newLines","loadGlyphset","newGlyphset","myCallback","onLoadGlyphsetReady","pointsetloader","newPointset","objloader","traverse","child","zincGeometry","addMeshToZincGeometry","loadSurfaceURL","fileFormat","metaFinishCallback","numberOfDownloaded","downloadedItem","addZincGeometry","newGeometry","parseDuration","durationString","match","loadSettings","item","readPrimitivesItem","order","FileFormat","AnatomicalId","compression","Type","newGeometryURL","GlyphGeometriesURL","DisplayLabels","readViewAndSettingsItem","substring","lastIndexOf","setPath","gltf","children","loadRegions","currentRegion","regions","Primitives","primitive","Order","Transformation","Children","regionName","childRegion","findOrCreateChildFromPath","getNumberOfObjectsInRegions","regionJson","counts","getNumberOfObjects","numberOfObjects","Regions","loadVersionOne","loadVersionTwo","Settings","Views","responseURL","Version","GLTFExporter","getAllObjects","pluginCallbacks","register","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","indexOf","unregister","input","onDone","GLTFWriter","plugins","setPlugins","write","WEBGL_CONSTANTS","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","UNSIGNED_INT","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","CLAMP_TO_EDGE","MIRRORED_REPEAT","REPEAT","THREE_TO_WEBGL","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","ClampToEdgeWrapping","PATH_PROPERTIES","quaternion","GLB_HEADER_BYTES","GLB_HEADER_MAGIC","GLB_VERSION","GLB_CHUNK_PREFIX_BYTES","GLB_CHUNK_TYPE_JSON","GLB_CHUNK_TYPE_BIN","equalArray","array1","array2","every","element","stringToArrayBuffer","window","TextEncoder","encode","ArrayBuffer","charCodeAt","isIdentityMatrix","getMinMax","output","POSITIVE_INFINITY","NEGATIVE_INFINITY","getY","getZ","getW","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","byteLength","cachedCanvas","pending","buffers","byteOffset","nodeMap","Map","skins","extensionsUsed","uids","uid","asset","cache","meshes","attributesNormalized","images","trs","onlyVisible","truncateDrawRange","embedImages","maxTextureSize","includeCustomExtensions","processInput","blob","Blob","extensionsUsedList","reader","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","DataView","setUint32","jsonChunk","stringify","jsonChunkPrefix","header","headerView","totalByteLength","glbBlob","glbReader","readAsDataURL","base64data","uri","serializeUserData","objectDef","gltfExtensions","extensionName","extensions","extras","message","getUID","has","isNormalizedNormalAttribute","abs","createNormalizedNormalAttribute","setX","setXYZ","applyTextureTransform","mapDef","didTransform","transformDef","toArray","rotation","processBuffer","processBufferView","componentType","bufferViews","componentSize","dataView","setFloat32","setUint16","setUint8","bufferViewDef","byteStride","processBufferViewImage","processAccessor","Error","end2","bufferViewTarget","minMax","bufferView","accessorDef","normalized","accessors","processImage","flipY","cachedImages","mimeType","RGBAFormat","imageDef","ctx","getContext","HTMLImageElement","HTMLCanvasElement","OffscreenCanvas","ImageBitmap","drawImage","Uint8ClampedArray","putImageData","ImageData","toBlob","bufferViewIndex","toDataURL","processSampler","samplers","samplerDef","processTexture","textureDef","sampler","_invokeAll","ext","writeTexture","processMaterial","isShaderMaterial","materialDef","pbrMetallicRoughness","isMeshStandardMaterial","isMeshBasicMaterial","baseColorFactor","metallicFactor","metalness","roughnessFactor","roughness","metalRoughMapDef","metallicRoughnessTexture","baseColorMapDef","baseColorTexture","emissiveIntensity","maxEmissiveComponent","emissiveFactor","emissiveMapDef","emissiveTexture","normalMapDef","normalTexture","occlusionMapDef","texCoord","aoMapIntensity","strength","occlusionTexture","alphaMode","alphaCutoff","doubleSided","writeMaterial","processMesh","meshCacheKeyParts","meshCacheKey","mode","isLineLoop","meshDef","primitives","targets","nameConversion","skinWeight","skinIndex","originalNormal","modifiedAttribute","attributeName","substr","toUpperCase","validVertexAttributes","accessor","weights","targetNames","reverseDictionary","warned","gltfAttributeName","baseAttribute","relativeAttribute","morphTargetsRelative","isMultiMaterial","cacheKey","writeMesh","processCamera","cameras","isOrtho","isOrthographicCamera","cameraDef","orthographic","xmag","right","ymag","zfar","znear","perspective","aspectRatio","yfov","degToRad","fov","processAnimation","root","Utils","mergeMorphTargetTracks","tracks","channels","track","trackBinding","PropertyBinding","parseTrackName","trackNode","findNode","nodeName","trackProperty","propertyName","objectName","isSkinnedMesh","skeleton","getBoneByName","objectIndex","outputItemSize","times","interpolation","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","getInterpolation","InterpolateDiscrete","node","processSkin","nodes","rootJoint","joints","inverseBindMatrices","temporaryBoneInverse","boneInverses","multiply","bindMatrix","skin","processNode","nodeDef","translation","meshIndex","isCamera","nodeIndex","writeNode","processScene","scenes","sceneDef","processObjects","objects","beforeParse","objectsWithoutScene","afterParse","func","light","isLight","isDirectionalLight","isPointLight","isSpotLight","lightDef","intensity","spot","innerConeAngle","penumbra","outerConeAngle","decay","lights","isGLTFSpecularGlossinessMaterial","extensionDef","diffuseFactor","specularFactor","glossinessFactor","glossiness","diffuseTexture","specularMapDef","specularGlossinessTexture","insertKeyframe","valueSize","getValueSize","TimeBufferType","ValueBufferType","interpolant","evaluate","slice","mergedTracks","sourceTracks","sourceTrack","sourceTrackBinding","sourceTrackNode","propertyIndex","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","setInterpolation","InterpolateLinear","targetCount","targetIndex","mergedTrack","sourceInterpolant","keyframeIndex","nearPlane","farPlane","MODE","NONE","DEFAULT","PATH","SMOOTH_CAMERA_TRANSITION","AUTO_TUMBLE","ROTATE_TRANSITION","MINIMAP","SYNC_CONTROL","STATE","ROTATE","ZOOM","PAN","TOUCH_ROTATE","TOUCH_ZOOM","TOUCH_PAN","SCROLL","CLICK_ACTION","MAIN","AUXILIARY","SECONDARY","tumble_rate","pointer_x","pointer_y","pointer_x_start","pointer_y_start","previous_pointer_x","previous_pointer_y","near_plane_fly_debt","touchZoomDistanceStart","touchZoomDistanceEnd","scrollRate","cameraPath","numberOfCameraPoint","updateLightWithPathFlag","deviceOrientationControl","defaultViewport","currentMode","smoothCameraTransitionObject","rotateCameraTransitionObject","cameraAutoTumbleObject","mouseScroll","_state","zincRayCaster","targetTouchId","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","sceneSphere","_tempEye","ndcControl","maxDist","viewports","getBoundingSphere","currentDist","viewportName","defaultName","getDefaultViewport","getViewportOfName","setMouseButtonAction","buttonName","actionName","checkTravelDistance","newDist","translateViewport","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","len","touches","dx","dy","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentWheelEvent","deltaY","stopImmediatePropagation","fact","unproject","getVectorsFromRotateAboutLookAtPoints","axis","dot","up","rel_eyea","rel_eyeb","rel_eyec","upa","upb","upc","cos_angle","cos","sin_angle","sin","returned_values","tumble","delta_x","delta_y","tangent_dist","phi","acos","PI","calculateZoomDelta","changeZoomByValue","dist","near_far_minimum_ratio","flyZoom","directionalLightIn","addEventListener","removeEventListener","loadPath","pathData","CameraPath","NumberOfPoints","loadPathURL","path_url","updateTime","getTime","timeIn","getNumberOfTimeFrame","getCurrentTimeFrame","setCurrentTimeFrame","targetTimeFrame","updatePath","time_frame","bot_pos","top_pos","calculatePathNow","handleSyncControl","triggerCallback","zoom","controlEnabled","isTransitionCompleted","ROTATE_CAMERA_TRANSITION","stopOnCameraInput","playPath","stopPath","isPlayingPath","enableDirectionalLightUpdateWithPath","enableDeviceOrientation","ModifiedDeviceOrientationControls","disableDeviceOrientation","isDeviceOrientationEnabled","newViewport","view_angle","clip_distance","eyex","eyey","eyez","eye_distance","tan","localEyePosition","localNearPlane","nearClippingFactor","currentViewport","getDefaultEyePosition","getDefaultTargetPosition","RotateCameraTransition","pauseCameraTransition","stopCameraTransition","isTransitioningCamera","autoTumble","tumbleDirectionIn","tumbleRateIn","stopOnCameraInputIn","enableAutoTumble","stopAutoTumble","updateAutoTumble","requireUpdate","isAutoTumble","enableRaycaster","callbackFunctionIn","hoverCallbackFunctionIn","disableRaycaster","isSyncControl","currentMpde","enableSyncControl","NDCCameraControl","disableSyncControl","targetCameraIn","startingEyePosition","startingTargetPosition","startingUp","endingEyePosition","endingTargetPosition","endingUp","targetCamera","completed","newDuration","updateCameraSettings","axisIn","angleIn","previousTime","actualDelta","hostSceneIn","hoverCallbackFunction","Raycaster","mouse","lastHovered","cooldown","getIntersectsObject","zincCamera","threejsScene","setFromCamera","intersectObjects","hovered","setTimeout","awaitMove","tumbleAxis","computeTumbleAxisAngle","tumbleDirection","StereoCameraZoomFixed","cameraL","layers","cameraR","focus","eyeRight","eyeLeft","xmin","xmax","projectionMatrix","eyeSep","eyeSepOnProjection","ymax","DEG2RAD","_stereo","updateMatrixWorld","reorder","deviceOrientation","screenOrientation","onDeviceOrientationChangeEvent","onScreenOrientationChangeEvent","orientation","setObjectQuaternion","zee","euler","Euler","q0","Quaternion","q1","beta","gamma","orient","setFromEuler","setFromAxisAngle","applyQuaternion","connect","disconnect","eventCallback","cameraIn","defaultViewportIn","getCurrentPosition","zoomToBox","setCenterZoom","getPanZoom","setEventCallback","parentIn","tMatrix","hideAllChildren","transformation","nameIn","getName","getParent","getFullSeparatedPath","paths","parentName","p","unshift","getFullPath","shift","createChild","getChildWithName","childName","findChildFromSeparatedPath","pathArray","findChildFromPath","split","createChildFromSeparatedPath","createChildFromPath","objectsList","pickMarkers","transverse","boundingBox1","childObjects","primitivesArray","geometriesArray","filter","pointsetsArray","glyphsetsArray","linesArray","allObjects","targetScene","helper","positionAttributes","_box","_center","coord","new_coord","diameter","getBoundary","v4","cameraControl","ThreeBSP","work","BufferGeometryLoader","hostIn","host","core","worker","myResolve","createGeometryFromJSON","JSONParser","workerEventHandler","ev","action","log","csg","GeometryCSGInternal","postMessage","getHostGeometry","tempCSG","createZincGeometry","getGeometry","csgMesh","newMesh","toMesh","setCSG","CSG","sendToWork","guestGeometry","intersect","newCSG","subtract","terminateWorker","terminate","COPLANAR","FRONT","BACK","SPANNING","_length_i","polygon","polygons","Node","tree","Polygon","Vertex","Face4","calculateProperties","other_tree","clipTo","build","allPolygons","toGeometry","polygon_vertice_count","vertex_idx_a","vertex_idx_b","vertex_idx_c","verticeUvs","getInverse","polygon_count","vertice_dict","setFromRotationMatrix","vertice_count","flip","classifyVertex","side_value","classifySide","classification","num_positive","num_negative","splitPolygon","coplanar_front","coplanar_back","front","back","ti","tj","vi","vj","t","interpolate","scalar","lerp","other","e","divider","isConvex","temp","clipPolygons","self","geometryFromJSON","guest","hostCSG","setGeometry","prepareCSG","guestCSG","hostCSGs","setGlyphset","prepareCSGForGlyphs","store","glyphset","clippingPlanes"],"mappings":"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","file":"zinc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Zinc\"] = factory();\n\telse\n\t\troot[\"Zinc\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","require(\"url-polyfill\");\n\n/**\n * Provides a global namespace for the Zinc javascript library and some default parameters for it.\n * \n * @namespace\n * @author Alan Wu\n */\n\nconst Zinc = function() {\n this.Revision = \"0.40.0\";\n this.defaultMaterialColor = 0xFFFFFF;\n this.defaultOpacity = 1.0;\n this.modelPrefix = undefined;\n this.Geometry = require('./primitives/geometry').Geometry;\n this.Glyph = require('./primitives/glyph').Glyph;\n this.Glyphset = require('./primitives/glyphset').Glyphset;\n this.Pointset = require('./primitives/pointset').Pointset;\n this.Lines = require('./primitives/lines').Lines;\n this.Renderer = require('./renderer').Renderer;\n this.Scene = require('./scene').Scene;\n this.GeometryCSG = require('./geometryCSG').GeometryCSG;\n this.GlyphsetCSG = require('./glyphsetCSG').GlyphsetCSG;\n this.Viewport = require('./controls').Viewport;\n this.CameraControls = require('./controls').CameraControls;\n this.SmoothCameraTransition = require('./controls').SmoothCameraTransition;\n this.RayCaster = require('./controls').RayCaster;\n this.CameraAutoTumble = require('./controls').CameraAutoTumble;\n this.StereoEffect = require('./controls').StereoEffect;\n this.loadExternalFile = require('./utilities').loadExternalFile;\n this.loadExternalFiles = require('./utilities').loadExternalFiles;\n this.THREE = require('three'); \n \n};\n\nmodule.exports = new Zinc();\n","module.exports = require(\"url-polyfill\");","const THREE = require('three');\n\n/**\n * Provides an object which stores geometry and provides method which controls its animations.\n * This is created when a valid json file containging geometry is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Geometry}\n */\nconst Geometry = function () {\n (require('./zincObject').ZincObject).call(this);\n\t// THREE.Geometry or THREE.BufferGeometry\n\tthis.videoHandler = undefined;\n this.isGeometry = true;\n\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (this.geometry && this.morph && (geometryIn != undefined))\n\t\t\treturn;\n\t\t// First copy the geometry\n\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\n\t\tlet isTransparent = false;\n\t\tif (1.0 > options.opacity)\n\t\t\t isTransparent = true;\n\n\t\tlet material = undefined;\n\t\tif (geometry._video === undefined) {\n\t\t\tif (materialIn) {\n\t\t\t\tmaterial = materialIn;\n\t\t\t\tmaterial.morphTargets = options.localTimeEnabled;\n\t\t\t\tmaterial.morphNormals = options.localTimeEnabled;\n\t\t\t} else {\n\t\t\t\tif (geometry instanceof THREE.BufferGeometry && geometry.attributes.color === undefined) {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\tvertexColors : THREE.VertexColors,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t//material = PhongToToon(material);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ]) {\n\t\t\t\tmaterial.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n\t\t\t}\n\t\t} else {\n\t\t\tlet videoTexture = geometry._video.createCanvasVideoTexture();\n\t\t\tmaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\tcolor : new THREE.Color(1, 1, 1),\n\t\t\t\ttransparent : isTransparent,\n\t\t\t\topacity : options.opacity,\n\t\t\t\tmap : videoTexture,\n\t\t\t\tside : THREE.DoubleSide\n\t\t\t});\n\t\t\tthis.videoHandler = geometry._video;\n\t\t}\n\t\tlet mesh = new THREE.Mesh(geometry, material); \n\t\tthis.setMesh(mesh, options.localTimeEnabled, options.localMorphColour);\n\t}\n\t\n\tthis.calculateUVs = () => {\n\t\tthis.geometry.computeBoundingBox();\n\t\tconst max = this.geometry.boundingBox.max, min = this.geometry.boundingBox.min;\n\t\tconst offset = new THREE.Vector2(0 - min.x, 0 - min.y);\n\t\tconst range = new THREE.Vector2(max.x - min.x, max.y - min.y);\n\t\tthis.geometry.faceVertexUvs[0] = [];\n\t\tfor (let i = 0; i < this.geometry.faces.length ; i++) {\n\t\t const v1 = this.geometry.vertices[this.geometry.faces[i].a];\n\t\t const v2 = this.geometry.vertices[this.geometry.faces[i].b];\n\t\t const v3 = this.geometry.vertices[this.geometry.faces[i].c];\n\t\t geometry.faceVertexUvs[0].push(\n\t\t [\n\t\t new THREE.Vector2((v1.x + offset.x)/range.x ,(v1.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v2.x + offset.x)/range.x ,(v2.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v3.x + offset.x)/range.x ,(v3.y + offset.y)/range.y)\n\t\t ]);\n\t\t}\n\t\tgeometry.uvsNeedUpdate = true;\t\n\t}\n\t\n\t/**\n\t * Set wireframe display for this geometry.\n\t * \n\t * @param {Boolean} wireframe - Flag to turn on/off wireframe display.\n\t */\n\tthis.setWireframe = wireframe => {\n\t\tthis.morph.material.wireframe = wireframe;\n\t}\n\t\n}\n\nGeometry.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Geometry = Geometry;\n","module.exports = require(\"three\");","const THREE = require('three');\nconst THREEGeometry = require('../three/Geometry').Geometry;\n\nconst ZincObject = function() {\n this.isZincObject = true;\n this.geometry = undefined;\n // THREE.Mesh\n this.morph = undefined;\n // THREE.Mesh - for utilities purpose such as rendering \n // transparent surfaces - one for front face and one for back face.\n this.secondaryMesh = undefined;\n /**\n\t * Groupname given to this geometry.\n\t */\n this.groupName = undefined;\n this.timeEnabled = false;\n this.morphColour = false;\n this.inbuildTime = 0;\n this.mixer = undefined;\n this.animationGroup = undefined;\n\t/**\n\t * Total duration of the animation, this value interacts with the \n\t * {@link Zinc.Renderer#playRate} to produce the actual duration of the\n\t * animation. Actual time in second = duration / playRate.\n\t */\n this.duration = 6000;\n this.clipAction = undefined;\n this.userData = {};\n this.videoHandler = undefined;\n this.marker = undefined;\n this.markerUpdateRequired = true;\n this.markerVertexIndex = -1;\n this.boundingBoxUpdateRequired = true;\n this.cachedBoundingBox = new THREE.Box3();\n this._vertex = new THREE.Vector3();\n this.anatomicalId = undefined;\n this.region = undefined;\n this.animationClip = undefined;\n}\n\nZincObject.prototype.setDuration = function(durationIn) {\n this.duration = durationIn;\n if (this.clipAction) {\n this.clipAction.setDuration(this.duration);\n }\n}\n\nZincObject.prototype.getDuration = function() {\n return this.duration;\n}\n\nZincObject.prototype.setRegion = function(region) {\n this.region = region;\n}\n\nZincObject.prototype.getRegion = function() {\n return this.region;\n}\n\nZincObject.prototype.toBufferGeometry = function(geometryIn, options) {\n let geometry = undefined;\n if (geometryIn instanceof THREEGeometry) {\n if (options.localTimeEnabled && !geometryIn.morphNormalsReady && \n (geometryIn.morphNormals == undefined || geometryIn.morphNormals.length == 0))\n geometryIn.computeMorphNormals();\n geometry = geometryIn.toIndexedBufferGeometry();\n if (options.localMorphColour)\n require(\"../utilities\").copyMorphColorsToIndexedBufferGeometry(geometryIn, geometry);\n } else if (geometryIn instanceof THREE.BufferGeometry) {\n geometry = geometryIn.clone();\n }\n geometry.colorsNeedUpdate = true;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n if (geometryIn._video)\n geometry._video = geometryIn._video;\n return geometry;\n}\n\nZincObject.prototype.checkAndCreateTransparentMesh = function(options) {\n if (this.isGeometry && this.morph.material && this.morph.material.transparent) {\n if (!this.secondaryMesh) {\n let secondaryMaterial = this.morph.material.clone();\n secondaryMaterial.side = THREE.FrontSide;\n this.secondaryMesh = new THREE.Mesh(this.morph.geometry, secondaryMaterial);\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n this.secondaryMesh.userData = this;\n this.secondaryMesh.name = this.groupName;\n }\n this.morph.material.side = THREE.BackSide;\n this.morph.material.needsUpdate = true;\n this.morph.add(this.secondaryMesh);\n this.animationGroup.add(this.secondaryMesh);\n }\n}\n\nZincObject.prototype.checkAndRemoveTransparentMesh = function() {\n if (this.isGeometry && this.secondaryMesh) {\n this.morph.remove(this.secondaryMesh);\n this.animationGroup.uncache(this.secondaryMesh);\n this.animationGroup.remove(this.secondaryMesh);\n }\n this.morph.material.side = THREE.DoubleSide;\n}\n\nZincObject.prototype.setMesh = function(mesh, localTimeEnabled, localMorphColour) {\n this.animationGroup = new THREE.AnimationObjectGroup(mesh);\n this.mixer = new THREE.AnimationMixer(this.animationGroup);\n this.geometry = mesh.geometry;\n this.clipAction = undefined;\n if (this.geometry && this.geometry.morphAttributes && this.geometry.morphAttributes.position) {\n this.animationClip = THREE.AnimationClip.CreateClipsFromMorphTargetSequences(\n this.geometry.morphAttributes.position, 10, true);\n if (this.animationClip && (this.animationClip[0] != undefined)) {\n this.clipAction = this.mixer.clipAction(this.animationClip[0]).setDuration(\n this.duration);\n this.clipAction.loop = THREE.loopOnce;\n this.clipAction.clampWhenFinished = true;\n this.clipAction.play();\n }\n }\n this.timeEnabled = localTimeEnabled;\n this.morphColour = localMorphColour;\n this.morph = mesh;\n this.morph.userData = this;\n this.morph.matrixAutoUpdate = false;\n this.checkAndCreateTransparentMesh();\n if (this.timeEnabled) {\n this.setFrustumCulled(false);\n }\n this.boundingBoxUpdateRequired = true;\n}\n\nZincObject.prototype.setName = function(groupNameIn) {\n this.groupName = groupNameIn;\n if (this.morph) {\n this.morph.name = this.groupName;\n }\n if (this.secondaryMesh) {\n this.secondaryMesh.name = this.groupName;\n }\n}\n\n/**\n * Get the local time of this geometry, it returns a value between \n * 0 and the duration.\n * \n * @return {Number}\n */\nZincObject.prototype.getCurrentTime = function() {\n if (this.clipAction) {\n const ratio = this.clipAction.time / this.clipAction._clip.duration;\n return this.duration * ratio;\n } else {\n return this.inbuildTime;\n }\n}\n\nconst updateMorphColorAttribute = function(targetGeometry, morph) {\n if (morph && targetGeometry.morphAttributes[ \"color\" ]) {\n const morphColors = targetGeometry.morphAttributes[ \"color\" ];\n const influences = morph.morphTargetInfluences;\n const length = influences.length;\n targetGeometry.deleteAttribute( 'morphColor0' );\n targetGeometry.deleteAttribute( 'morphColor1' );\n let bound = 0;\n let morphArray = [];\n for (let i = 0; (1 > bound) || (i < length); i++) {\n if (influences[i] > 0) {\n bound++;\n morphArray.push([i, influences[i]]);\n }\n }\n if (morphArray.length == 2) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[1][0] ] );\n } else if (morphArray.length == 1) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[0][0] ] );\n }\n }\n}\n\n/**\n * Set the local time of this geometry.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\nZincObject.prototype.setMorphTime = function(time) {\n let timeChanged = false;\n if (this.clipAction) {\n const ratio = time / this.duration;\n const actualDuration = this.clipAction._clip.duration;\n let newTime = ratio * actualDuration;\n if (newTime != this.clipAction.time) {\n this.clipAction.time = newTime;\n timeChanged = true;\n }\n if (timeChanged && this.timeEnabled == 1)\n this.mixer.update( 0.0 );\n } else {\n let newTime = time; \n if (time > this.duration)\n newTime = this.duration;\n else if (0 > time)\n newTime = 0;\n else\n newTime = time;\n if (newTime != this.inbuildTime) {\n this.inbuildTime = newTime;\n timeChanged = true;\n }\n }\n if (timeChanged) {\n this.boundingBoxUpdateRequired = true;\n updateMorphColorAttribute(this.geometry, this.morph);\n if (this.timeEnabled)\n this.markerUpdateRequired = true;\n }\n}\n\n/**\n * Check if the geometry is time varying.\n * \n * @return {Boolean}\n */\nZincObject.prototype.isTimeVarying = function() {\n if (this.timeEnabled || this.morphColour)\n return true;\n return false;\n}\n\n/**\n * Get the visibility of this Geometry.\n * \n */\nZincObject.prototype.getVisibility = function() {\n return this.morph.visible;\n}\n\n/**\n * Set the visibility of this Geometry.\n * \n * @param {Boolean} visible - a boolean flag indicate the visibility to be set \n */\nZincObject.prototype.setVisibility = function(visible) {\n this.morph.visible = visible;\n}\n\n/**\n * Set the opacity of this Geometry. This function will also set the isTransparent\n * flag according to the provided alpha value.\n * \n * @param {Number} alpah - Alpha value to set for this geometry, \n * can be any value between from 0 to 1.0.\n */\nZincObject.prototype.setAlpha = function(alpha) {\n const material = this.morph.material;\n let isTransparent = false;\n if (alpha < 1.0)\n isTransparent = true;\n let transparentChanged = material.transparent == isTransparent ? false : true;\n material.opacity = alpha;\n material.transparent = isTransparent;\n if (transparentChanged)\n if (isTransparent)\n this.checkAndCreateTransparentMesh();\n else\n this.checkAndRemoveTransparentMesh();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.opacity = alpha;\n}\n\nZincObject.prototype.setFrustumCulled = function(flag) {\n if (this.morph) {\n this.morph.frustumCulled = flag;\n }\n}\n\nZincObject.prototype.setVertexColors = function(vertexColors) {\n this.morph.material.vertexColors = vertexColors;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.vertexColors = vertexColors;\n}\n\n/**\n * Set the colour of the geometry.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.getColour = function(colour) {\n if (this.morph && this.morph.material)\n return this.morph.material.color;\n\treturn undefined;\n}\n \n/**\n * Set the colour of the geometry.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.setColour = function(colour) {\n this.morph.material.color = colour;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n}\n\nZincObject.prototype.getColourHex = function() {\n if (!this.morphColour)\n return this.morph.material.color.getHexString();\n return undefined;\n}\n\nZincObject.prototype.setColourHex = function(hex) {\n this.morph.material.color.setHex(hex);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color.setHex(hex);\n}\n\n/**\n * Set the material of the geometry.\n * \n * @param {THREE.Material} material - Material to be set for this geometry.\n */\nZincObject.prototype.setMaterial = function(material) {\n this.morph.material = material;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material) {\n this.secondaryMesh.material.dispose();\n this.secondaryMesh.material = material.clone()\n this.secondaryMesh.material.side = THREE.FrontSide;\n }\n}\n\n/**\n * Get the index of the closest vertex to centroid.\n */\nZincObject.prototype.getClosestVertexIndex = function() {\n let closestIndex = -1;\n if (this.morph) {\n let position = this.morph.geometry.attributes.position;\n let boundingBox = new THREE.Box3().setFromBufferAttribute(position);\n let center = new THREE.Vector3();\n boundingBox.getCenter(center);\n if (position && boundingBox) {\n let distance = -1;\n let currentDistance = 0;\n let current = new THREE.Vector3();\n for (let i = 0; i < position.count; i++) {\n current.fromArray(position.array, i * 3);\n currentDistance = current.distanceTo(center);\n if (distance == -1)\n distance = currentDistance;\n else if (distance > (currentDistance)) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n }\n return closestIndex;\n}\n\n/**\n * Get the closest vertex to centroid.\n */\nZincObject.prototype.getClosestVertex = function() {\n let position = new THREE.Vector3();\n if (this.markerVertexIndex == -1) {\n this.markerVertexIndex = this.getClosestVertexIndex();\n }\n if (this.markerVertexIndex >= 0) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = this.morph.geometry.morphAttributes;\n if (influences && attributes && attributes.position) {\n let found = false;\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n this._vertex.fromArray(\n attributes.position[i].array, this.markerVertexIndex * 3);\n position.add(this._vertex.multiplyScalar(influences[i]));\n }\n }\n if (found)\n return position;\n } else {\n position.fromArray(this.morph.geometry.attributes.position.array,\n this.markerVertexIndex * 3);\n return position;\n }\n }\n this.getBoundingBox().getCenter(position);\n return position;\n}\n\n/**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\nZincObject.prototype.getBoundingBox = function() {\n if (this.morph && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = undefined;\n if (this.morph.geometry)\n attributes = this.morph.geometry.morphAttributes;\n let found = false;\n if (influences && attributes && attributes.position) {\n let min = new THREE.Vector3();\n let max = new THREE.Vector3();\n let box = new THREE.Box3();\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n box.setFromArray(attributes.position[i].array);\n min.add(box.min.multiplyScalar(influences[i]));\n max.add(box.max.multiplyScalar(influences[i]));\n }\n }\n if (found)\n this.cachedBoundingBox.set(min, max);\n }\n if (!found)\n this.cachedBoundingBox.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n}\n\n/**\n * Clear this geometry and free the memory.\n */\nZincObject.prototype.dispose = function() {\n if (this.morph && this.morph.geometry)\n this.morph.geometry.dispose();\n if (this.morph && this.morph.material)\n this.morph.material.dispose();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.dispose();\n if (this.geometry)\n this.geometry.dispose();\n this.animationGroup = undefined;\n this.mixer = undefined;\n this.morph = undefined;\n this.clipAction = undefined;\n this.groupName = undefined;\n}\n\nZincObject.prototype.updateMarker = function(playAnimation, options) {\n if ((playAnimation == false) &&\n (options && options.displayMarkers))\n {\n if (this.groupName) {\n if (!this.marker) {\n this.marker = new (require(\"./marker\").Marker)(this);\n this.markerUpdateRequired = true;\n }\n if (this.markerUpdateRequired) {\n let position = this.getClosestVertex();\n if (position) {\n this.marker.setPosition(position.x, position.y, position.z);\n this.markerUpdateRequired = false;\n }\n }\n if (options && options.camera && options.markerDepths) {\n options.markerDepths.push(\n this.marker.updateNDC(options.camera.cameraObject));\n }\n if (!this.marker.isEnabled()) {\n this.marker.enable();\n this.morph.add(this.marker.morph);\n }\n }\n } else {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.disable();\n this.morph.remove(this.marker.morph);\n }\n this.markerUpdateRequired = true;\n }\n}\n\nZincObject.prototype.processMarkerVisual = function(min, max) {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.updateVisual(min, max);\n }\n}\n\nZincObject.prototype.initiateMorphColor = function() {\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true))) {\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n}\n\nZincObject.prototype.setRenderOrder = function(renderOrder) {\n if (this.morph && (renderOrder !== undefined)) {\n this.morph.renderOrder = renderOrder;\n if (this.secondaryMesh)\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n\n }\n}\n\n//Update the geometry and colours depending on the morph.\nZincObject.prototype.render = function(delta, playAnimation, options) {\n if (playAnimation == true)\n {\n if ((this.clipAction) && (this.timeEnabled == 1)) {\n this.mixer.update( delta );\n }\n else {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n }\n if (delta != 0) {\n this.boundingBoxUpdateRequired = true;\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true)))\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n }\n this.updateMarker(playAnimation, options);\n}\n\nexports.ZincObject = ZincObject;\n","import {\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tEventDispatcher,\n\tFloat32BufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tMathUtils,\n\tObject3D,\n\tSphere,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _m1 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\n\nfunction Geometry() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n this.normals = [];\n this.uvs = [];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\tthis.morphNormalsReady = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n return vertices;\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\tlet vertexNormals = tmpGeo.computeVertexNormals();\n\n if (vertexNormals && vertexNormals.length > 0) {\n this.morphTargets[i].normals = new Array( this.vertices.length );\n\n for ( let v = 0; v < vertexNormals.length; v ++ ) {\n \n this.morphTargets[i].normals[ v ] = vertexNormals[v].clone();\n \n }\n }\n\n\t\t\t// store morph normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n this.morphNormalsReady = true;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet normalMatrix;\n\t\tconst vertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tconst face = faces2[ i ];\n\t\t\tlet normal, color;\n\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tconst diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tconst vertices = source.vertices;\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tconst colors = source.colors;\n\n\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tconst faces = source.faces;\n\n\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\n\tcomputeGroups( ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = this.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\treturn groups;\n\n\t},\n\n\ttoBufferGeometry: function () {\n\n\t\tconst geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tbuffergeometry.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n toIndexedBufferGeometry: function () {\n\n\t\t//const geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( this.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( this.vertices ) );\n\n\t\tif ( this.normals.length > 0 ) {\n\t\t\tconst normals = new Float32Array( this.normals.length );\n let buffer = new BufferAttribute( normals, 3 ).copyArray( this.normals );\n\t\t\tbuffergeometry.setAttribute( 'normal', buffer);\n\t\t}\n if ( this.uvs.length > 0 && this.uvs[0].length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( this.uvs[0].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyArray( this.uvs[0] ) );\n\t\t}\n\n\t\tif ( this.uvs.length > 1 && this.uvs[1].length > 0 ) {\n\t\t\tconst uvs2 = new Float32Array( this.uvs[1].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyArray( this.uvs[1] ) );\n\t\t}\n\n if ( this.colors.length > 0) {\n\n const colorArray = [];\n for (let i = 0 ; i < this.colors.length; i++) {\n colorArray.push(new Color( this.colors[ i ] ));\n }\n const colors = new Float32Array( colorArray.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( colorArray ) );\n\n } else {\n\n const colorsArray = new Float32Array( this.vertices.length * 3 );\n for (let i = 0; i < this.vertices.length * 3; i++) {\n colorsArray[i] = 1.0;\n }\n buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ) );\n \n }\n\n if (this.faces.length > 0) {\n\n let colors = [];\n\n let indices = [];\n\n for (let i = 0 ; i < this.faces.length; i++) {\n\n indices.push(this.faces[i].a, this.faces[i].b, this.faces[i].c);\n\n const vertexColors = this.faces[i].vertexColors;\n \n if ( vertexColors.length === 3 ) {\n \n colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n \n } else {\n \n const color = this.faces[i].color;\n \n colors.push( color, color, color );\n \n }\n\n }\n\n // if ( colors.length > 0 ) {\n\n// const colorsArray = new Float32Array( colors.length * 3 );\n// buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ).copyColorsArray( colors ) );\n \n// }\n\n buffergeometry.setIndex( indices );\n\n buffergeometry.groups = this.computeGroups();\n\n }\n\n\t\t// morphs\n\n if (this.morphTargets.length > 0) {\n\n\t\t\tconst array = [];\n const normalsArray = [];\n\n\t\t\tfor ( let i = 0, l = this.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = this.morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.vertices.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.vertices ) );\n\n if (morphTarget.normals) {\n\n\n const attribute = new Float32BufferAttribute( morphTarget.normals.length * 3, 3 );\n attribute.name = morphTarget.name;\n\n normalsArray.push( attribute.copyVector3sArray( morphTarget.normals ) );\n \n }\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes.position = array;\n buffergeometry.morphAttributes.normal = normalsArray;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( this.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( this.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( this.skinIndices ) );\n\n\t\t}\n\n\t\tif ( this.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( this.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( this.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = this.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = this.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nGeometry.createBufferGeometryFromObject = function ( object ) {\n\n\tlet buffergeometry = new BufferGeometry();\n\n\tconst geometry = object.geometry;\n\n\tif ( object.isPoints || object.isLine ) {\n\n\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\tbuffergeometry.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\tbuffergeometry.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\tbuffergeometry.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t} else if ( object.isMesh ) {\n\n\t\tbuffergeometry = geometry.toBufferGeometry();\n\n\t}\n\n\treturn buffergeometry;\n\n};\n\nclass DirectGeometry {\n\n\tconstructor() {\n\n\t\tthis.vertices = [];\n\t\tthis.normals = [];\n\t\tthis.colors = [];\n\t\tthis.uvs = [];\n\t\tthis.uvs2 = [];\n\n\t\tthis.groups = [];\n\n\t\tthis.morphTargets = {};\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\t// this.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tcomputeGroups( geometry ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t}\n\n\tfromGeometry( geometry ) {\n\n\t\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Face3 {\n\n\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\tthis.materialIndex = materialIndex;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { Face3, Geometry };\n","const THREE = require('three');\n\nfunction resolveURL(url) {\n\tlet actualURL = url;\n\tconst prefix = (require(\"./zinc\").modelPrefix);\n\t\n\tif (prefix) {\n\t\tif (prefix[prefix.length -1] != '/')\n\t\t\tprefix = prefix + '/';\n\t\tconst r = new RegExp('^(?:[a-z]+:)?//', 'i');\n\t\tif (!r.test(url)) {\n\t\t\tactualURL = prefix + url;\n\t\t}\n\t}\n\t\n\treturn actualURL;\n}\n\n//Convenient function\nfunction loadExternalFile(url, data, callback, errorCallback) {\n // Set up an asynchronous request\n const request = new XMLHttpRequest();\n request.open('GET', resolveURL(url), true);\n\n // Hook the event that gets called as the request progresses\n request.onreadystatechange = () => {\n // If the request is \"DONE\" (completed or failed)\n if (request.readyState == 4) {\n // If we got HTTP status 200 (OK)\n if (request.status == 200) {\n callback(request.responseText, data)\n } else { // Failed\n errorCallback(url);\n }\n }\n };\n\n request.send(null); \n}\n\nfunction loadExternalFiles(urls, callback, errorCallback) {\n const numUrls = urls.length;\n let numComplete = 0;\n const result = [];\n\n // Callback for a single file\n function partialCallback(text, urlIndex) {\n result[urlIndex] = text;\n numComplete++;\n\n // When all files have downloaded\n if (numComplete == numUrls) {\n callback(result);\n }\n }\n\n for (let i = 0; i < numUrls; i++) {\n \tloadExternalFile(urls[i], i, partialCallback, errorCallback);\n }\n}\n\n\n//Get the colours at index\nexports.getColorsRGB = (colors, index) => {\n const index_in_colors = Math.floor(index/3);\n const remainder = index%3;\n let hex_value = 0;\n if (remainder == 0)\n {\n hex_value = colors[index_in_colors].r;\n }\n else if (remainder == 1)\n {\n hex_value = colors[index_in_colors].g;\n }\n else if (remainder == 2)\n {\n hex_value = colors[index_in_colors].b;\n }\n const mycolor = new THREE.Color(hex_value);\n return [mycolor.r, mycolor.g, mycolor.b];\n}\n\n\nexports.copyMorphColorsToBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( var i = 0, l = morphColors.length; i < l; i ++ ) {\n let morphColor = morphColors[ i ];\n let colorArray = [];\n\t\t for ( var j = 0; j < geometry.faces.length; j ++ ) {\n let face = geometry.faces[j];\n let color = getColorsRGB(morphColor.colors, face.a);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.b);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.c);\n colorArray.push(color[0], color[1], color[2]);\n }\n var attribute = new THREE.Float32BufferAttribute( geometry.faces.length * 3 * 3, 3 );\n attribute.name = morphColor.name;\n array.push( attribute.copyArray( colorArray ) );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n }\n\n\n exports.copyMorphColorsToIndexedBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( let i = 0, l = morphColors.length; i < l; i ++ ) {\n const morphColor = morphColors[ i ];\n const colorArray = [];\n\t\t for ( let j = 0; j < morphColor.colors.length * 3; j ++ ) {\n let color = getColorsRGB(morphColor.colors, j);\n colorArray.push(color[0], color[1], color[2]);\n }\n const attribute = new THREE.Float32BufferAttribute( colorArray, 3 );\n attribute.name = morphColor.name;\n array.push( attribute );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n }\n\n exports.mergeVertices = ( geometry, tolerance = 1e-4 ) => {\n\n tolerance = Math.max( tolerance, Number.EPSILON );\n\n // Generate an index buffer if the geometry doesn't have one, or optimize it\n // if it's already available.\n var hashToIndex = {};\n var indices = geometry.getIndex();\n var positions = geometry.getAttribute( 'position' );\n var vertexCount = indices ? indices.count : positions.count;\n\n // next value for triangle indices\n var nextIndex = 0;\n\n // attributes and new attribute arrays\n var attributeNames = Object.keys( geometry.attributes );\n var attrArrays = {};\n var morphAttrsArrays = {};\n var newIndices = [];\n var getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\n // initialize the arrays\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n var name = attributeNames[ i ];\n\n attrArrays[ name ] = [];\n\n var morphAttr = geometry.morphAttributes[ name ];\n if ( morphAttr ) {\n\n morphAttrsArrays[ name ] = new Array( morphAttr.length ).fill().map( () => [] );\n\n }\n\n }\n\n // convert the error tolerance to an amount of decimal places to truncate to\n var decimalShift = Math.log10( 1 / tolerance );\n var shiftMultiplier = Math.pow( 10, decimalShift );\n for ( var i = 0; i < vertexCount; i ++ ) {\n\n var index = indices ? indices.getX( i ) : i;\n\n // Generate a hash for the vertex attributes at the current index 'i'\n var hash = '';\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var itemSize = attribute.itemSize;\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n // double tilde truncates the decimal value\n hash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * shiftMultiplier ) },`;\n\n }\n\n }\n\n // Add another reference to the vertex if it's already\n // used by another index\n if ( hash in hashToIndex ) {\n\n newIndices.push( hashToIndex[ hash ] );\n\n } else {\n\n // copy data to the new index in the attribute arrays\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var morphAttr = geometry.morphAttributes[ name ];\n var itemSize = attribute.itemSize;\n var newarray = attrArrays[ name ];\n var newMorphArrays = morphAttrsArrays[ name ];\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n var getterFunc = getters[ k ];\n newarray.push( attribute[ getterFunc ]( index ) );\n\n if ( morphAttr ) {\n\n for ( var m = 0, ml = morphAttr.length; m < ml; m ++ ) {\n\n newMorphArrays[ m ].push( morphAttr[ m ][ getterFunc ]( index ) );\n\n }\n\n }\n\n }\n\n }\n\n hashToIndex[ hash ] = nextIndex;\n newIndices.push( nextIndex );\n nextIndex ++;\n\n }\n\n }\n\n // Generate typed arrays from new attribute arrays and update\n // the attributeBuffers\n const result = geometry.clone();\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n var name = attributeNames[ i ];\n var oldAttribute = geometry.getAttribute( name );\n var attribute;\n\n var buffer = new oldAttribute.array.constructor( attrArrays[ name ] );\n if ( oldAttribute.isInterleavedBufferAttribute ) {\n\n attribute = new THREE.BufferAttribute( buffer, oldAttribute.itemSize, oldAttribute.itemSize );\n\n } else {\n\n attribute = geometry.getAttribute( name ).clone();\n attribute.setArray( buffer );\n\n }\n\n result.setAttribute( name, attribute );\n\n // Update the attribute arrays\n if ( name in morphAttrsArrays ) {\n\n for ( var j = 0; j < morphAttrsArrays[ name ].length; j ++ ) {\n\n var morphAttribute = geometry.morphAttributes[ name ][ j ].clone();\n morphAttribute.setArray( new morphAttribute.array.constructor( morphAttrsArrays[ name ][ j ] ) );\n result.morphAttributes[ name ][ j ] = morphAttribute;\n\n }\n\n }\n\n }\n\n // Generate an index buffer typed array\n var cons = Uint8Array;\n if ( newIndices.length >= Math.pow( 2, 8 ) ) cons = Uint16Array;\n if ( newIndices.length >= Math.pow( 2, 16 ) ) cons = Uint32Array;\n\n var newIndexBuffer = new cons( newIndices );\n var newIndices = null;\n if ( indices === null ) {\n\n newIndices = new THREE.BufferAttribute( newIndexBuffer, 1 );\n\n } else {\n\n newIndices = geometry.getIndex().clone();\n newIndices.setArray( newIndexBuffer );\n\n }\n\n result.setIndex( newIndices );\n\n return result;\n\n}\n\nfunction PhongToToon(materialIn) {\n\tif (materialIn.isMeshPhongMaterial) {\n\t\tlet material = new THREE.MeshToonMaterial({\n\t\t\tcolor : materialIn.color.clone(),\n\t\t\tmorphTargets : materialIn.morphTargets,\n\t\t\tmorphNormals : materialIn.morphNormals,\n\t\t\tvertexColors : materialIn.vertexColors,\n\t\t\ttransparent : materialIn.transparent,\n\t\t\topacity : materialIn.opacity,\n\t\t\tside : materialIn.side\n\t\t});\n\t\tif (materialIn.map)\n\t\t\tmaterial.map = materialIn.map;\n\t\treturn material;\n\t}\n\n\treturn materialIn;\n}\n\n\nexports.resolveURL = resolveURL;\nexports.loadExternalFile = loadExternalFile;\nexports.loadExternalFiles = loadExternalFiles;\nexports.PhongToToon = PhongToToon;\n","var THREE = require('three');\nconst markerImage = new Image(128, 128);\nmarkerImage.src = require(\"../assets/mapMarker.svg\");\nconst texture = new THREE.Texture();\ntexture.image = markerImage;\ntexture.needsUpdate = true;\nconst size = [0.015, 0.02, 1];\n\n//Marker - used to indicate there is a \nconst Marker = function(zincObject) {\n (require('./zincObject').ZincObject).call(this);\n this.texture = texture;\n let spriteMaterial = undefined;\n let sprite = undefined;\n this.morph = new THREE.Group();\n this.parent = zincObject;\n this.isMarker = true;\n let enabled = false;\n let vector = new THREE.Vector3();\n\n\tlet initialise = () => {\n spriteMaterial = new THREE.SpriteMaterial({\n map: texture,\n alphaTest: 0.5,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n sizeAttenuation: false\n }); \n sprite = new THREE.Sprite(spriteMaterial);\n sprite.center.set(0.5, 0);\n this.morph.add(sprite);\n this.morph.position.set(0, 0, 0);\n this.morph.renderOrder = 10000;\n sprite.scale.set(size[0], size[1], size[2]);\n sprite.userData = this;\n }\n\n this.updateVisual = (min, max) => {\n let scale = 1;\n let opacity = 1;\n let porportion = 0;\n if (min !== max) {\n porportion = (1 - (vector.z - min) / (max - min));\n scale = 0.5 + porportion * 0.5;\n opacity = 0.6 + porportion * 0.4;\n }\n sprite.material.opacity = opacity;\n this.setSpriteSize(scale);\n }\n\n this.updateNDC = camera => {\n vector.copy(this.morph.position);\n vector.project(camera);\n vector.z = Math.min(Math.max(vector.z, 0), 1);\n return vector.z;\n }\n\n this.setPosition = (x, y, z) => {\n this.morph.position.set(x, y, z);\n }\n\n this.setSpriteSize = size => {\n sprite.scale.set(0.015, 0.02, 1);\n sprite.scale.multiplyScalar(size);\n }\n\n this.isEnabled = () => {\n return enabled;\n }\n\n this.enable = () => {\n enabled = true;\n this.morph.visible = true;\n }\n \n this.disable = () => {\n enabled = false;\n this.morph.visible = false;\n }\n\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}\n\nMarker.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Marker = Marker;\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzY1IDU2MCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzY1IDU2MCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBmaWxsPSIjMDBBRUVGIiBkPSJNMTgyLjksNTUxLjdjMCwwLjEsMC4yLDAuMywwLjIsMC4zUzM1OC4zLDI4MywzNTguMywxOTQuNmMwLTEzMC4xLTg4LjgtMTg2LjctMTc1LjQtMTg2LjkNCgkJQzk2LjMsNy45LDcuNSw2NC41LDcuNSwxOTQuNmMwLDg4LjQsMTc1LjMsMzU3LjQsMTc1LjMsMzU3LjRTMTgyLjksNTUxLjcsMTgyLjksNTUxLjd6IE0xMjIuMiwxODcuMmMwLTMzLjYsMjcuMi02MC44LDYwLjgtNjAuOA0KCQljMzMuNiwwLDYwLjgsMjcuMiw2MC44LDYwLjhTMjE2LjUsMjQ4LDE4Mi45LDI0OEMxNDkuNCwyNDgsMTIyLjIsMjIwLjgsMTIyLjIsMTg3LjJ6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\"","exports.augmentMorphColor = function() {\n return function(shader) {\n shader.vertexShader = shader.vertexShader.replace(\n '#include <color_pars_vertex>',\n [\n\t 'varying vec3 vColor;',\n 'attribute vec3 morphColor0;',\n 'attribute vec3 morphColor1;'\n ].join( '\\n' )\n );\n shader.vertexShader = shader.vertexShader.replace(\n '#include <color_vertex>',\n [\n 'vColor.xyz = color.xyz;',\n '#ifdef USE_MORPHTARGETS',\n 'vColor = morphColor0 * morphTargetInfluences[ 0 ];',\n 'vColor += morphColor1 * morphTargetInfluences[ 1 ];',\n '#endif'\n ].join( '\\n' )\n );\n };\n}\n","const THREE = require('three');\n\n/**\n * Zinc representation of glyph graphic, it contains the colours, \n * geometry and transformation of the glyph.\n * \n * @param {THREE.Geometry} geometry - Geometry of the glyph.\n * @param {THREE.material} materialIn - Material of the glyph.\n * @param {Number} idIn - Id of the glyph.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Glyph}\n */\nconst Glyph = function(geometry, materialIn, idIn, glyphsetIn) {\n (require('./zincObject').ZincObject).call(this);\n\tlet material = undefined;\n\tif (materialIn) {\n\t\tmaterial = materialIn.clone();\n\t\tmaterial.vertexColors = THREE.FaceColors;\n\t}\n\tconst parent = glyphsetIn;\n\tthis.id = idIn;\n\tlet label = undefined;\n\tlet labelString = undefined;\n\tconst group = new THREE.Group();\n\tthis.isGlyph = true;\n\t\n\tthis.fromMesh = meshIn => {\n\t\tif (meshIn && meshIn.isMesh) {\n\t\t\tthis.morph = meshIn.clone();\n\t\t\tthis.morph.userData = this;\n\t\t\tgroup.add(this.morph);\n\t\t\treturn true;\n\t\t} \n\t\treturn false;\n\t}\n\t\n\tif (geometry && material) {\n\t\tthis.fromMesh(new THREE.Mesh( geometry, material ));\n\t}\n\t\n\tthis.getGlyphset = function() {\n\t\treturn parent;\n\t}\n\t\n\tthis.setLabel = text => {\n\t\tif (text && (typeof text === 'string' || text instanceof String)) {\n\t\t\tlabelString = text;\n\t\t\tif (this.morph)\n this.morph.name = text;\n\t\t}\n\t\tif (label)\n\t\t\tthis.showLabel();\n\t}\t\n\t\n\tthis.showLabel = (colour) => {\n\t if (label) {\n\t\t position = label.getPosition();\n\t\t group.remove(label.getSprite());\n\t\t label.dispose();\n\t\t label = undefined;\n }\n\t if (labelString && (typeof labelString === 'string' || labelString instanceof String)) {\n\t\t let position = [0, 0, 0];\n\t label = new (require('./label').Label)(labelString, colour);\n\t label.setPosition(position[0], position[1], position[2]);\n\t group.add(label.getSprite());\n\t }\n\t}\n\t\n\t/**\n\t * Get the group containing the label and mesh.\n\t * @return {THREE.Group}\n\t */\n\tthis.getGroup = () => {\n\t\treturn group;\n\t}\n\t\n\t/**\n\t * Get the label of this glyph\n\t * @return {Label}\n\t */\n\tthis.getLabel = () => {\n\t\treturn labelString;\n\t}\n \n\t/**\n\t * Get the mesh of this glyph.\n\t * @return {THREE.Mesh}\n\t */\n\tthis.getMesh = () => {\n\t\treturn this.morph;\n }\n\n\t/**\n\t * Set the transformation of this glyph.\n\t * @param {Array} position - Three components vectors containing position of the\n\t * transformation.\n\t * @param {Array} axis1 - Three components vectors containing axis1 rotation of the\n\t * transformation.\n\t * @param {Array} axis2 - Three components vectors containing axis2 rotation of the\n\t * transformation.\n\t * @param {Array} position - Three components vectors containing axis3 rotation of the\n\t * transformation.\n\t */\n\tthis.setTransformation = (position, axis1, axis2, axis3) => {\n if (this.morph) {\n this.morph.matrix.elements[0] = axis1[0];\n this.morph.matrix.elements[1] = axis1[1];\n this.morph.matrix.elements[2] = axis1[2];\n this.morph.matrix.elements[3] = 0.0;\n this.morph.matrix.elements[4] = axis2[0];\n this.morph.matrix.elements[5] = axis2[1];\n this.morph.matrix.elements[6] = axis2[2];\n this.morph.matrix.elements[7] = 0.0;\n this.morph.matrix.elements[8] = axis3[0];\n this.morph.matrix.elements[9] = axis3[1];\n this.morph.matrix.elements[10] = axis3[2];\n this.morph.matrix.elements[11] = 0.0;\n this.morph.matrix.elements[12] = position[0];\n this.morph.matrix.elements[13] = position[1];\n this.morph.matrix.elements[14] = position[2];\n this.morph.matrix.elements[15] = 1.0;\n this.morph.matrixAutoUpdate = false;\n }\n\t\tif (label)\n\t\t label.setPosition(position[0], position[1], position[2]);\n\t}\n \n this.setColour = (color) => {\n if (label)\n label.setColour(color);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n }\n\n\t/**\n\t * Clear and free its memory.\n\t */\n\tthis.dispose = () => {\n\t if (this.material)\n\t this.material.dispose();\n\t\tthis.morph = undefined;\n\t}\n}\n\nGlyph.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyph = Glyph;\n","const SpriteText = require('three-spritetext').default;\n\nexports.Label = function ( textIn, colour ) {\n let text = textIn;\n let sprite = undefined;\n if (colour)\n sprite = new SpriteText(text, 0.015, colour.getStyle());\n else\n sprite = new SpriteText(text, 0.015);\n sprite.material.sizeAttenuation = false;\n sprite.center.x = -0.05;\n sprite.center.y = 0;\n\n this.getPosition = () => {\n\t if (sprite)\n\t\t return [sprite.position.x, sprite.position.y, sprite.position.z];\n\t return [0, 0, 0];\n }\n \n//now set the position at the correct 3D space \n this.setPosition = (x, y, z) => {\n if (sprite)\n sprite.position.set(x, y, z);\n }\n\n this.setColour = colour => {\n sprite.color = colour.getStyle();\n }\n \n //scale up the texture\n this.setScale = scaling => {\n if (sprite && scaling > 0.0) \n sprite.scale.set( scaling, scaling, 1.0 );\n }\n \n this.dispose = () => {\n sprite.dispose();\n }\n \n this.getSprite = () => {\n return sprite;\n }\n \n this.getString = () => {\n\t return text;\n }\n\n};\n\n\n\n","module.exports = require(\"three-spritetext\");","const THREE = require('three');\nconst JSONLoader = require('../loader').JSONLoader;\n\n/**\n * This is a container of {@link Zinc.Glyph} and their graphical properties \n * including transformations, colors, number of time steps, duration of animations\n * and group name. Please note that all glyphs in the glyphset share the same geometry\n * however they may have different transformations.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Glyphset}\n */\nconst Glyphset = function () {\n (require('./zincObject').ZincObject).call(this);\n const glyphList = [];\n let axis1s = undefined;\n let axis2s = undefined;\n let axis3s = undefined;\n let positions = undefined;\n let scales = undefined;\n let colors = undefined;\n let labels = undefined;\n let numberOfTimeSteps = 0;\n let numberOfVertices = 0;\n let baseSize = [0, 0, 0];\n let offset = [0, 0, 0];\n let scaleFactors = [0, 0, 0];\n let repeat_mode = \"NONE\";\n this.ready = false;\n let morphColours = false;\n let morphVertices = false;\n this.isGlyphset = true;\n let _transformMatrix = new THREE.Matrix4();\n const _bot_colour = new THREE.Color();\n const _top_colour = new THREE.Color();\n const _boundingBox1 = new THREE.Box3();\n const _boundingBox2 = new THREE.Box3();\n const _boundingBox3 = new THREE.Box3();\n const _points = [];\n for (let i = 0; i < 8; i++) {\n _points[i] = new THREE.Vector3();\n }\n\n\t/**\n\t * Get the {@link Three.Group} containing all of the glyphs' meshes.\n\t * @returns {Three.Group}\n\t */\n this.getGroup = () => {\n return this.morph;\n }\n\n\t/**\n\t * Copy glyphset data into this glyphset then load the glyph's geoemtry \n\t * with the provided glyphURL. FinishCallback will be called once\n\t * glyph is loaded.\n\t * \n\t * @param {Array} glyphsetData - contains the informations about the glyphs.\n\t * @param {String} glyphURL - URL to the geometry which will be applied to all\n\t * all the glyphs in the glyphset once loaded.\n\t * @param {Function} finishCallback - User's function to be called once glyph's\n\t * geometry is loaded.\n\t */\n this.load = (glyphsetData, glyphURL, finishCallback, isInline, displayLabels) => {\n axis1s = glyphsetData.axis1;\n axis2s = glyphsetData.axis2;\n axis3s = glyphsetData.axis3;\n positions = glyphsetData.positions;\n scales = glyphsetData.scale;\n colors = glyphsetData.colors;\n labels = glyphsetData.label;\n morphColours = glyphsetData.metadata.MorphColours;\n morphVertices = glyphsetData.metadata.MorphVertices;\n numberOfTimeSteps = glyphsetData.metadata.number_of_time_steps;\n repeat_mode = glyphsetData.metadata.repeat_mode;\n numberOfVertices = glyphsetData.metadata.number_of_vertices;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfVertices = numberOfVertices * 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfVertices = numberOfVertices * 3;\n baseSize = glyphsetData.metadata.base_size;\n offset = glyphsetData.metadata.offset;\n scaleFactors = glyphsetData.metadata.scale_factors;\n const loader = new JSONLoader();\n this.geometry = new THREE.BufferGeometry();\n this.morph = new THREE.InstancedMesh(this.geometry, undefined, numberOfVertices);\n if (isInline) {\n var object = loader.parse(glyphURL);\n (meshloader(finishCallback, displayLabels))(object.geometry, object.materials);\n object.geometry.dispose();\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(glyphURL, meshloader(finishCallback, displayLabels));\n }\n }\n\n\t/**\n\t * Calculate the actual transformation value that can be applied \n\t * to the transformation matrix.\n\t * @returns {Array}\n\t */\n const resolve_glyph_axes = (point, axis1, axis2, axis3, scale) => {\n const return_arrays = [];\n if (repeat_mode == \"NONE\" || repeat_mode == \"MIRROR\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n const mirrored_axis1 = [0.0, 0.0, 0.0];\n const mirrored_axis2 = [0.0, 0.0, 0.0];\n const mirrored_axis3 = [0.0, 0.0, 0.0];\n const mirrored_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[j] + scale[j] * scaleFactors[j];\n }\n for (var j = 0; j < 3; j++) {\n final_axis1[j] = axis1[j] * axis_scale[0];\n final_axis2[j] = axis2[j] * axis_scale[1];\n final_axis3[j] = axis3[j] * axis_scale[2];\n final_point[j] = point[j]\n + offset[0] * final_axis1[j]\n + offset[1] * final_axis2[j]\n + offset[2] * final_axis3[j];\n if (repeat_mode == \"MIRROR\") {\n mirrored_axis1[j] = -final_axis1[j];\n mirrored_axis2[j] = -final_axis2[j];\n mirrored_axis3[j] = -final_axis3[j];\n mirrored_point[j] = final_point[j];\n if (scale[0] < 0.0) {\n // shift glyph origin to end of axis1 \n final_point[j] -= final_axis1[j];\n mirrored_point[j] -= mirrored_axis1[j];\n }\n }\n }\n /* if required, reverse axis3 to maintain right-handed coordinate system */\n if (0.0 > (\n final_axis3[0] * (final_axis1[1] * final_axis2[2] -\n final_axis1[2] * final_axis2[1]) +\n final_axis3[1] * (final_axis1[2] * final_axis2[0] -\n final_axis1[0] * final_axis2[2]) +\n final_axis3[2] * (final_axis1[0] * final_axis2[1] -\n final_axis1[1] * final_axis2[0]))) {\n final_axis3[0] = -final_axis3[0];\n final_axis3[1] = -final_axis3[1];\n final_axis3[2] = -final_axis3[2];\n }\n return_arrays.push([final_point, final_axis1, final_axis2, final_axis3]);\n if (repeat_mode == \"MIRROR\") {\n if (0.0 > (\n mirrored_axis3[0] * (mirrored_axis1[1] * mirrored_axis2[2] -\n mirrored_axis1[2] * mirrored_axis2[1]) +\n mirrored_axis3[1] * (mirrored_axis1[2] * mirrored_axis2[0] -\n mirrored_axis1[0] * mirrored_axis2[2]) +\n mirrored_axis3[2] * (mirrored_axis1[0] * mirrored_axis2[1] -\n mirrored_axis1[1] * mirrored_axis2[0]))) {\n mirrored_axis3[0] = -mirrored_axis3[0];\n mirrored_axis3[1] = -mirrored_axis3[1];\n mirrored_axis3[2] = -mirrored_axis3[2];\n }\n return_arrays.push([mirrored_point, mirrored_axis1, mirrored_axis2, mirrored_axis3]);\n }\n }\n else if (repeat_mode == \"AXES_2D\" || repeat_mode == \"AXES_3D\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[0] + scale[j] * scaleFactors[0];\n }\n for (var j = 0; j < 3; j++) {\n final_point[j] = point[j]\n + offset[0] * axis_scale[0] * axis1[j]\n + offset[1] * axis_scale[1] * axis2[j]\n + offset[2] * axis_scale[2] * axis3[j];\n }\n const number_of_glyphs = (glyph_repeat_mode == \"AXES_2D\") ? 2 : 3;\n for (let k = 0; k < number_of_glyphs; k++) {\n let use_axis1, use_axis2;\n const use_scale = scale[k];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n if (k == 0) {\n use_axis1 = axis1;\n use_axis2 = axis2;\n }\n else if (k == 1) {\n use_axis1 = axis2;\n use_axis2 = (glyph_repeat_mode == \"AXES_2D\") ? axis1 : axis3;\n }\n else // if (k == 2)\n {\n use_axis1 = axis3;\n use_axis2 = axis1;\n }\n const final_scale1 = baseSize[0] + use_scale * scaleFactors[0];\n final_axis1[0] = use_axis1[0] * final_scale1;\n final_axis1[1] = use_axis1[1] * final_scale1;\n final_axis1[2] = use_axis1[2] * final_scale1;\n final_axis3[0] = final_axis1[1] * use_axis2[2] - use_axis2[1] * final_axis1[2];\n final_axis3[1] = final_axis1[2] * use_axis2[0] - use_axis2[2] * final_axis1[0];\n final_axis3[2] = final_axis1[0] * use_axis2[1] - final_axis1[1] * use_axis2[0];\n let magnitude = Math.sqrt(final_axis3[0] * final_axis3[0] + final_axis3[1] * final_axis3[1] + final_axis3[2] * final_axis3[2]);\n if (0.0 < magnitude) {\n let scaling = (baseSize[2] + use_scale * scaleFactors[2]) / magnitude;\n if ((repeat_mode == \"AXES_2D\") && (k > 0)) {\n scaling *= -1.0;\n }\n final_axis3[0] *= scaling;\n final_axis3[1] *= scaling;\n final_axis3[2] *= scaling;\n }\n\n final_axis2[0] = final_axis3[1] * final_axis1[2] - final_axis1[1] * final_axis3[2];\n final_axis2[1] = final_axis3[2] * final_axis1[0] - final_axis1[2] * final_axis3[0];\n final_axis2[2] = final_axis3[0] * final_axis1[1] - final_axis3[1] * final_axis1[0];\n magnitude = Math.sqrt(final_axis2[0] * final_axis2[0] + final_axis2[1] * final_axis2[1] + final_axis2[2] * final_axis2[2]);\n if (0.0 < magnitude) {\n var scaling = (baseSize[1] + use_scale * scaleFactors[1]) / magnitude;\n final_axis2[0] *= scaling;\n final_axis2[1] *= scaling;\n final_axis2[2] *= scaling;\n }\n return_arrays.push([final_point, final_axis1, final_axis2, final_axis3])\n }\n }\n return return_arrays;\n };\n\n\t/**\n\t * Update transformation for each of the glyph in this glyphset.\n\t */\n const updateGlyphsetTransformation = (\n current_positions,\n current_axis1s,\n current_axis2s,\n current_axis3s,\n current_scales\n ) => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfPositions = current_positions.length / 3;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n const current_position = [current_positions[current_index], current_positions[current_index + 1],\n current_positions[current_index + 2]];\n const current_axis1 = [current_axis1s[current_index], current_axis1s[current_index + 1],\n current_axis1s[current_index + 2]];\n const current_axis2 = [current_axis2s[current_index], current_axis2s[current_index + 1],\n current_axis2s[current_index + 2]];\n const current_axis3 = [current_axis3s[current_index], current_axis3s[current_index + 1],\n current_axis3s[current_index + 2]];\n const current_scale = [current_scales[current_index], current_scales[current_index + 1],\n current_scales[current_index + 2]];\n const arrays = resolve_glyph_axes(current_position, current_axis1, current_axis2,\n current_axis3, current_scale);\n if (arrays.length == numberOfGlyphs) {\n for (let j = 0; j < numberOfGlyphs; j++) {\n _transformMatrix.elements[0] = arrays[j][1][0];\n _transformMatrix.elements[1] = arrays[j][1][1];\n _transformMatrix.elements[2] = arrays[j][1][2];\n _transformMatrix.elements[3] = 0.0;\n _transformMatrix.elements[4] = arrays[j][2][0];\n _transformMatrix.elements[5] = arrays[j][2][1];\n _transformMatrix.elements[6] = arrays[j][2][2];\n _transformMatrix.elements[7] = 0.0;\n _transformMatrix.elements[8] = arrays[j][3][0];\n _transformMatrix.elements[9] = arrays[j][3][1];\n _transformMatrix.elements[10] = arrays[j][3][2];\n _transformMatrix.elements[11] = 0.0;\n _transformMatrix.elements[12] = arrays[j][0][0];\n _transformMatrix.elements[13] = arrays[j][0][1];\n _transformMatrix.elements[14] = arrays[j][0][2];\n _transformMatrix.elements[15] = 1.0;\n this.morph.setMatrixAt(current_glyph_index, _transformMatrix);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setTransformation(arrays[j][0], arrays[j][1],\n arrays[j][2], arrays[j][3]);\n current_glyph_index++;\n }\n }\n }\n this.morph.instanceMatrix.needsUpdate = true;\n };\n\n\t/**\n\t * Update colour for each of the glyph in this glyphset.\n\t */\n const updateGlyphsetHexColors = current_colors => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfColours = current_colors.length;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfColours; i++) {\n const hex_values = current_colors[i];\n for (let j = 0; j < numberOfGlyphs; j++) {\n _bot_colour.setHex(hex_values)\n this.morph.setColorAt(current_glyph_index, _bot_colour);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setColour(_bot_colour);\n current_glyph_index++;\n }\n }\n this.morph.instanceColor.needsUpdate = true;\n };\n\n\t/**\n\t * Update the current states of the glyphs in this glyphset, this includes transformation and\n\t * colour for each of them. This is called when glyphset and glyphs are initialised and whenever\n\t * the internal time has been updated.\n\t */\n const updateMorphGlyphsets = () => {\n let current_positions = [];\n let current_axis1s = [];\n let current_axis2s = [];\n let current_axis3s = [];\n let current_scales = [];\n let current_colors = [];\n const current_time = this.inbuildTime / this.duration * (numberOfTimeSteps - 1);\n const bottom_frame = Math.floor(current_time);\n const proportion = 1 - (current_time - bottom_frame);\n const top_frame = Math.ceil(current_time);\n if (morphVertices) {\n const bottom_positions = positions[bottom_frame.toString()];\n const top_positions = positions[top_frame.toString()];\n const bottom_axis1 = axis1s[bottom_frame.toString()];\n const top_axis1 = axis1s[top_frame.toString()];\n const bottom_axis2 = axis2s[bottom_frame.toString()];\n const top_axis2 = axis2s[top_frame.toString()];\n const bottom_axis3 = axis3s[bottom_frame.toString()];\n const top_axis3 = axis3s[top_frame.toString()];\n const bottom_scale = scales[bottom_frame.toString()];\n const top_scale = scales[top_frame.toString()];\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions.push(proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i]);\n current_axis1s.push(proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i]);\n current_axis2s.push(proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i]);\n current_axis3s.push(proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i]);\n current_scales.push(proportion * bottom_scale[i] + (1.0 - proportion) * top_scale[i]);\n }\n } else {\n current_positions = positions[\"0\"];\n current_axis1s = axis1s[\"0\"];\n current_axis2s = axis2s[\"0\"];\n current_axis3s = axis3s[\"0\"];\n current_scales = scales[\"0\"];\n }\n updateGlyphsetTransformation(current_positions, current_axis1s, current_axis2s, current_axis3s,\n current_scales);\n this.boundingBoxUpdateRequired = true;\n if (colors != undefined) {\n if (morphColours) {\n const bottom_colors = colors[bottom_frame.toString()];\n const top_colors = colors[top_frame.toString()];\n for (let i = 0; i < bottom_colors.length; i++) {\n _bot_colour.setHex(bottom_colors[i]);\n _top_colour.setHex(top_colors[i]);\n _bot_colour.setRGB(_bot_colour.r * proportion + _top_colour.r * (1 - proportion),\n _bot_colour.g * proportion + _top_colour.g * (1 - proportion),\n _bot_colour.b * proportion + _top_colour.b * (1 - proportion));\n current_colors.push(_bot_colour.getHex());\n }\n\t\t\t\t/*\n\t\t\t\tfor (var i = 0; i < bottom_colors.length; i++) {\n\t\t\t\t\tcurrent_colors.push(proportion * bottom_colors[i] + (1.0 - proportion) * top_colors[i]);\n\t\t\t\t}\n\t\t\t\t*/\n } else {\n current_colors = colors[\"0\"];\n }\n updateGlyphsetHexColors(current_colors);\n }\n current_positions = null;\n current_axis1s = null;\n current_axis2s = null;\n current_axis3s = null;\n current_scales = null;\n current_colors = null;\n };\n\n this.showLabel = () => {\n for (let i = 0; i < glyphList.length; i++) {\n glyphList[i].showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n }\n\n const createGlyphs = (displayLabels) => {\n if ((labels != undefined) && displayLabels) {\n for (let i = 0; i < numberOfVertices; i++) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, i, this);\n if (labels != undefined && labels[i] != undefined) {\n glyph.setLabel(labels[i]);\n }\n if (numberOfTimeSteps > 0) {\n glyph.setFrustumCulled(false);\n }\n glyphList[i] = glyph;\n this.morph.add(glyph.getGroup());\n }\n }\n if ((labels != undefined) && displayLabels) {\n this.showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n //Update the transformation of the glyphs.\n updateGlyphsetTransformation(positions[\"0\"], axis1s[\"0\"],\n axis2s[\"0\"], axis3s[\"0\"], scales[\"0\"]);\n //Update the color of the glyphs.\n if (colors != undefined) {\n updateGlyphsetHexColors(colors[\"0\"]);\n }\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n };\n\n this.addCustomGlyph = glyph => {\n if (glyph.isGlyph)\n glyphList.push(glyph);\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n this.addMeshAsGlyph = (mesh, id) => {\n if (mesh.isMesh) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, id, this);\n glyph.fromMesh(mesh);\n glyphList.push(glyph);\n this.morph.add(glyph.getGroup())\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n return glyph;\n }\n return undefined;\n }\n\n\t/**\n\t * A function which iterates through the list of glyphs and call the callback\n\t * function with the glyph as the argument.\n\t * @param {Function} callbackFunction - Callback function with the glyph\n\t * as an argument.\n\t */\n this.forEachGlyph = callbackFunction => {\n for (let i = 0; i < glyphList.length; i++) {\n callbackFunction(glyphList[i]);\n }\n }\n\n var meshloader = (finishCallback, displayLabels) => {\n return (geometry, materials) => {\n const tempGeometry = geometry.toBufferGeometry();\n this.geometry.copy(tempGeometry);\n this.geometry.computeBoundingSphere();\n this.geometry.computeBoundingBox();\n tempGeometry.dispose();\n if (materials && materials[0])\n this.morph.material = materials[0];\n createGlyphs(displayLabels);\n this.morph.name = this.groupName;\n this.morph.userData = this;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(this);\n };\n }\n\n /**\n * Get the index of the closest vertex to centroid.\n */\n this.getClosestVertexIndex = function () {\n let closestIndex = -1;\n if (this.morph && this.ready) {\n let center = new THREE.Vector3();\n this.getBoundingBox().getCenter(center);\n let current_positions = positions[\"0\"];\n const numberOfPositions = current_positions.length / 3;\n let position = new THREE.Vector3();\n let distance = -1;\n let currentDistance = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n position.set(current_positions[current_index],\n current_positions[current_index + 1],\n current_positions[current_index + 2]);\n currentDistance = center.distanceTo(position);\n if (distance == -1) {\n distance = currentDistance;\n closestIndex = i;\n } else if (distance > currentDistance) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n return closestIndex;\n }\n\n /**\n * Get the closest vertex to centroid.\n */\n this.getClosestVertex = function () {\n\n if (this.markerVertexIndex == -1) {\n this.markerVertexIndex = this.getClosestVertexIndex();\n }\n if (this.markerVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.markerVertexIndex]) {\n glyphList[this.markerVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.markerVertexIndex, _transformMatrix);\n position.setFromMatrixPosition(_transformMatrix);\n return position;\n }\n }\n\n return undefined;\n }\n\n this.applyMatrix4ToBox = (box1, box2, matrix) => {\n _points[0].set(box1.min.x, box1.min.y, box1.min.z).applyMatrix4(matrix); // 000\n _points[1].set(box1.min.x, box1.min.y, box1.max.z).applyMatrix4(matrix); // 001\n _points[2].set(box1.min.x, box1.max.y, box1.min.z).applyMatrix4(matrix); // 010\n _points[3].set(box1.min.x, box1.max.y, box1.max.z).applyMatrix4(matrix); // 011\n _points[4].set(box1.max.x, box1.min.y, box1.min.z).applyMatrix4(matrix); // 100\n _points[5].set(box1.max.x, box1.min.y, box1.max.z).applyMatrix4(matrix); // 101\n _points[6].set(box1.max.x, box1.max.y, box1.min.z).applyMatrix4(matrix); // 110\n _points[7].set(box1.max.x, box1.max.y, box1.max.z).applyMatrix4(matrix); // 111\n box2.setFromPoints(_points);\n }\n\n\n\t/**\n\t * Get the bounding box for the whole set of glyphs.\n\t * \n\t * @return {Three.Box3};\n\t */\n this.getBoundingBox = () => {\n if (this.morph && this.ready && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n _boundingBox1.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n for (let i = 0; i < numberOfVertices; i++) {\n this.morph.getMatrixAt(i, _transformMatrix);\n this.applyMatrix4ToBox(_boundingBox1, _boundingBox2, _transformMatrix);\n if (i == 0) {\n _boundingBox3.copy(_boundingBox2);\n } else {\n _boundingBox3.union(_boundingBox2);\n }\n }\n if (_boundingBox3) {\n this.cachedBoundingBox.copy(_boundingBox3);\n this.boundingBoxUpdateRequired = false;\n } else\n return undefined;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n\n\t/**\n\t * Set the local time of this glyphset.\n\t * \n\t * @param {Number} time - Can be any value between 0 to duration.\n\t */\n this.setMorphTime = time => {\n if (time > this.duration)\n this.inbuildTime = this.duration;\n else if (0 > time)\n this.inbuildTime = 0;\n else\n this.inbuildTime = time;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n if (morphVertices)\n this.markerUpdateRequired = true;\n }\n }\n\n /**\n * Check if the glyphset is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if ((numberOfTimeSteps > 0) && (morphColours || morphVertices))\n return true;\n return false;\n }\n\n this.getCurrentTime = () => {\n return this.inbuildTime;\n }\n\n\n\t/**\n\t * Clear this glyphset and its list of glyphs which will release them from the memory.\n\t */\n this.dispose = () => {\n for (let i = glyphList.length - 1; i >= 0; i--) {\n glyphList[i].dispose();\n }\n if (this.geometry)\n this.geometry.dispose();\n if (this.morph)\n this.morph.material.dispose();\n axis1s = undefined;\n axis2s = undefined;\n axis3s = undefined;\n positions = undefined;\n scales = undefined;\n colors = undefined;\n this.ready = false;\n this.groupName = undefined;\n }\n\n //Update the geometry and colours depending on the morph.\n this.render = (delta, playAnimation, options) => {\n if (playAnimation == true) {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration\n this.inbuildTime = targetTime;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n }\n }\n this.updateMarker(playAnimation, options);\n }\n}\n\nGlyphset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyphset = Glyphset;\n","var THREE = require('three');\n\nvar Loader = require('./three/Loader').Loader;\nvar LoaderUtils = THREE.LoaderUtils;\nvar AnimationClip = THREE.AnimationClip;\nvar Vector3 = THREE.Vector3;\nvar Vector4 = THREE.Vector4;\nvar Color = THREE.Color;\nvar Vector2 = THREE.Vector2;\nvar Face3 = require('./three/Geometry').Face3;\nvar Geometry = require('./three/Geometry').Geometry;\nvar FileLoader = THREE.FileLoader;\nvar DefaultLoadingManager = THREE.DefaultLoadingManager;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n if (json.uvs) {\n\n for ( i = 0; i < json.uvs.length; i ++ ) {\n\n geometry.uvs[i] = [];\n\n for ( let k = 0; k < json.uvs[i].length ; k++ ) {\n\n geometry.uvs[i][k] = json.uvs[i][k];\n\n }\n \n }\n \n }\n\n if (normals) {\n\n for ( i = 0; i < normals.length; i ++ ) {\n\n geometry.normals[i] = normals[i];\n\n }\n \n }\n\n if (colors) {\n\n for ( i = 0; i < colors.length; i ++ ) {\n\n geometry.colors[i] = colors[i];\n\n }\n \n }\n\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphNormals !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphNormals.length; i < l; i ++ ) {\n\n if (geometry.morphTargets[ i ]) {\n\n geometry.morphTargets[ i ].normals = [];\n\n var dstNormals = geometry.morphTargets[ i ].normals;\n var srcNormals = json.morphNormals[ i ].normals;\n\n for ( var v = 0, vl = srcNormals.length; v < vl; v += 3 ) {\n\n var normals = new Vector3();\n normals.x = srcNormals[ v ];\n normals.y = srcNormals[ v + 1 ] ;\n normals.z = srcNormals[ v + 2 ] ;\n\n dstNormals.push( normals );\n\n }\n\n geometry.morphNormalsReady = true;\n\n }\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined ) {\n\n\t\t\t\tvar i, l, c, cl, dstColors, srcColors, color;\n\n\t\t\t\tfor ( i = 0, l = json.morphColors.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphColors[ i ] = {};\n\t\t\t\t\tgeometry.morphColors[ i ].name = json.morphColors[ i ].name;\n\t\t\t\t\tgeometry.morphColors[ i ].colors = [];\n\n\t\t\t\t\tdstColors = geometry.morphColors[ i ].colors;\n\t\t\t\t\tsrcColors = json.morphColors[ i ].colors;\n\n\t\t\t\t\tfor ( c = 0, cl = srcColors.length; c < cl; c += 3 ) {\n\n\t\t\t\t\t\tcolor = new THREE.Color( 0xffaa00 );\n\t\t\t\t\t\tcolor.setRGB( srcColors[ c ], srcColors[ c + 1 ], srcColors[ c + 2 ] );\n\t\t\t\t\t\tdstColors.push( color );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\t\t\tgeometry.morphColors = [];\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, 'Anonymous' );\n\n\t\t\t\t\n\t\t\t\tif (json.materials[0].video) {\n\t\t\t\t\t\n\t\t\t\t\tvar fullPath = texturePath + json.materials[0].video;\n\t\t\t\t\t\n\t\t\t\t\tconst videoHandler = new (require('./videoHandler').VideoHandler)(fullPath);\n\t\t\t\t\t\n\t\t\t\t\tgeometry._video = videoHandler;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (materials && materials.length > 0) {\n\t\t\t\t\tif (json.materials[0].singleSided) {\n\t\t\t\t\t\tmaterials[0].side = THREE.FrontSide;\n\t\t\t\t\t} else if (json.materials[0].flipSided){\n\t\t\t\t\t\tmaterials[0].side = THREE.BackSide;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaterials[0].side = THREE.DoubleSide;\n }\n if (json.materials[0].specularCoef) {\n materials[0].shininess = Math.floor(json.materials[0].specularCoef / 3);\n }\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n\nexport { JSONLoader };\n","var THREE = require('three');\n\nimport {\n\tNoBlending,\n\tNormalBlending,\n\tAdditiveBlending,\n\tSubtractiveBlending,\n\tMultiplyBlending,\n\tCustomBlending,\n\n\tFaceColors,\n\tVertexColors,\n\n\tDoubleSide,\n\tBackSide,\n\n\tMirroredRepeatWrapping,\n RepeatWrapping,\n MathUtils,\n MaterialLoader,\n TextureLoader,\n Color\n} from 'three';\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = MathUtils.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: MathUtils.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\nexport { Loader };\n","var THREE = require('three');\n\n\n// Alan notes: pause video when stuck\n//VideoTexture is used for creating and updating a video projected onto a Three.js texture\nexports.VideoHandler = function(srcIn) {\n\n\tvar _this = this;\n\tthis.video = undefined;\n\tthis.videoTexture = undefined;\n\tvar src = srcIn;\n\tvar lastTime = 0;\n\tvar lastUpdate = 0;\n\tvar frameRate = 30;\n\tvar videoPlaneLoadedFlag = false;\n\tvar lastPlayPos = 0;\n\tvar currentPlayPos = 0;\n\tvar bufferingDetected = false;\n\t\n\tvar checkBuffering = function(delta, playAnimation) {\n\t currentPlayPos = _this.video.currentTime;\n\n\t // checking offset should be at most the check interval\n\t // but allow for some margin\n\t var offset = delta - 0.02;\n\n\t // if no buffering is currently detected,\n\t // and the position does not seem to increase\n\t // and the _this.video isn't manually paused...\n\t if (!bufferingDetected && (currentPlayPos < (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = true;\n\t }\n\n\t // if we were buffering but the _this.video has advanced,\n\t // then there is no buffering\n\t if (bufferingDetected && (currentPlayPos > (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = false;\n\t }\n\t lastPlayPos = currentPlayPos;\n\t}\n\n\tvar initialise = function(){\n\t\tif (document) {\n\t\t \t_this.video = document.createElement( 'video' );\n\t\t \t_this.video.crossOrigin = \"anonymous\";\n\t\t \t_this.video.src = src;\n\t\t \t_this.video.load();\n _this.video.loop = true;\n \n\t\t}\n\t}\n\n\tthis.setMorphTime = function(time, duration){\n\t\tvar actualTime = time / duration * _this.video.duration;\n\t\t_this.video.currentTime = actualTime;\n\t}\n\n\t// videoPlaneLoaded connects the video to the video texture once it has loaded\n\t this.getVideoDuration = function() {\n\t\t return _this.video.duration;\n\t}\n\n\tthis.createCanvasVideoTexture = function(){\n\t\t_this.videoTexture = new THREE.VideoTexture( _this.video );\n\t\t_this.videoTexture.minFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.magFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.format = THREE.RGBFormat;\n _this.video.currentTime = 0;\n\t\treturn _this.videoTexture;\n\t}\n\t\n\tthis.getCurrentTime = function(duration) {\n\t\tif (_this.video)\n\t\t\treturn duration * (_this.video.currentTime / _this.video.duration);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tthis.isReadyToPlay = function(){\n\t\t// video.readyState 3 means we have data to load for the current time and foreseeable future\n\t\tif (_this.video && _this.video.readyState >= 3){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}","const THREE = require('three');\nconst Points = require('../three/Points').Points;\n\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Geometry}\n */\nconst Pointset = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isPointset = true;\n\n /** Shape of the points is created using the function below */\n\tconst getCircularTexture = () => {\n\t\tvar image = new Image();\n\t\timage.src = require(\"../assets/disc.png\");\n\t\tconst texture = new THREE.Texture();\n\t\ttexture.image = image;\n\t\ttexture.needsUpdate = true;\n\t\treturn texture;\n\t}\n\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tconst texture = getCircularTexture();\n\t\t\tmaterialIn.map = texture;\n\t\t\tlet point = new Points(geometry, materialIn);\n\t\t\tthis.setMesh(point, options.localTimeEnabled, options.localMorphColour);\n\t\t}\t\n\t}\n\n\tthis.setSize = size => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.size = size;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\t\n\tthis.setSizeAttenuation = flag => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.sizeAttenuation = flag;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n}\n\nPointset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Pointset = Pointset;\n","import {\n\tBufferGeometry,\n\tMatrix4,\n Object3D,\n PointsMaterial,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n const drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n \n calculatePosition( this, positionAttribute, morphPosition, a );\n\n\t\t\t\t\ttestPoint( _position, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n \n calculatePosition( this, positionAttribute, morphPosition, i );\n\n\t\t\t\t\ttestPoint( _position, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction calculatePosition( object, position, morphPosition, a )\t{\n\n _position.fromBufferAttribute( position, a );\n\n const morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n const influence = morphInfluences[ i ];\n const morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n\n _morphA.addScaledVector( _tempA.sub( _position ), influence );\n\n }\n\n _position.add( _morphA );\n\n }\n\n}\n\nexport { Points };","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==\"","const THREE = require('three');\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst Lines = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isLines = true;\n\n\tthis.createLineSegment = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ])\n\t\t\t\tmaterialIn.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n let line = new (require(\"../three/line/LineSegments\").LineSegments)(geometry, materialIn);\n\t\t\tthis.setMesh(line, options.localTimeEnabled, options.localMorphColour);\n\t\t}\t\t\n\t}\n\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n}\n\nLines.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Lines = Lines;\n","import { Line } from './Line.js';\nimport {\n Float32BufferAttribute,\n\tVector3\n} from 'three';\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nexport { LineSegments };","import {\n BufferGeometry,\n Float32BufferAttribute,\n LineBasicMaterial,\n\tMatrix4,\n Object3D,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n const drawRange = geometry.drawRange;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n const b = index.getX( i + 1 );\n \n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, a, b );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, i, i+1 );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction calculatePosition( vStart, vEnd, object, position, morphPosition, a, b )\t{\n\n vStart.fromBufferAttribute( position, a );\n vEnd.fromBufferAttribute( position, b );\n\n var morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n _morphB.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n var influence = morphInfluences[ i ];\n var morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n _tempB.fromBufferAttribute( morphAttribute, b );\n\n _morphA.addScaledVector( _tempA.sub( vStart ), influence );\n _morphB.addScaledVector( _tempB.sub( vEnd ), influence );\n\n }\n\n vStart.add( _morphA );\n vEnd.add( _morphB );\n\n }\n\n}\n\nLine.prototype.isLine = true;\n\n\nexport { Line };","const THREE = require('three');\r\nconst ResizeSensor = require('css-element-queries/src/ResizeSensor');\r\n/**\r\n * Create a Zinc 3D renderer in the container provided.\r\n * The primary function of a Zinc 3D renderer is to display the current\r\n * scene (@link Zinc.Scene} set to the renderer and each scene may contain as \r\n * many geometries, glyphset and other primitives as the system can support.\r\n * Zinc.Renderer also allows additional scenes to be displayed.\r\n * \r\n * @param {Object} containerIn - Container to create the renderer on.\r\n * @class\r\n * @author Alan Wu\r\n * @return {Zinc.Renderer}\r\n */\r\nexports.Renderer = function (containerIn) {\r\n\r\n\tlet container = containerIn;\r\n\t\r\n\tconst stats = 0;\r\n\t\r\n\tlet renderer = undefined;\r\n\tlet currentScene = undefined;\r\n\r\n\t//myGezincGeometriestains a tuple of the threejs mesh, timeEnabled, morphColour flag, unique id and morph\r\n\tconst clock = new THREE.Clock(false);\r\n\tthis.playAnimation = true;\r\n /* default animation update rate, rate is 1000 and duration \r\n is default to 6000, 6s to finish a full animation */\r\n\tlet playRate = 1000;\r\n\tlet preRenderCallbackFunctions = [];\r\n let preRenderCallbackFunctions_id = 0;\r\n let postRenderCallbackFunctions = [];\r\n\tlet postRenderCallbackFunctions_id = 0;\r\n\tlet animated_id = undefined;\r\n\tlet cameraOrtho = undefined, sceneOrtho = undefined, logoSprite = undefined;\r\n\tlet sceneMap = [];\r\n\tlet additionalActiveScenes = [];\r\n\tlet scenesGroup = new THREE.Group();\r\n\tlet canvas = undefined;\r\n let sensor = undefined;\r\n let isRendering = false;\r\n\tconst _this = this;\r\n\tconst currentSize = [0, 0];\r\n\tconst currentOffset = [0, 0];\r\n\t\r\n\tthis.getDrawingWidth = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientWidth;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientWidth !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientWidth);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.width);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tthis.getDrawingHeight = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientHeight;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientHeight !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientHeight);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.height);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t/** \r\n\t * Call this to resize the renderer, this is normally call automatically.\r\n\t */\r\n\tthis.onWindowResize = () => {\r\n\t\tcurrentScene.onWindowResize();\r\n\t\tconst width = this.getDrawingWidth();\r\n\t\tconst height = this.getDrawingHeight();\r\n\t\tif (renderer != undefined) {\r\n\t\t\tlet rect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\trect = container.getBoundingClientRect();\r\n\t\t\t\trenderer.setSize(width, height);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (typeof canvas.getBoundingClientRect !== 'undefined') {\r\n\t\t\t\t\trect = canvas.getBoundingClientRect();\r\n\t\t\t\t\tcanvas.width = width;\r\n\t\t\t\t\tcanvas.height = height;\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (rect) {\r\n\t\t\t\tcurrentOffset[0] = rect.left;\r\n\t\t\t\tcurrentOffset[1] = rect.top;\r\n\t\t\t}\r\n\t\t\tconst target = new THREE.Vector2();\r\n\t\t\trenderer.getSize(target);\r\n\t\t\tcurrentSize[0] = target.x;\r\n\t\t\tcurrentSize[1] = target.y;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialise the renderer and its visualisations.\r\n\t */\r\n\tthis.initialiseVisualisation = parameters => {\r\n\t parameters = parameters || {};\r\n\t if (parameters['antialias'] === undefined) {\r\n let onMobile = false;\r\n try {\r\n if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\r\n onMobile = true;\r\n }\r\n }\r\n catch(err) {\r\n onMobile = false;\r\n }\r\n if (onMobile)\r\n parameters['antialias'] = false;\r\n else\r\n parameters['antialias'] = true;\r\n\t }\r\n\t if (parameters[\"canvas\"]) {\r\n\t\t container = undefined;\r\n\t\t canvas = parameters[\"canvas\"];\r\n\t }\r\n renderer = new THREE.WebGLRenderer(parameters);\r\n if (container !== undefined) {\r\n\t\t container.appendChild( renderer.domElement );\r\n }\r\n\t renderer.setClearColor( 0xffffff, 1);\r\n\t if (canvas && canvas.style) {\r\n\t\t canvas.style.height = \"100%\";\r\n\t\t canvas.style.width = \"100%\";\r\n }\r\n renderer.autoClear = false;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the current scene on display.\r\n\t * @return {Zinc.Scene};\r\n\t */\r\n\tthis.getCurrentScene = () => {\r\n\t\treturn currentScene;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current scene on display.\r\n\t * \r\n\t * @param {Zinc.Scene} sceneIn - The scene to be set, only scene created by this instance\r\n\t * of ZincRenderer is supported currently.\r\n\t */\r\n\tthis.setCurrentScene = sceneIn => {\r\n\t\tif (sceneIn) {\r\n\t\t\tthis.removeActiveScene(sceneIn);\r\n\t\t\tconst oldScene = currentScene;\r\n\t\t\tcurrentScene = sceneIn;\r\n\t\t\tif (oldScene) {\r\n\t\t\t\toldScene.setInteractiveControlEnable(false);\r\n\t\t\t}\r\n\t\t\tcurrentScene.setInteractiveControlEnable(true);\r\n\t\t\tcurrentScene.setAdditionalScenesGroup(scenesGroup);\r\n\t\t\tthis.onWindowResize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Return scene with the matching name if scene with that name has been created.\r\n\t * \r\n\t * @param {String} name - Name to match\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.getSceneByName = name => {\r\n\t\treturn sceneMap[name];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Create a new scene with the provided name if scene with the same name exists,\r\n\t * return undefined.\r\n\t * \r\n\t * @param {String} name - Name of the scene to be created.\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.createScene = name => {\r\n\t\tif (sceneMap[name] != undefined){\r\n\t\t\treturn undefined;\r\n\t\t} else {\r\n\t\t\tlet new_scene = undefined;\r\n\t\t\tif (canvas)\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(canvas, renderer);\r\n\t\t\telse\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(container, renderer);\r\n\t\t\tsceneMap[name] = new_scene;\r\n\t\t\tnew_scene.sceneName = name;\r\n\t\t\treturn new_scene;\r\n\t\t}\r\n\t}\r\n\t\r\n\tconst updateOrthoScene = () => {\r\n\t\tif (logoSprite != undefined) {\r\n\t\t\tconst material = logoSprite.material;\r\n\t\t\tif (material.map) {\r\n\t\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\t\tconst calculatedWidth = (width - material.map.image.width)/2;\r\n\t\t\t\tconst calculatedHeight = (-height + material.map.image.height)/2;\r\n\t\t\t\tlogoSprite.position.set(calculatedWidth, calculatedHeight, 1 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tconst updateOrthoCamera = () => {\r\n\t\tif (cameraOrtho != undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho.left = -width / 2;\r\n\t\t\tcameraOrtho.right = width / 2;\r\n\t\t\tcameraOrtho.top = height / 2;\r\n\t\t\tcameraOrtho.bottom = -height / 2;\r\n\t\t\tcameraOrtho.updateProjectionMatrix();\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Reset the viewport of the current scene to its original state.\r\n\t */\r\n\tthis.resetView = () => {\r\n\t\tcurrentScene.resetView();\r\n\t}\r\n\t\r\n\t/**\r\n\t * Adjust zoom distance to include all primitives in scene and also the additional scenes\r\n\t * but the lookat direction and up vectors will remain constant.\r\n\t */\r\n\tthis.viewAll = () => {\r\n\t\tif (currentScene) {\t\r\n\t\t\tconst boundingBox = currentScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\t const boundingBox2 = additionalActiveScenes[i].getBoundingBox();\r\n\t\t\t if (boundingBox2) {\r\n\t\t\t \tboundingBox.union(boundingBox2);\r\n\t\t\t }\r\n\t\t\t }\r\n\t\t\t\tcurrentScene.viewAllWithBoundingBox(boundingBox);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\r\n\t * without any of the metadata. Therefore, extra parameters should be provided. This should be\r\n\t * called from {@link Zinc.Scene}.\r\n\t * \r\n\t * @deprecated\r\n\t */\r\n\tthis.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\r\n\t\tcurrentScene.loadModelsURL(urls, colours, opacities, timeEnabled, morphColour, finishCallback);\r\n\t}\r\n\t\r\n\tconst loadView = viewData => {\r\n\t\tcurrentScene.loadView(viewData);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Load the viewport from an external location provided by the url. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * @param {String} URL - address to the file containing viewport information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadViewURL = url => {\r\n\t\tcurrentScene.loadViewURL(url);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy file format containing the viewport and its model file from an external \r\n\t * location provided by the url. Use the new metadata format with\r\n\t * {@link Zinc.Scene#loadMetadataURL} instead. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * \r\n\t * @param {String} URL - address to the file containing viewport and model information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\r\n\t\tcurrentScene.loadFromViewURL(jsonFilePrefix, finishCallback);\r\n\t}\r\n\t\r\n\tthis.updateDirectionalLight = () => {\r\n\t\tcurrentScene.updateDirectionalLight();\r\n\t}\r\n \r\n let runAnimation = () => {\r\n if (isRendering) {\r\n animated_id = requestAnimationFrame( runAnimation );\r\n this.render();\r\n } else {\r\n cancelAnimationFrame(animated_id);\r\n animated_id = undefined;\r\n }\r\n }\r\n\r\n\t/**\r\n\t * Stop the animation and renderer to get into the render loop.\r\n\t */\r\n\tthis.stopAnimate = () => {\r\n if (isRendering) {\r\n clock.stop();\r\n isRendering = false;\r\n }\r\n\t}\r\n\r\n\t/**\r\n\t * Start the animation and begin the rendering loop.\r\n\t */\r\n\tthis.animate = () => {\r\n if (!isRendering) {\r\n clock.start();\r\n isRendering = true;\r\n runAnimation();\r\n }\r\n\t}\r\n\r\n\tconst prevTime = Date.now();\r\n\t\r\n\t/**\r\n\t * Add a callback function which will be called everytime before the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPreRenderCallbackFunction = callbackFunction => {\r\n\t\tpreRenderCallbackFunctions_id = preRenderCallbackFunctions_id + 1;\r\n\t\tpreRenderCallbackFunctions[preRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn preRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePreRenderCallbackFunction = id => {\r\n\t\tif (id in preRenderCallbackFunctions) {\r\n \t\t\tdelete preRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n \r\n\t/**\r\n\t * Add a callback function which will be called everytime after the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPostRenderCallbackFunction = callbackFunction => {\r\n\t\tpostRenderCallbackFunctions_id = postRenderCallbackFunctions_id + 1;\r\n\t\tpostRenderCallbackFunctions[postRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn postRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePostRenderCallbackFunction = id => {\r\n\t\tif (id in postRenderCallbackFunctions) {\r\n \t\t\tdelete postRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.getPlayRate = () => {\r\n\t\treturn playRate;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current play rate, playrate affects how fast an animated object animates.\r\n\t * @param {Number} PlayRateIn - value to set the playrate to.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setPlayRate = playRateIn => {\r\n\t\tplayRate = playRateIn;\r\n\t}\r\n\t\r\n\tthis.getCurrentTime = () => {\r\n\t\treturn currentScene.getCurrentTime();\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setMorphsTime = time => {\r\n\t\tcurrentScene.setMorphsTime(time);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get {Zinc.Geoemtry} by its id. This should be called from {@link Zinc.Scene};\r\n\t * \r\n\t * @depreacted\r\n\t * @return {Zinc.Geometry}\r\n\t */\r\n\tthis.getZincGeometryByID = id => {\r\n\t\treturn currentScene.getZincGeometryByID(id);\r\n\t}\t\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the current scene.\r\n\t */\r\n\tthis.addToScene = object => {\r\n\t\tcurrentScene.addObject(object)\r\n\t}\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the ortho scene, objects added to the ortho scene are rendered in\r\n\t * normalised coordinates and overlay on top of current scene. \r\n\t * \r\n\t */\r\n\tthis.addToOrthoScene = object => {\r\n\t\tif (sceneOrtho == undefined)\r\n\t\t\tsceneOrtho = new THREE.Scene();\r\n\t\tif (cameraOrtho == undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho = new THREE.OrthographicCamera( -width / 2,\r\n\t\t\t\t\twidth / 2, height/ 2, -height / 2, 1, 10 );\r\n\t\t\tcameraOrtho.position.z = 10;\r\n\t\t}\r\n\t\tsceneOrtho.add(object)\r\n\t}\r\n\t\r\n\tconst createHUDSprites = logoSprite => {\r\n\t\treturn texture => {\r\n\t\t\ttexture.needsUpdate = true;\r\n\t\t\tconst material = new THREE.SpriteMaterial( { map: texture } );\r\n\t\t\tconst imagewidth = material.map.image.width;\r\n\t\t\tconst imageheight = material.map.image.height;\r\n\t\t\tlogoSprite.material = material;\r\n\t\t\tlogoSprite.scale.set( imagewidth, imageheight, 1 );\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tlogoSprite.position.set( (width - imagewidth)/2, (-height + imageheight)/2, 1 );\r\n\t\t\tthis.addToOrthoScene(logoSprite);\r\n\t\t};\r\n\t};\r\n\t\r\n\tthis.addLogo = () => {\r\n\t\tlogoSprite = new THREE.Sprite();\r\n\t\tconst logo = THREE.ImageUtils.loadTexture(\r\n\t\t\t\t\"images/abi_big_logo_transparent_small.png\", undefined, createHUDSprites(logoSprite));\r\n\t}\r\n\t\r\n\t/**\r\n\t * Render the current and all additional scenes. It will first update all geometries and glyphsets\r\n\t * in scenes, clear depth buffer and render the ortho scene, call the preRenderCallbackFunctions stack\r\n\t * , render the scenes then postRenderCallback.\r\n\t */\r\n\tthis.render = () => {\r\n\t\tif (!sensor) {\r\n\t\t\tif (container) {\r\n\t\t\t\tif (container.clientWidth > 0 && container.clientHeight > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(container, this.onWindowResize);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (canvas.width > 0 && canvas.height > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(canvas, this.onWindowResize);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst delta = clock.getDelta();\r\n\t\tcurrentScene.renderGeometries(playRate, delta, this.playAnimation);\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t sceneItem.renderGeometries(playRate, delta, this.playAnimation);\r\n\t }\r\n\t\tif (cameraOrtho != undefined && sceneOrtho != undefined) {\r\n\t\t\trenderer.clearDepth();\r\n\t\t\trenderer.render( sceneOrtho, cameraOrtho );\r\n\t\t}\r\n for (key in preRenderCallbackFunctions) {\r\n if (preRenderCallbackFunctions.hasOwnProperty(key)) {\r\n preRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n currentScene.render(renderer);\r\n for (key in postRenderCallbackFunctions) {\r\n if (postRenderCallbackFunctions.hasOwnProperty(key)) {\r\n postRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the internal {@link Three.Renderer}, to gain access to ThreeJS APIs.\r\n\t */\r\n\tthis.getThreeJSRenderer = () => {\r\n\t\treturn renderer;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Check if a scene is currently active.\r\n\t * @param {Zinc.Scene} sceneIn - Scene to check if it is currently\r\n\t * rendered.\r\n\t */\r\n\tthis.isSceneActive = sceneIn => {\r\n\t\tif (currentScene === sceneIn) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t const sceneItem = additionalActiveScenes[i];\r\n\t\t if (sceneItem === sceneIn)\r\n\t\t \treturn true;\r\n\t\t }\r\n\t\t}\r\n\t return false;\r\n\t} \r\n\t\r\n\t/**\r\n\t * Add additional active scene for rendering, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be added to the rendering.\r\n\t */\r\n\tthis.addActiveScene = additionalScene => {\r\n\t\tif (!this.isSceneActive(additionalScene)) {\r\n\t\t\tadditionalActiveScenes.push(additionalScene);\r\n\t\t\tscenesGroup.add(additionalScene.getThreeJSScene());\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a currenrtly active scene from the renderer, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be removed from rendering.\r\n\t */\r\n\tthis.removeActiveScene = additionalScene => {\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t if (sceneItem === additionalScene) {\r\n\t \tadditionalActiveScenes.splice(i, 1);\r\n\t \tscenesGroup.remove(additionalScene.getThreeJSScene());\r\n\t \treturn;\r\n\t }\r\n\t }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Clear all additional scenes from rendering except for curentScene.\r\n\t */\r\n\tthis.clearAllActiveScene = () => {\r\n\t\tfor (let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\tscenesGroup.remove(additionalActiveScenes[i].getThreeJSScene());\r\n\t\t}\r\n\t\tadditionalActiveScenes.splice(0,additionalActiveScenes.length);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Dispose all memory allocated, this will effetively destroy all scenes.\r\n\t */\r\n\tthis.dispose = () => {\r\n if (isRendering)\r\n cancelAnimationFrame(animated_id);\r\n\t for (const key in sceneMap) {\r\n\t if (sceneMap.hasOwnProperty(key)) {\r\n\t sceneMap[key].clearAll();\r\n\t }\r\n\t }\r\n\t sceneMap = [];\r\n\t additionalActiveScenes = [];\r\n\t scenesGroup = new THREE.Group();\r\n\t this.stopAnimate();\r\n\t preRenderCallbackFunctions = [];\r\n\t preRenderCallbackFunctions_id = 0;\r\n\t cameraOrtho = undefined;\r\n\t sceneOrtho = undefined;\r\n\t logoSprite = undefined;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t sensor = undefined;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Transition from the current viewport to the endingScene's viewport in the specified duration.\r\n\t * \r\n\t * @param {Zinc.Scene} endingScene - Viewport of this scene will be used as the destination.\r\n\t * @param {Number} duration - Amount of time to transition from current viewport to the \r\n\t * endingScene's viewport.\r\n\t */\r\n\tthis.transitionScene = (endingScene, duration) => {\r\n\t\tif (currentScene) {\r\n\t\t\tconst currentCamera = currentScene.getZincCameraControls();\r\n\t\t\tconst boundingBox = endingScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t\tconst radius = boundingBox.min.distanceTo(boundingBox.max)/2.0;\r\n\t\t\t\tconst centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\r\n\t\t\t\tconst centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\r\n\t\t\t\tconst centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\r\n\t\t\t\tconst clip_factor = 4.0;\r\n\t\t\t\tconst endingViewport = currentCamera.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor );\r\n\t\t\t\tconst startingViewport = currentCamera.getCurrentViewport();\r\n\t\t\t\tcurrentCamera.cameraTransition(startingViewport, endingViewport, duration);\r\n\t\t\t\tcurrentCamera.enableCameraTransition();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n","module.exports = require(\"css-element-queries/src/ResizeSensor\");","const THREE = require('three');\nconst SceneLoader = require('./sceneLoader').SceneLoader;\nconst SceneExporter = require('./sceneExporter').SceneExporter;\nconst Viewport = require('./controls').Viewport;\n\nconst defaultMetadata = function() {\n return { \n Duration: \"6 secs\",\n OriginalDuration: \"-\",\n TimeStamps: {}\n }\n};\n\nconst defaultDuration = 6000;\n\n/**\n * A Zinc.Scene contains {@link Zinc.Geometry}, {@link Zinc.Glyphset} and \n * {@link Zinc.CameraControls} which controls the viewport and additional features.\n * It is the main object used for controlling what is and what is not displayed\n * on the renderer.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {Zinc.Scene}\n */\nexports.Scene = function (containerIn, rendererIn) {\n const container = containerIn;\n let videoHandler = undefined;\n let sceneLoader = new SceneLoader(this);\n let minimap = undefined;\n const scene = new THREE.Scene();\n const rootRegion = new (require('./region').Region)();\n scene.add(rootRegion.getGroup());\n /**\n * A {@link THREE.DirectionalLight} object for controlling lighting of this scene.\n */\n this.directionalLight = undefined;\n /**\n * a {@link THREE.AmbientLight} for controlling the ambient lighting of this scene.\n */\n this.ambient = undefined;\n this.camera = undefined;\n let duration = 6000;\n let zincCameraControls = undefined;\n this.sceneName = undefined;\n let stereoEffectFlag = false;\n let stereoEffect = undefined;\n this.autoClearFlag = true;\n this.displayMarkers = false;\n this.displayMinimap = false;\n this.minimapScissor = {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-left\",\n updateRequired: true\n };\n let scissor = {x: 0, y: 0};\n let metadata = defaultMetadata();\n let _markerTarget = new THREE.Vector2();\n\n const getDrawingWidth = () => {\n if (container)\n if (typeof container.clientWidth !== \"undefined\")\n return container.clientWidth;\n else\n return container.width;\n return 0;\n }\n\n const getDrawingHeight = () => {\n if (container)\n if (typeof container.clientHeight !== \"undefined\")\n return container.clientHeight;\n else\n return container.height;\n return 0;\n }\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n return sceneLoader.getDownloadProgress();\n }\n\n //called from Renderer when panel has been resized\n this.onWindowResize = () => {\n this.camera.aspect = getDrawingWidth() / getDrawingHeight();\n this.camera.updateProjectionMatrix();\n this.minimapScissor.updateRequired = true;\n zincCameraControls.onResize();\n }\n\n /**\n * Reset the viewport of this scene to its original state. \n */\n this.resetView = () => {\n this.onWindowResize();\n zincCameraControls.resetView();\n }\n\n /**\n * Set the zoom level by unit scroll rate\n */\n this.changeZoomByScrollRateUnit = unit => {\n zincCameraControls.changeZoomByScrollRateUnit(unit);\n }\n\n //Setup the camera for this scene, it also initialise the lighting\n const setupCamera = () => {\n this.camera = new THREE.PerspectiveCamera(40, getDrawingWidth() / getDrawingHeight(), 0.0, 10.0);\n this.ambient = new THREE.AmbientLight(0xffffff, 0.2);\n scene.add(this.ambient);\n\n this.directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);\n scene.add(this.directionalLight);\n zincCameraControls = new (require('./controls').CameraControls)(this.camera, rendererIn.domElement, rendererIn, this);\n\n zincCameraControls.setDirectionalLight(this.directionalLight);\n zincCameraControls.resetView();\n\n minimap = new (require('./minimap').Minimap)(this);\n };\n\n setupCamera();\n\n /**\n * Load the viewport Data from the argument {@link Zinc.Viewport} and set it as \n * the default viewport of this scene.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.loadView = settings => {\n const viewPort = new Viewport();\n viewPort.setFromObject(settings);\n zincCameraControls.setCurrentCameraSettings(viewPort);\n return true;\n }\n\n /**\n * Set up multiple views.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.setupMultipleViews = (defaultView, entries) => {\n for (const [name, settings] of Object.entries(entries)) {\n const viewport = new Viewport();\n viewport.setFromObject(settings);\n zincCameraControls.addViewport(name, viewport);\n }\n zincCameraControls.setDefaultViewport(defaultView);\n }\n\n /**\n * Get the bounding box of all the object in this scene only.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = () => {\n return rootRegion.getBoundingBox(true);\n }\n\n /**\n * Adjust the viewport to display the desired volume provided by the bounding box.\n * \n * @param {THREE.Box3} boundingBox - The bounding box which describes the volume of\n * which we the viewport should be displaying.\n */\n this.viewAllWithBoundingBox = boundingBox => {\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const radius = boundingBox.min.distanceTo(boundingBox.max) / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = zincCameraControls.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n\n zincCameraControls.setCurrentCameraSettings(viewport);\n }\n }\n\n /**\n * Adjust zoom distance to include all primitives in scene only.\n */\n this.viewAll = () => {\n const boundingBox = this.getBoundingBox();\n this.viewAllWithBoundingBox(boundingBox);\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n */\n this.forEachGeometry = callbackFunction => {\n rootRegion.forEachGeometry(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n */\n this.forEachGlyphset = callbackFunction => {\n rootRegion.forEachGlyphset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n */\n this.forEachPointset = callbackFunction => {\n rootRegion.forEachPointset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n */\n this.forEachLine = callbackFunction => {\n rootRegion.forEachLine(callbackFunction, true);\n }\n\n /** \n * Find and return all geometries in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = GroupName => {\n return rootRegion.findGeometriesWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all pointsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = GroupName => {\n return rootRegion.findPointsetsWithGroupName(GroupName, true);\n }\n /** \n * Find and return all glyphsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = GroupName => {\n return rootRegion.findGlyphsetsWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all lines in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findLinesWithGroupName = GroupName => {\n return rootRegion.findLinesWithGroupName(GroupName, true);\n }\n\n this.findObjectsWithGroupName = GroupName => {\n return rootRegion.findObjectsWithGroupName(GroupName, true);\n }\n\n this.findObjectsWithAnatomicalId = anatomicalId => {\n return rootRegion.findObjectsWithAnatomicalId(anatomicalId, true);\n }\n\n this.getBoundingBoxOfZincObjects = objectsArray => {\n let boundingBox = undefined;\n for (let i = 0; i < objectsArray.length; i++) {\n let box = objectsArray[i].getBoundingBox();\n if (box) {\n if (!boundingBox)\n boundingBox = box;\n else\n boundingBox.union(box);\n }\n }\n return boundingBox;\n }\n\n this.vectorToScreenXY = point => {\n point.project(this.camera);\n let width = getDrawingWidth();\n let height = getDrawingHeight();\n let widthHalf = (width / 2);\n let heightHalf = (height / 2);\n point.x = (point.x * widthHalf) + widthHalf;\n point.y = - (point.y * heightHalf) + heightHalf;\n return point;\n }\n\n this.getObjectsScreenXY = zincObjects => {\n if (zincObjects && zincObjects.length > 0) {\n let boundingBox = this.getBoundingBoxOfZincObjects(zincObjects);\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n return this.vectorToScreenXY(center);\n }\n return undefined;\n }\n\n this.getNamedObjectsScreenXY = name => {\n let zincObjects = this.findObjectsWithGroupName(name);\n return this.getObjectsScreenXY(zincObjects);\n };\n\n this.addZincObject = zincObject => {\n if (zincObject) {\n rootRegion.addZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (metaurl, glyphurl, groupName, finishCallback) => {\n sceneLoader.loadGlyphsetURL(rootRegion, metaurl, glyphurl, groupName, finishCallback);\n }\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadPointsetURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadLinesURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (url, groupName, finishCallback) => {\n sceneLoader.loadSTL(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (url, groupName, finishCallback) => {\n sceneLoader.loadOBJ(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (url, finishCallback, allCompletedCallback) => {\n sceneLoader.loadMetadataURL(rootRegion, url, finishCallback, allCompletedCallback);\n }\n\n /**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n sceneLoader.loadModelsURL(rootRegion. urls, colours, opacities, timeEnabled, morphColour, finishCallback);\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = url => {\n sceneLoader.loadViewURL(url);\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\n sceneLoader.loadFromViewURL(jsonFilePrefix, finishCallback);\n }\n\n /**\n * Load GLTF into this scene object.\n */\n this.loadGLTF = (url, finishCallback, options) => {\n sceneLoader.loadGLTF(rootRegion, url, finishCallback, options);\n }\n \n\n //Update the directional light for this scene.\n this.updateDirectionalLight = () => {\n zincCameraControls.updateDirectionalLight();\n }\n\n /**\n * Add any {THREE.Object} into this scene.\n * @param {THREE.Object} object - to be addded into this scene.\n */\n this.addObject = object => {\n scene.add(object);\n }\n\n /**\n * Remove any {THREE.Object} from this scene.\n * @param {THREE.Object} object - to be removed from this scene.\n */\n this.removeObject = object => {\n scene.remove(object);\n }\n\n /**\n * Get the current time of the scene.\n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (videoHandler != undefined) {\n return videoHandler.getCurrentTime(duration);\n }\n const time = rootRegion.getCurrentTime();\n if (time !== -1) \n return time;\n \n return 0;\n }\n\n /**\n * Set the current time of all the geometries and glyphsets of this scene.\n * @param {Number} time - Value to set the time to.\n */\n this.setMorphsTime = (time) => {\n if (videoHandler != undefined) {\n videoHandler.setMorphTime(time, duration);\n }\n rootRegion.setMorphTime(time, true);\n }\n\n /**\n * Check if any object in this scene is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if (videoHandler && videoHandler.video && !videoHandler.video.error) {\n \treturn true;\n }\n return rootRegion.isTimeVarying();\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation) => {\n // Let video dictates the progress if one is present\n let options = {};\n options.camera = zincCameraControls;\n options.displayMarkers = this.displayMarkers;\n options.markerDepths = [];\n\t if (videoHandler) {\n\t\t if (videoHandler.isReadyToPlay()) {\n\t\t\t if (playAnimation) {\n videoHandler.video.play();\n\t\t\t } else {\n\t\t\t\t videoHandler.video.pause();\n\t\t\t }\n const currentTime = videoHandler.video.currentTime /\n videoHandler.getVideoDuration() * duration;\n\t\t\t if (0 == sceneLoader.toBeDownloaded) {\n\t\t\t\t zincCameraControls.setTime(currentTime);\n\t\t\t\t zincCameraControls.update(0);\n rootRegion.setMorphTime(currentTime, true);\n rootRegion.renderGeometries(0, 0, playAnimation, undefined, true);\n\t\t\t } else {\n\t\t\t\t zincCameraControls.update(0);\n\t\t\t }\n\t\t\t //console.log(videoHandler.video.currentTime / videoHandler.getVideoDuration() * 6000);\n\t\t } else {\n\t\t\t myPlayRate = 0;\n\t\t }\n\t } else {\n\t\t if (0 == sceneLoader.toBeDownloaded) {\n zincCameraControls.update(delta);\n rootRegion.renderGeometries(playRate, delta, playAnimation, options, true);\n\t\t } else {\n\t\t\t zincCameraControls.update(0);\n\t\t }\n }\n }\n\n /**\n * Return the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n this.setVideoHandler = (videoHandlerIn) => {\n if (!videoHandler)\n videoHandler = videoHandlerIn;\n }\n\n /**\n * Set a group of scenes into this parent scene. This group of\n * scenes will also be rendered when this scene is rendered.\n * @private\n */\n this.setAdditionalScenesGroup = scenesGroup => {\n scene.add(scenesGroup);\n }\n\n let getWindowsPosition = (align, x_offset, y_offset, width, height,\n renderer_width, renderer_height) => {\n let x = 0;\n let y = 0;\n if (align.includes(\"top\")) {\n y = renderer_height - height - y_offset;\n } else if (align.includes(\"bottom\")) {\n y = y_offset;\n } else {\n y = Math.floor((renderer_height - height) / 2.0);\n }\n if (align.includes(\"left\")) {\n x = x_offset;\n } else if (align.includes(\"right\")) {\n x = renderer_width - x_offset- width;\n } else {\n x = Math.floor((renderer_width - width) / 2.0);\n }\n return {x: x, y: y};\n }\n\n const renderMinimap = renderer => {\n if (this.displayMinimap === true) {\n renderer.setScissorTest(true);\n renderer.getSize(_markerTarget);\n if (this.minimapScissor.updateRequired) {\n scissor = getWindowsPosition(this.minimapScissor.align,\n this.minimapScissor.x_offset, \n this.minimapScissor.y_offset, \n this.minimapScissor.width,\n this.minimapScissor.height,\n _markerTarget.x, _markerTarget.y);\n this.minimapScissor.updateRequired = false;\n }\n renderer.setScissor(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height);\n renderer.setViewport(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height); \n minimap.updateCamera();\n scene.add(minimap.mask);\n renderer.render(scene, minimap.camera);\n scene.remove(minimap.mask);\n renderer.setScissorTest(false);\n renderer.setViewport(0, 0, _markerTarget.x, _markerTarget.y);\n }\n }\n\n /**\n * Render the scene.\n * @private\n */\n this.render = renderer => {\n if (this.autoClearFlag)\n renderer.clear();\n if (stereoEffectFlag && stereoEffect) {\n stereoEffect.render(scene, this.camera);\n } else {\n renderer.render(scene, this.camera);\n renderMinimap(renderer);\n }\n }\n\n /**\n * Enable or disable interactive control, this is on by default.\n * \n * @param {Boolean} flag - Indicate either interactive control \n * should be enabled or disabled.\n */\n this.setInteractiveControlEnable = flag => {\n if (flag == true)\n zincCameraControls.enable();\n else\n zincCameraControls.disable();\n }\n\n /**\n * Get the camera control of this scene.\n * @return {Zinc.CameraControls}\n */\n this.getZincCameraControls = () => {\n return zincCameraControls;\n }\n\n /**\n * Get the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n /**\n * Set the default duration value for geometries and glyphsets\n * that are to be loaded into this scene.\n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n rootRegion.setDuration(durationIn);\n duration = durationIn;\n zincCameraControls.setPathDuration(durationIn);\n sceneLoader.duration = durationIn;\n }\n\n /**\n * Get the default duration value.\n * returns {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Enable or disable stereo effect of this scene.\n * @param {Boolean} flag - Indicate either stereo effect control \n * should be enabled or disabled.\n */\n this.setStereoEffectEnable = stereoFlag => {\n if (stereoFlag == true) {\n if (!stereoEffect) {\n stereoEffect = new require('./controls').StereoEffect(rendererIn);\n }\n }\n rendererIn.setSize(getDrawingWidth(), getDrawingHeight());\n this.camera.updateProjectionMatrix();\n stereoEffectFlag = stereoFlag;\n }\n\n this.objectIsInScene = zincObject => {\n return rootRegion.objectIsInRegion(zincObject, true);\n }\n\n this.alignBoundingBoxToCameraView = (boundingBox, transitionTime) => {\n if (boundingBox) {\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n const viewport = this.getZincCameraControls().getCurrentViewport();\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const upVector = new THREE.Vector3(viewport.upVector[0],\n viewport.upVector[1], viewport.upVector[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(target, eyePosition).normalize();\n newVec2.subVectors(target, center).normalize();\n const newVec3 = new THREE.Vector3();\n newVec3.crossVectors(newVec1, newVec2);\n const angle = newVec1.angleTo(newVec2);\n if (transitionTime > 0) {\n this.getZincCameraControls().rotateCameraTransition(newVec3,\n angle, transitionTime);\n this.getZincCameraControls().enableCameraTransition();\n } else {\n this.getZincCameraControls().rotateAboutLookAtpoint(newVec3, angle);\n }\n }\n }\n\n this.alignObjectToCameraView = (zincObject, transitionTime) => {\n if (this.objectIsInScene(zincObject)) {\n const boundingBox = zincObject.getBoundingBox();\n this.alignBoundingBoxToCameraView(boundingBox, transitionTime);\n }\n }\n\n this.setCameraTargetToObject = zincObject => {\n if (this.objectIsInScene(zincObject)) {\n const center = new THREE.Vector3();\n const boundingBox = zincObject.getBoundingBox();\n const viewport = this.getZincCameraControls().getCurrentViewport();\n boundingBox.getCenter(center);\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(eyePosition, target);\n newVec2.addVectors(center, newVec1);\n viewport.eyePosition[0] = newVec2.x;\n viewport.eyePosition[1] = newVec2.y;\n viewport.eyePosition[2] = newVec2.z;\n viewport.targetPosition[0] = center.x;\n viewport.targetPosition[1] = center.y;\n viewport.targetPosition[2] = center.z;\n this.getZincCameraControls().setCurrentCameraSettings(viewport);\n }\n }\n\n /**\n * Check if stereo effect is enabled.\n * @returns {Boolean}\n */\n this.isStereoEffectEnable = () => {\n return stereoEffectFlag;\n }\n\n /**\n * Remove a ZincObject from this scene if it presents. This will eventually\n * destroy the object and free up the memory.\n * @param {Zinc.Object} zincObject - object to be removed from this scene.\n */\n this.removeZincObject = zincObject => {\n rootRegion.removeZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = () => {\n let returnedObjects = [];\n rootRegion.getPickableThreeJSObjects(returnedObjects,\n this.displayMarkers, true);\n return returnedObjects;\n }\n\n /**\n * Get the Normalised coordinates on minimap if mouse event is\n * inside the minimap \n */\n this.getNormalisedMinimapCoordinates = (renderer, event) => {\n if (this.displayMinimap) {\n const target = new THREE.Vector2();\n renderer.getSize(target);\n let offsetY = target.y - event.clientY;\n if (((scissor.x + this.minimapScissor.width) > event.clientX) &&\n (event.clientX > scissor.x) && \n ((scissor.y + this.minimapScissor.height) > offsetY) &&\n (offsetY > scissor.y)) {\n let x = ((event.clientX - scissor.x) /\n this.minimapScissor.width) * 2.0 - 1.0;\n let y = ((offsetY - scissor.y) /\n this.minimapScissor.height) * 2.0 - 1.0;\n return {\"x\": x, \"y\": y};\n }\n }\n return undefined;\n }\n\n /**\n * Get the coordinates difference of the current viewing\n * point and projected coordinates.\n */\n this.getMinimapDiffFromNormalised = (x, y) => {\n if (minimap)\n return minimap.getDiffFromNormalised(x, y);\n return undefined;\n }\n\n /**\n * Remove all objects that are created with ZincJS APIs and it will free the memory allocated.\n * This does not remove obejcts that are added using the addObject APIs.\n */\n this.clearAll = () => {\n rootRegion.clear(true);\n sceneLoader.toBeDwonloaded = 0;\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n\n /**\n * All time stamp to the metadata TimeStamps field.\n */\n this.addMetadataTimeStamp = (key, time) => {\n metadata[\"TimeStamps\"][key] = convertDurationObjectTomSec(time);\n }\n \n /**\n * Get a specific metadata field.\n */\n this.getMetadataTag = key => {\n return metadata[key];\n }\n\n /**\n * Get all metadata set for the scene.\n */\n this.getMetadata = () => {\n return metadata;\n }\n\n /**\n * Set a specific metadata field.\n */\n this.setMetadataTag = (key, value) => {\n metadata[key] = value;\n }\n\n /**\n * Remove a specific metadata field.\n */\n this.removeMetadataTag = key => {\n delete metadata[key];\n }\n\n /**\n * Reset all metadata fields to original value.\n */\n this.resetMetadata = () => {\n metadata = defaultMetadata();\n }\n\n /**\n * Reset duration of scene to default value.\n */\n this.resetDuration = () => {\n this.setDuration(defaultDuration);\n }\n\n // Turn the object into a readable string {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectToString = duration => {\n return [\n ...(duration.years ? [`${duration.years}years`] : []),\n ...(duration.months ? [`${duration.months}months`] : []),\n ...(duration.weeks ? [`${duration.weeks}weeks`] : []),\n ...(duration.days ? [`${duration.days}days`] : []),\n ...(duration.hours ? [`${duration.hours}hours`] : []),\n ...(duration.mins ? [`${duration.mins}mins`] : []),\n ...(duration.secs ? [`${duration.secs}secs`] : []),\n ].join(' ');\n }\n\n // Turn the object into a number representing milliesecond {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectTomSec = duration => {\n return duration.years ? duration.years * 31536000000 : 0 +\n duration.months ? duration.months * 2592000000 : 0 +\n duration.weeks ? duration.weeks * 604800000 : 0 +\n duration.days ? duration.days * 86400000 : 0 +\n duration.hours ? duration.hours * 3600000 : 0 +\n duration.mins ? duration.mins * 60000 : 0 +\n duration.secs ? duration.secs * 1000 : 0;\n }\n\n // Set the readable duration and timer using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n const millisec = convertDurationObjectTomSec(duration);\n this.setMetadataTag(\"Duration\", string);\n this.setDuration(millisec);\n }\n\n // Set the readable original duration using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setOriginalDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n this.setMetadataTag(\"OriginalDuration\", string);\n }\n\n this.exportGLTF = (binary) => {\n const exporter = new SceneExporter(this);\n return exporter.exportGLTF(binary);\n }\n\n this.getRootRegion = () => {\n return rootRegion;\n }\n}\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\nconst JSONLoader = require('./loader').JSONLoader;\nconst STLLoader = require('three/examples/jsm/loaders/STLLoader').STLLoader;\nconst OBJLoader = require('three/examples/jsm/loaders/OBJLoader').OBJLoader;\nconst GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader').GLTFLoader;\n\nexports.SceneLoader = function (sceneIn) {\n const scene = sceneIn;\n this.toBeDownloaded = 0;\n this.progressMap = [];\n let viewLoaded = false;\n let errorDownload = false;\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n let totalSize = 0;\n let totalLoaded = 0;\n let unknownFound = false;\n\n for (const key in this.progressMap) {\n const progress = this.progressMap[key];\n\n totalSize += progress[1];\n totalLoaded += progress[0];\n\n if (progress[1] == 0)\n unknownFound = true;\n }\n if (unknownFound) {\n totalSize = 0;\n }\n return [ totalSize, totalLoaded, errorDownload ];\n }\n\n //Stores the current progress of downloads\n this.onProgress = id => {\n return xhr => {\n this.progressMap[id] = [ xhr.loaded, xhr.total ];\n };\n }\n\n this.onError = xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n };\n\n let loadMultipleViews = (referenceURL, views) => {\n const defaultView = views.Default;\n if (views.Inline) {\n scene.addMultipleViews(defaultView, views.Entries);\n } else {\n const promises = [];\n for (const [key, value] of Object.entries(views.Entries)) {\n if (referenceURL) {\n newURL = (new URL(value, referenceURL)).href;\n promises.push(new Promise((resolve, reject) => {\n // Add parameters if we are sent them\n fetch(newURL)\n .then(response => response.json())\n .then(data => resolve({key: key, data: data}))\n .catch(data => reject(data));\n }));\n }\n }\n Promise.all(promises)\n .then(values => {\n const entries = {};\n values.forEach(entry => {\n entries[entry.key] = entry.data;\n });\n scene.setupMultipleViews(defaultView, entries);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.setCurrentViewport(defaultView);\n viewLoaded = true;\n });\n }\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = (url, finishCallback) => {\n this.toBeDownloaded += 1;\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4) {\n if(xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.setupMultipleViews(\"default\", { \"default\" : viewData });\n scene.resetView();\n viewLoaded = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n --this.toBeDownloaded;\n }\n }\n requestURL = resolveURL(url);\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n/**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (region, urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n const number = urls.length;\n this.toBeDownloaded += number;\n for (let i = 0; i < number; i++) {\n const filename = urls[i];\n const loader = new JSONLoader();\n let colour = require('./zinc').defaultMaterialColor;\n let opacity = require('./zinc').defaultOpacity;\n if (colours != undefined && colours[i] != undefined)\n colour = colours[i] ? true : false;\n if (opacities != undefined && opacities[i] != undefined)\n opacity = opacities[i];\n let localTimeEnabled = 0;\n if (timeEnabled != undefined && timeEnabled[i] != undefined)\n localTimeEnabled = timeEnabled[i] ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined && morphColour[i] != undefined)\n localMorphColour = morphColour[i] ? true : false;\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(filename), meshloader(region, colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, finishCallback), this.onProgress(i), this.onError);\n }\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (targetRegion, jsonFilePrefix, finishCallback) => {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.loadView(viewData);\n const urls = [];\n const filename_prefix = jsonFilePrefix + \"_\";\n for (let i = 0; i < viewData.numberOfResources; i++) {\n const filename = filename_prefix + (i + 1) + \".json\";\n urls.push(filename);\n }\n this.loadModelsURL(targetRegion, urls, viewData.colour, viewData.opacity, viewData.timeEnabled, viewData.morphColour, finishCallback);\n }\n }\n requestURL = resolveURL(jsonFilePrefix + \"_view.json\");\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n //Internal loader for a regular zinc geometry.\n const linesloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newLines = new (require('./primitives/lines').Lines)();\n let material = undefined;\n if (materials && materials[0]) {\n material = new THREE.LineBasicMaterial({color:materials[0].color.clone()});\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n\n if (newLines) {\n newLines.createLineSegment(geometry, material, options);\n newLines.setName(groupName);\n newLines.anatomicalId = anatomicalId;\n newLines.setRenderOrder = renderOrder;\n region.addZincObject(newLines);\n newLines.setDuration(scene.getDuration());\n }\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newLines);\n };\n } \n\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n\t let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n\t if (timeEnabled != undefined)\n\t\t localTimeEnabled = timeEnabled ? true : false;\n\t let localMorphColour = 0;\n\t if (morphColour != undefined)\n\t\t localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n if (isInline) {\n var object = loader.parse( url );\n (linesloader(region, localTimeEnabled, localMorphColour, groupName, anatomicalId,\n renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, linesloader(region, localTimeEnabled, localMorphColour, groupName, \n anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError);\n }\n }\n\n const loadGlyphset = (region, glyphsetData, glyphurl, groupName, finishCallback, options) => {\n let isInline = (options && options.isInline) ? options.isInline : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let displayLabels = (options && options.displayLabels) ? options.displayLabels : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n const newGlyphset = new (require('./primitives/glyphset').Glyphset)();\n newGlyphset.setDuration(scene.getDuration());\n newGlyphset.groupName = groupName;\n let myCallback = () => {\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGlyphset);\n }\n ++this.toBeDownloaded;\n if (isInline) {\n newGlyphset.load(glyphsetData, glyphurl, myCallback, isInline, displayLabels);\n }\n else{\n newGlyphset.load(glyphsetData, resolveURL(glyphurl), myCallback, isInline, displayLabels);\n }\n newGlyphset.anatomicalId = anatomicalId;\n newGlyphset.setRenderOrder(renderOrder);\n region.addZincObject(newGlyphset);\n };\n\n //Load a glyphset into this scene.\n const onLoadGlyphsetReady = (region, xmlhttp, glyphurl, groupName, finishCallback, options) => {\n return () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const glyphsetData = JSON.parse(xmlhttp.responseText);\n loadGlyphset(region, glyphsetData, glyphurl, groupName, finishCallback, options);\n }\n };\n };\n\n //Internal loader for a regular zinc geometry.\n const pointsetloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newPointset = new (require('./primitives/pointset').Pointset)();\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 5, sizeAttenuation: false });\n if (materials && materials[0]) {\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.color = materials[0].color;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n if (newPointset) {\n newPointset.createMesh(geometry, material, options);\n newPointset.setName(groupName);\n newPointset.anatomicalId = anatomicalId;\n region.addZincObject(newPointset);\n newPointset.setDuration(scene.getDuration());\n newPointset.setRenderOrder(renderOrder);\n }\n geometry.dispose();\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newPointset);\n };\n }\n\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new STLLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined, finishCallback));\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined,finishCallback));\n }\n\n //Loader for the OBJ format, \n const objloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n finishCallback\n ) => {\n return object => {\n this.toBeDownloaded--;\n object.traverse(child => {\n if (child instanceof THREE.Mesh) {\n const zincGeometry = addMeshToZincGeometry(child, localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n if (zincGeometry.morph)\n zincGeometry.morph.name = groupName;\n zincGeometry.groupName = groupName;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n });\n };\n }\n\n /**\n * Load a geometry into this scene, this is a subsequent called from \n * {@link Zinc.Scene#loadMetadataURL}, although it can be used to read\n * in geometry into the scene externally.\n * \n * @param {String} url - regular json model file providing geometry.\n * @param {Boolean} timeEnabled - Indicate if geometry morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {STRING} fileFormat - name supported formats are STL, OBJ and JSON.\n * @param {Function} finishCallback - Callback function which will be called\n * once the geometry is succssfully loaded in.\n */\n const loadSurfaceURL = (region ,url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n let localTimeEnabled = 0;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let fileFormat = (options && options.fileFormat) ? options.fileFormat : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n if (fileFormat !== undefined) {\n if (fileFormat == \"STL\") {\n loader = new STLLoader();\n } else if (fileFormat == \"OBJ\") {\n loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, objloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback), this.onProgress(i), this.onError);\n return;\n }\n }\n if (isInline) {\n const object = loader.parse( url );\n\t\t\t(meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError);\n }\n };\n\n //Object to keep track of number of items downloaded and when all items are downloaded\n //allCompletedCallback is called\n const metaFinishCallback = function (numberOfDownloaded, finishCallback, allCompletedCallback) {\n let downloadedItem = 0;\n return zincObject => {\n downloadedItem = downloadedItem + 1;\n if (zincObject && (finishCallback != undefined) && (typeof finishCallback == 'function')) {\n finishCallback(zincObject);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(scene);\n }\n if (downloadedItem == numberOfDownloaded) {\n if (viewLoaded === false)\n scene.viewAll();\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n }\n };\n };\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (isInline) {\n const object = loader.parse( url );\n (pointsetloader(region, localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, finishCallback))(object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, pointsetloader(region, localTimeEnabled, localMorphColour,\n groupName, anatomicalId, renderOrder, finishCallback),\n this.onProgress(i), this.onError);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (region, metaurl, glyphurl, groupName, finishCallback, options) => {\n const isInline = (options && options.isInline) ? options.isInline : false;\n if (isInline) {\n loadGlyphset(region, metaurl, glyphurl, groupName, finishCallback, options);\n } else {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = onLoadGlyphsetReady(region, xmlhttp, glyphurl,\n groupName, finishCallback, options);\n xmlhttp.open(\"GET\", resolveURL(metaurl), true);\n xmlhttp.send();\n }\n }\n\n /**\n * Add a user provided {THREE.Geometry} into the scene as zinc geometry.\n * \n * @param {Three.Geometry} geometry - The threejs geometry to be added as {@link Zinc.Geometry}.\n * @param {THREE.Color} color - Colour to be assigned to this geometry, overrided if materialIn is provided.\n * @param {Number} opacity - Opacity to be set for this geometry, overrided if materialIn is provided.\n * @param {Boolean} localTimeEnabled - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Boolean} localMorphColour - Set this to true if morph colour is present, overrided if materialIn is provided.\n * @param {Boolean} external - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Function} finishCallback - Callback once the geometry has been added succssfully.\n * @param {THREE.Material} materialIn - Material to be set for this geometry if it is present.\n * \n * @returns {Zinc.Geometry}\n */\n addZincGeometry = (\n region,\n geometryIn,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n finishCallback,\n materialIn,\n groupName\n ) => {\n let options = {};\n options.colour = colour;\n options.opacity = opacity;\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour\n const newGeometry = new (require('./primitives/geometry').Geometry)();\n newGeometry.createMesh(geometryIn, materialIn, options);\n if (newGeometry.morph) {\n newGeometry.setName(groupName);\n region.addZincObject(newGeometry);\n newGeometry.setDuration(scene.getDuration());\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGeometry);\n if (newGeometry.videoHandler)\n scene.setVideoHandler(newGeometry.videoHandler);\n return newGeometry;\n }\n return undefined;\n }\n\n //Internal loader for a regular zinc geometry.\n const meshloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n anatomicalId,\n renderOrder,\n finishCallback\n ) => {\n return (geometry, materials) => {\n let material = undefined;\n if (materials && materials[0]) {\n material = materials[0];\n }\n const zincGeometry = addZincGeometry(region, geometry, colour, opacity, \n localTimeEnabled, localMorphColour, undefined, material, groupName, renderOrder);\n zincGeometry.anatomicalId = anatomicalId;\n zincGeometry.setRenderOrder(renderOrder);\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n };\n }\n\n //Turn ISO 8601 duration string into an array.\n const parseDuration = (durationString) => {\n const regex = /P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?)?$/;\n const [, years, months, weeks, days, hours, mins, secs] = \n durationString.match(regex);\n return {years: years,months: months, weeks: weeks, days: days,\n hours: hours, mins: mins, secs: secs };\n }\n\n //Load settings from metadata item.\n this.loadSettings = (item) => {\n if (item) {\n //duration uses the ISO 8601 standard - PnYnMnDTnHnMnS\n if (item.Duration) {\n const duration = parseDuration(item.Duration);\n scene.setDurationFromObject(duration);\n }\n if (item.OriginalDuration) {\n const duration = parseDuration(item.OriginalDuration);\n scene.setOriginalDurationFromObject(duration);\n }\n if (item.TimeStamps) {\n for (const key in item.TimeStamps) {\n const time = parseDuration(item.TimeStamps[key]);\n scene.addMetadataTimeStamp(key, time);\n }\n }\n }\n }\n\n //Function to process each of the graphical metadata item except for view and\n //settings.\n const readPrimitivesItem = (region, referenceURL, item, order, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = (new URL(item.URL, referenceURL)).href;\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n let groupName = item.GroupName;\n if (groupName === undefined || groupName === \"\") {\n groupName = \"_Unnamed\";\n }\n\n let options = {\n isInline: isInline,\n fileFormat: item.FileFormat,\n anatomicalId: item.AnatomicalId,\n compression: item.compression,\n renderOrder: order\n };\n \n switch (item.Type) {\n case \"Surfaces\":\n loadSurfaceURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Glyph\":\n let newGeometryURL = undefined;\n if (!isInline) {\n newGeometryURL = item.GlyphGeometriesURL;\n newGeometryURL = (new URL(item.GlyphGeometriesURL, referenceURL)).href;\n } else {\n newGeometryURL = item.Inline.GlyphGeometriesURL;\n }\n if (item.DisplayLabels) {\n options.displayLabels = true;\n }\n this.loadGlyphsetURL(region, newURL, newGeometryURL, groupName, finishCallback, options);\n break;\n case \"Points\":\n this.loadPointsetURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Lines\":\n this.loadLinesURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n default:\n break;\n }\n }\n };\n\n //Function to read the view item first\n const readViewAndSettingsItem = (referenceURL, item, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = (new URL(item.URL, referenceURL)).href;\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n switch (item.Type) {\n case \"View\":\n if (isInline) {\n scene.setupMultipleViews(\"default\", { \"default\" : newURL});\n viewLoaded = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n else\n this.loadViewURL(newURL, finishCallback);\n break;\n case \"Settings\":\n this.loadSettings(item);\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n break;\n default:\n break;\n }\n }\n };\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGLTF = (region, url, finishCallback, options) => {\n const path = url.substring(0, url.lastIndexOf(\"/\") + 1);\n const filename = url.substring(url.lastIndexOf(\"/\") + 1, url.length);\n const loader = new GLTFLoader().setPath(path);\n loader.load( filename, function ( gltf ) {\n gltf.scene.children.forEach(child => {\n let localTimeEnabled = false;\n let localMorphColour = false;\n if (child.geometry && child.geometry.morphAttributes) {\n localTimeEnabled = child.geometry.morphAttributes.position ? true : false;\n localMorphColour = child.geometry.morphAttributes.color ? true : false;\n }\n const zincGeometry = new (require('./primitives/geometry').Geometry)();\n zincGeometry.setMesh(child.clone(), localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n zincGeometry.groupName = zincGeometry.morph.name;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n });\n })\n }\n\n let loadRegions = (currentRegion, referenceURL, regions, callback) => {\n if (regions.Primitives) {\n regions.Primitives.forEach(primitive => {\n let order = 1;\n if (primitive.Order)\n order = primitive.Order;\n readPrimitivesItem(currentRegion, referenceURL, primitive, order, callback);\n });\n }\n if (regions.Transformation) {\n currentRegion.setTransformation(regions.Transformation);\n }\n if (regions.Children) {\n for (const [regionName, value] of Object.entries(regions.Children)) {\n const childRegion = currentRegion.findOrCreateChildFromPath(regionName);\n if (childRegion) {\n loadRegions(childRegion, referenceURL, value, callback);\n }\n }\n }\n }\n\n let getNumberOfObjectsInRegions = (regionJson) => {\n let counts = regionJson.Primitives ? regionJson.Primitives.length : 0;\n if (regionJson.Children) {\n regionJson.Children.forEach(childRegion => {\n counts += getNumberOfObjectsInRegions(childRegion);\n });\n }\n return counts;\n }\n\n let getNumberOfObjects = (metadata) => {\n if (Array.isArray(metadata)) {\n return numberOfObjects = metadata.length;\n } else if (typeof metadata === \"object\" && metadata !== null) {\n if (metadata.version == \"2.0\") {\n return getNumberOfObjectsInRegions(metadata.Regions);\n }\n }\n }\n\n let loadVersionOne = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n // Prioritise the view file and settings before loading anything else\n for (let i = 0; i < metadata.length; i++)\n readViewAndSettingsItem(referenceURL, metadata[i], callback);\n for (let i = 0; i < metadata.length; i++) {\n //Render order is set to i * 2 to account for front and back rendering\n readPrimitivesItem(targetRegion, referenceURL, metadata[i], i * 2, callback);\n }\n }\n\n let loadVersionTwo = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n if (metadata.Settings)\n this.loadSettings(metadata.Settings);\n if (metadata.Views)\n loadMultipleViews(referenceURL, metadata.Views, referenceURL);\n if (metadata.Regions)\n loadRegions(targetRegion, referenceURL, metadata.Regions, callback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (targetRegion, url, finishCallback, allCompletedCallback) => {\n const xmlhttp = new XMLHttpRequest();\n var requestURL = resolveURL(url);\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n scene.resetMetadata();\n scene.resetDuration();\n viewLoaded = false;\n let referenceURL = xmlhttp.responseURL;\n if (referenceURL === undefined)\n referenceURL = (new URL(requestURL)).href;\n const metadata = JSON.parse(xmlhttp.responseText);\n if (Array.isArray(metadata)) {\n loadVersionOne(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n } else if (typeof metadata === \"object\" && metadata !== null) {\n if (metadata.Version == \"2.0\") {\n loadVersionTwo(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n }\n }\n }\n }\n\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n}\n","module.exports = require(\"three/examples/jsm/loaders/STLLoader\");","module.exports = require(\"three/examples/jsm/loaders/OBJLoader\");","module.exports = require(\"three/examples/jsm/loaders/GLTFLoader\");","const GLTFExporter = require('./three/GLTFExporter').GLTFExporter;\n\n/**\n * Provides an object which uses for exporting the scene\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst SceneExporter = function (sceneIn) {\n const scene = sceneIn;\n\n\tthis.exportGLTF = (binary) => {\n const rootRegion = scene.getRootRegion();\n const zincObjects = rootRegion.getAllObjects(true);\n const animations = [];\n zincObjects.forEach(zincObject => {\n if (zincObject.animationClip) {\n animations.push({clip: zincObject.animationClip[0], mesh: zincObject.morph});\n }\n });\n const exporter = new GLTFExporter();\n const options = { binary, animations };\n return new Promise((resolve, reject) => {\n exporter.parse( scene.getThreeJSScene(), function ( gltf ) {\n resolve(gltf);\n }, options );\n });\n\t}\n}\n\nexports.SceneExporter = SceneExporter;\n","import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRGBFormat,\n\tRepeatWrapping,\n\tScene,\n\tVector3\n} from 'three';\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsPBRSpecularGlossiness( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tUNSIGNED_BYTE: 0x1401,\n\tUNSIGNED_SHORT: 0x1403,\n\tFLOAT: 0x1406,\n\tUNSIGNED_INT: 0x1405,\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\tif ( window.TextEncoder !== undefined ) {\n\n\t\treturn new TextEncoder().encode( text ).buffer;\n\n\t}\n\n\tconst array = new Uint8Array( new ArrayBuffer( text.length ) );\n\n\tfor ( let i = 0, il = text.length; i < il; i ++ ) {\n\n\t\tconst value = text.charCodeAt( i );\n\n\t\t// Replacing multi-byte character with space(0x20).\n\t\tarray[ i ] = value > 0xFF ? 0x20 : value;\n\n\t}\n\n\treturn array.buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nlet cachedCanvas = null;\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\t\tthis.extensionsUsed = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter'\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\twrite( input, onDone, options ) {\n\n\t\tthis.options = Object.assign( {}, {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\ttruncateDrawRange: true,\n\t\t\tembedImages: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tconst writer = this;\n\n\t\tPromise.all( this.pending ).then( function () {\n\n\t\t\tconst buffers = writer.buffers;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\t\t// Merge buffers.\n\t\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t\t// Declare extensions.\n\t\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\n\t\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\n\t\t\t// Update bytelength of the single buffer.\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\treader.readAsArrayBuffer( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t// Binary chunk.\n\t\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t\t// JSON chunk.\n\t\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t\t// GLB header.\n\t\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\t\theader,\n\t\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\t\tjsonChunk,\n\t\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\t\tbinaryChunk\n\t\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\t\tconst glbReader = new window.FileReader();\n\t\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\t\tonDone( glbReader.result );\n\n\t\t\t\t\t};\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tif ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\t\tonDone( json );\n\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n if (object.userData && object.userData.isZincObject) return;\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Assign and return a temporal unique id for an object\n\t * especially which doesn't have .uuid\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( object ) {\n\n\t\tif ( ! this.uids.has( object ) ) this.uids.set( object, this.uid ++ );\n\n\t\treturn this.uids.get( object );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tif ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\tcomponentSize = 1;\n\n\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\tcomponentSize = 2;\n\n\t\t} else {\n\n\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * attribute.itemSize * componentSize );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = attribute.itemSize * componentSize;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise<Integer>}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new window.FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst options = this.options;\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array (float, uint or ushort)\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type.' );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined ) count = attribute.count;\n\n\t\t// @TODO Indexed buffer geometry with drawRange not supported yet\n\t\tif ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {\n\n\t\t\tconst end = start + count;\n\t\t\tconst end2 = geometry.drawRange.count === Infinity\n\t\t\t\t? attribute.count\n\t\t\t\t: geometry.drawRange.start + geometry.drawRange.count;\n\n\t\t\tstart = Math.max( start, geometry.drawRange.start );\n\t\t\tcount = Math.min( end, end2 ) - start;\n\n\t\t\tif ( count < 0 ) count = 0;\n\n\t\t}\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (e.g. RGBFormat, RGBAFormat etc)\n\t * @param {Boolean} flipY before writing out the image\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY ) {\n\n\t\tconst writer = this;\n\t\tconst cache = writer.cache;\n\t\tconst json = writer.json;\n\t\tconst options = writer.options;\n\t\tconst pending = writer.pending;\n\n\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\tconst cachedImages = cache.images.get( image );\n\t\tconst mimeType = format === RGBAFormat ? 'image/png' : 'image/jpeg';\n\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\tif ( ! json.images ) json.images = [];\n\n\t\tconst imageDef = { mimeType: mimeType };\n\n\t\tif ( options.embedImages ) {\n\n\t\t\tconst canvas = cachedCanvas = cachedCanvas || document.createElement( 'canvas' );\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d' );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t} else {\n\n\t\t\t\tif ( format !== RGBAFormat && format !== RGBFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGB and RGBA formats are supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tif ( format === RGBAFormat ) {\n\n\t\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, j = 0; i < data.length; i += 4, j += 3 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ j + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ j + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ j + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = 255;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push( new Promise( function ( resolve ) {\n\n\t\t\t\t\tcanvas.toBlob( function ( blob ) {\n\n\t\t\t\t\t\twriter.processBufferViewImage( blob ).then( function ( bufferViewIndex ) {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\t\t\t\t\t\t\tresolve();\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}, mimeType );\n\n\t\t\t\t} ) );\n\n\t\t\t} else {\n\n\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\timageDef.uri = image.src;\n\n\t\t}\n\n\t\tconst index = json.images.push( imageDef ) - 1;\n\t\tcachedImages[ key ] = index;\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tif ( material.metalnessMap === material.roughnessMap ) {\n\n\t\t\t\tconst metalRoughMapDef = { index: this.processTexture( material.metalnessMap ) };\n\t\t\t\tthis.applyTextureTransform( metalRoughMapDef, material.metalnessMap );\n\t\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = { index: this.processTexture( material.map ) };\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\t// note: emissive components are limited to stay within the 0 - 1 range to accommodate glTF spec. see #21849 and #22000.\n\t\t\tconst emissive = material.emissive.clone().multiplyScalar( material.emissiveIntensity );\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 1 ) {\n\n\t\t\t\temissive.multiplyScalar( 1 / maxEmissiveComponent );\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited' );\n\n\t\t\t}\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = { index: this.processTexture( material.normalMap ) };\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== - 1 ) {\n\n\t\t\t\tif ( material.normalScale.x !== material.normalScale.y ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Normal scale components are different, ignoring Y and exporting X.' );\n\n\t\t\t\t}\n\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: 1\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tif ( geometry.isBufferGeometry !== true ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.' );\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv2: 'TEXCOORD_1',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.substr( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n \n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' && attributeName !== 'color' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tlet gltfAttributeName = attributeName.toUpperCase();\n\n if ( nameConversion[ attributeName ] ) {\n\n gltfAttributeName = nameConversion[ attributeName ];\n\n }\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = baseAttribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n if (baseAttribute) {\n \n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n if (baseAttribute.count > j) {\n\n relativeAttribute.setXYZ(\n j,\n attribute.getX( j ) - baseAttribute.getX( j ),\n attribute.getY( j ) - baseAttribute.getY( j ),\n attribute.getZ( j ) - baseAttribute.getZ( j )\n );\n\n }\n\n }\n\n } else {\n\n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n relativeAttribute.setXYZ(\n j,\n 0,\n 0,\n 0\n );\n\n }\n\n }\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array<THREE.Object3D>} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ].clip, options.animations[i].mesh);\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( light.penumbra - 1.0 ) * light.angle * - 1.0;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Specular-Glossiness Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n */\nclass GLTFMaterialsPBRSpecularGlossiness {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_pbrSpecularGlossiness';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isGLTFSpecularGlossinessMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorFactor ) {\n\n\t\t\textensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;\n\n\t\t}\n\n\t\tconst specularFactor = [ 1, 1, 1 ];\n\t\tmaterial.specular.toArray( specularFactor, 0 );\n\t\textensionDef.specularFactor = specularFactor;\n\t\textensionDef.glossinessFactor = material.glossiness;\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorTexture ) {\n\n\t\t\textensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tconst specularMapDef = { index: writer.processTexture( material.specularMap ) };\n\t\t\twriter.applyTextureTransform( specularMapDef, material.specularMap );\n\t\t\textensionDef.specularGlossinessTexture = specularMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\n\nconst Viewport = function () {\n\tthis.nearPlane = 0.168248;\n\tthis.farPlane = 6.82906;\n\tthis.eyePosition = [0.5, -2.86496, 0.5];\n\tthis.targetPosition = [0.5, 0.5, 0.5];\n\tthis.upVector = [ 0.0, 0.0, 1.0];\n\tconst _this = this;\n\n this.setFromObject = ({ nearPlane, farPlane, eyePosition, targetPosition, upVector }) => {\n _this.nearPlane = nearPlane;\n _this.farPlane = farPlane;\n _this.eyePosition = eyePosition;\n _this.targetPosition = targetPosition;\n _this.upVector = upVector;\n }\n\n};\n\nconst CameraControls = function ( object, domElement, renderer, scene ) {\n\tconst MODE = { NONE: -1, DEFAULT: 0, PATH: 1, SMOOTH_CAMERA_TRANSITION: 2, AUTO_TUMBLE: 3, ROTATE_TRANSITION: 4, MINIMAP: 5, SYNC_CONTROL: 6 };\n\tconst STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM: 4, TOUCH_PAN: 5, SCROLL: 6 };\n\tconst CLICK_ACTION = {};\n\tCLICK_ACTION.MAIN = STATE.ROTATE;\n\tCLICK_ACTION.AUXILIARY = STATE.ZOOM;\n\tCLICK_ACTION.SECONDARY = STATE.PAN;\n\tthis.cameraObject = object;\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\tthis.renderer = renderer;\n\tthis.scene = scene ;\n\tthis.tumble_rate = 1.5;\n\tthis.pointer_x = 0;\n\tthis.pointer_y = 0;\n\tthis.pointer_x_start = 0;\n\tthis.pointer_y_start = 0;\n\tthis.previous_pointer_x = 0;\n\tthis.previous_pointer_y = 0;\n\tthis.near_plane_fly_debt = 0.0;\n\tthis.touchZoomDistanceStart = 0;\n\tthis.touchZoomDistanceEnd = 0;\n\tthis.directionalLight = 0;\n\tthis.scrollRate = 50;\n\tlet duration = 6000;\n\tlet inbuildTime = 0;\n\tlet cameraPath = undefined;\n\tlet numberOfCameraPoint = undefined;\n\tlet updateLightWithPathFlag = false;\n\tlet playRate = 500;\n\tlet deviceOrientationControl = undefined;\n\tlet defaultViewport = \"default\";\n\tlet currentMode = MODE.DEFAULT;\n\tlet smoothCameraTransitionObject = undefined;\n\tlet rotateCameraTransitionObject = undefined;\n\tlet cameraAutoTumbleObject = undefined;\n\tlet mouseScroll = 0;\n\tthis._state = STATE.NONE;\n\tlet zincRayCaster = undefined;\n\tthis.targetTouchId = -1;\n let rect = undefined;\n const _a = new THREE.Vector3();\n const _b = new THREE.Vector3();\n const _c = new THREE.Vector3();\n const _new_b = new THREE.Vector3();\n const _new_c = new THREE.Vector3();\n const _axis = new THREE.Vector3();\n const _v = new THREE.Vector3();\n const _rel_eye = new THREE.Vector3();\n const sceneSphere = new THREE.Sphere();\n const _tempEye = new THREE.Vector3();\n let ndcControl = undefined;\n let maxDist = 0;\n const viewports = {\n \"default\" : new Viewport()\n };\n viewports.default.nearPlane = 0.1;\n\tviewports.default.farPlane = 2000;\n\tviewports.default.eyePosition = [0, 0, 0];\n\tviewports.default.targetPosition = [0, 0, -1.0];\n\tviewports.default.upVector = [ 0.0, 1.0, 0.0];\n\n //Add the target property\n\tif (this.cameraObject.target === undefined)\n\t\tthis.cameraObject.target = new THREE.Vector3( ...viewports.default.targetPosition );\n\n //Calculate the max distanc allowed, it is the longer\n //of 6 times the radius of the current scene and\n //the current distance between scene centroid and the postion\n //of the camera.\n this.calculateMaxAllowedDistance = (scene) => {\n const box = scene.getBoundingBox();\n if (box) {\n box.getBoundingSphere(sceneSphere);\n maxDist = sceneSphere.radius * 6;\n let currentDist = 0;\n if (this.cameraObject) {\n currentDist = this.cameraObject.position.distanceTo(sceneSphere.center);\n }\n maxDist = currentDist > maxDist ? currentDist : maxDist;\n } else {\n maxDist = 0;\n }\n }\n\n this.addViewport = (viewportName, viewport) => {\n if (viewportName && viewport)\n viewports[viewportName] = viewport;\n }\n\n this.setDefaultViewport = defaultName => {\n\t\tif (defaultName && (defaultName in viewports)) {\n defaultViewport = defaultName;\n }\t\n\t}\n\n this.getDefaultViewport = () => {\n\t\treturn defaultViewport;\n\t}\n\t\n\tthis.getViewportOfName = name => {\n\t\treturn viewports[name];\n\t}\n\n this.setCurrentViewport = name => {\n if (name in viewports) {\n this.setCurrentCameraSettings(viewports[name])\n return true;\n }\n return false;\n\t}\n\t\n\tthis.onResize = () => {\n\t\tif (rect)\n\t\t\trect = undefined;\n if (ndcControl)\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n\t}\n\t\n\tthis.setMouseButtonAction = (buttonName, actionName) => {\n\t\tCLICK_ACTION[buttonName] = STATE[actionName];\n }\n\n //Make sure the camera does not travel beyond limit\n const checkTravelDistance = () => {\n if (maxDist > 0) {\n const newDist = _tempEye.distanceTo(sceneSphere.center);\n return (maxDist > newDist || \n this.cameraObject.position.distanceTo(sceneSphere.center) > newDist );\n }\n return true;\n }\n \n const translateViewport = translation => {\n _tempEye.copy(this.cameraObject.position).add(translation);\n if (checkTravelDistance()) {\n this.cameraObject.target.add(translation);\n this.cameraObject.position.add(translation);\n this.updateDirectionalLight();\n }\n }\n\t\n\tconst onDocumentMouseDown = event => {\n\t\tif (rect === undefined)\n rect = this.domElement.getBoundingClientRect();\n // Check if mouse event hapens inside the minimap\n let minimapCoordinates = undefined;\n if (currentMode === MODE.DEFAULT)\n minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(\n this.renderer, event);\n if (!minimapCoordinates) {\n if (event.button == 0) {\n if (event.ctrlKey)\n this._state = CLICK_ACTION.AUXILIARY;\n else if (event.shiftKey)\n this._state = CLICK_ACTION.SECONDARY;\n else\n this._state = CLICK_ACTION.MAIN;\n } else if (event.button == 1) {\n event.preventDefault();\n this._state = CLICK_ACTION.AUXILIARY;\n } \n else if (event.button == 2) {\n this._state = CLICK_ACTION.SECONDARY;\n }\n this.pointer_x = event.clientX - rect.left;\n this.pointer_y = event.clientY - rect.top;\n this.pointer_x_start = this.pointer_x;\n this.pointer_y_start = this.pointer_y;\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y= this.pointer_y;\n } else {\n currentMode = MODE.MINIMAP;\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n }\n\n\tconst onDocumentMouseMove = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tthis.pointer_x = event.clientX - rect.left;\n\t\tthis.pointer_y = event.clientY - rect.top;\n if (currentMode === MODE.MINIMAP) {\n let minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(this.renderer, event);\n if (minimapCoordinates) {\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n } else {\n if ((this._state === STATE.NONE) && (zincRayCaster !== undefined)) {\n zincRayCaster.move(this, event.clientX, event.clientY, this.renderer);\n }\n }\n\t}\n\t\n\tconst onDocumentMouseUp = event => {\n this._state = STATE.NONE;\n if (currentMode == MODE.MINIMAP)\n currentMode = MODE.DEFAULT;\n\t\tif (zincRayCaster !== undefined) {\n\t\t\tif (this.pointer_x_start==(event.clientX - rect.left) && this.pointer_y_start==(event.clientY- rect.top)) {\n\t\t\t\tzincRayCaster.pick(this, event.clientX, event.clientY, this.renderer);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentMouseLeave = event => {\n\t\tthis._state = STATE.NONE;\n\t}\n\t\n\tconst onDocumentTouchStart = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis._state = STATE.TOUCH_ROTATE;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.pointer_x_start = this.pointer_x;\n\t\t\tthis.pointer_y_start = this.pointer_y;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\n\t\t} else if (len == 2) {\n\t\t\tthis._state = STATE.TOUCH_ZOOM;\n\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\tthis.touchZoomDistanceEnd = this.touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\t\t} else if (len == 3) {\n\t\t\tthis._state = STATE.TOUCH_PAN;\n\t\t\tthis.targetTouchId = event.touches[0].identifier;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchMove = event => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t} else if (len == 2) {\n\t\t\tif (this._state === STATE.TOUCH_ZOOM) {\n\t\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\t\tthis.touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\t\t\t}\n\t\t} else if (len == 3) {\n\t\t\tif (this._state === STATE.TOUCH_PAN) {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tif (event.touches[i].identifier == this.targetTouchId) {\n\t\t\t\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\t\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchEnd = event => {\n\t\tconst len = event.touches.length;\n\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd = 0;\n\t\tthis.targetTouchId = -1;\n\t\tthis._state = STATE.NONE;\n\t\tif (len == 1) {\n\t\t\tif (zincRayCaster !== undefined) {\n\t\t\t\tif (this.pointer_x_start==(event.touches[0].clientX- rect.left) && this.pointer_y_start==(event.touches[0].clientY- rect.top)) {\n\t\t\t\t\tzincRayCaster.pick(this.cameraObject, event.touches[0].clientX, event.touches[0].clientY, this.renderer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentWheelEvent = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tthis._state = STATE.SCROLL;\n\t\tlet changes = 0;\n\t\tif (event.deltaY > 0)\n\t\t\tchanges = this.scrollRate;\n\t\telse if (event.deltaY < 0)\n\t\t\tchanges = this.scrollRate * -1;\n\t\tmouseScroll = mouseScroll + changes;\n\t\tevent.preventDefault(); \n\t\tevent.stopImmediatePropagation(); \n\t}\t\n\n\tconst translate = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst height = rect.height;\n\t\t\tconst distance = this.cameraObject.position.distanceTo(this.cameraObject.target);\n\t\t\tlet fact = 0.0;\n\t\t\tif ((this.cameraObject.far > this.cameraObject.near) && (distance >= this.cameraObject.near) &&\n\t\t\t\t(distance <= this.cameraObject.far))\n\t\t\t{\n\t\t\t\t fact = (distance-this.cameraObject.near)/(this.cameraObject.far-this.cameraObject.near);\n }\n //_b == old_near, _c = old_far, _new_b = new_near, _new_c = new_far\n\t\t\t_b.set(this.previous_pointer_x,height - this.previous_pointer_y,0.0);\n\t\t\t_c.set(this.previous_pointer_x, height - this.previous_pointer_y,1.0);\n\t\t\t_new_b.set(this.pointer_x,height - this.pointer_y,0.0);\n\t\t\t_new_c.set(this.pointer_x,height - this.pointer_y,1.0);\n\t\t\t_b.unproject(this.cameraObject);\n\t\t\t_c.unproject(this.cameraObject);\n\t\t\t_new_b.unproject(this.cameraObject);\n\t\t\t_new_c.unproject( this.cameraObject);\n const translate_rate = -0.002;\n _new_b.sub(_b).multiplyScalar(1.0-fact);\n _new_c.sub(_c).multiplyScalar(fact);\n _new_b.add(_new_c).multiplyScalar(translate_rate);\n translateViewport(_new_b);\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\n\tthis.getVectorsFromRotateAboutLookAtPoints = (axis, angle) => {\n axis.normalize();\n\t _v.copy(this.cameraObject.position).sub(this.cameraObject.target);\n\t _rel_eye.copy(_v);\n\t _v.normalize()\n\t if (0.8 < Math.abs(_v.dot(axis))) {\n\t _v.copy(this.cameraObject.up);\n }\n _b.crossVectors(axis, _v).normalize();\n _c.crossVectors(axis, _b);\n\t const rel_eyea = axis.dot(_rel_eye);\n\t const rel_eyeb = _b.dot(_rel_eye);\n\t const rel_eyec = _c.dot(_rel_eye);\n\t const upa = axis.dot(this.cameraObject.up); \n\t const upb = _b.dot(this.cameraObject.up);\n\t const upc = _c.dot(this.cameraObject.up);\n\t const cos_angle = Math.cos(angle);\n\t const sin_angle = Math.sin(angle);\n _new_b.set(cos_angle*_b.x+sin_angle*_c.x,\n\t cos_angle*_b.y+sin_angle*_c.y,\n\t cos_angle*_b.z+sin_angle*_c.z);\n\t _new_c.set(cos_angle*_c.x-sin_angle*_b.x,\n\t cos_angle*_c.y-sin_angle*_b.y,\n\t cos_angle*_c.z-sin_angle*_b.z); \n _v.copy(this.cameraObject.target);\n\t _v.x = _v.x + axis.x*rel_eyea + _new_b.x*rel_eyeb+_new_c.x*rel_eyec;\n\t _v.y = _v.y + axis.y*rel_eyea + _new_b.y*rel_eyeb+_new_c.y*rel_eyec;\n\t _v.z = _v.z + axis.z*rel_eyea + _new_b.z*rel_eyeb+_new_c.z*rel_eyec;\n\t _a.set(axis.x*upa+_new_b.x*upb+_new_c.x*upc,\n axis.y*upa+_new_b.y*upb+_new_c.y*upc,\n axis.z*upa+_new_b.z*upb+_new_c.z*upc);\n\t return {position: _v, up: _a};\n\t}\n\t\n\tthis.rotateAboutLookAtpoint = (axis, angle) => {\n\t const returned_values = this.getVectorsFromRotateAboutLookAtPoints(axis, angle);\n\t this.cameraObject.position.copy(returned_values.position);\n\t this.updateDirectionalLight();\n\t this.cameraObject.up.copy(returned_values.up);\n\t}\n\n\tconst tumble = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n\t\t\tconst height = rect.height;\n\t\t\tif ((0<width)&&(0<height))\n\t\t\t{\n\t\t\t\tconst radius=0.25*(width+height);\n\t\t\t\tdelta_x=this.pointer_x-this.previous_pointer_x;\n\t\t\t\tdelta_y=this.previous_pointer_y-this.pointer_y;\n\t\t\t\tconst tangent_dist = Math.sqrt(delta_x*delta_x + delta_y*delta_y);\n\t\t\t\tif (tangent_dist > 0)\n\t\t\t\t{\n\t\t\t\t\tconst dx=-delta_y*1.0/tangent_dist;\n\t\t\t\t\tconst dy=delta_x*1.0/tangent_dist;\n\t\t\t\t\tlet d=dx*(this.pointer_x-0.5*(width-1))+dy*(0.5*(height-1)-this.pointer_y);\n\t\t\t\t\tif (d > radius)\t{\n\t\t\t\t\t\td = radius;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (d < -radius) {\n\t\t\t\t\t\t\td = -radius;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t\t\t\tconst angle=this.tumble_rate*tangent_dist/radius;\n\t\t\t\t\t_a.copy(this.cameraObject.position).sub(this.cameraObject.target).normalize();\n\t\t\t\t\t_b.copy(this.cameraObject.up).normalize();\n _c.copy(_b).cross(_a).normalize().multiplyScalar(dx);\n _b.multiplyScalar(dy);\n _axis.addVectors(_c, _b).multiplyScalar(Math.cos(phi));\n _a.multiplyScalar(Math.sin(phi));\n _axis.add(_a);\n\t\t\t\t\tthis.rotateAboutLookAtpoint(_axis, -angle);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\t\n\tconst calculateZoomDelta = () => {\n\t\tlet delta = 0;\n\t\tif (this._state === STATE.ZOOM)\n\t\t{\n\t\t\tdelta = this.previous_pointer_y-this.pointer_y;\n\t\t} else if (this._state === STATE.SCROLL) {\n\t\t\tdelta = mouseScroll;\n\t\t} else {\n\t\t\tdelta = -1.0 * (this.touchZoomDistanceEnd - this.touchZoomDistanceStart);\n\t\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd;\n\t\t}\n\t\treturn delta;\n }\n\n this.changeZoomByScrollRateUnit = unit => {\n const delta_y = unit * this.scrollRate;\n this.changeZoomByValue(delta_y);\n }\n \n this.changeZoomByValue = delta_y => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n const height = rect.height;\n\n\t\t\tconst a = this.cameraObject.position.clone();\n\t\t\ta.sub(this.cameraObject.target);\n\t\t\tconst dist = a.length();\n\t\t\tconst dy = 1.5 * delta_y/height;\n\t\t\tif ((dist + dy*dist) > 0.01) {\n\t\t\t\ta.normalize()\n _tempEye.copy(this.cameraObject.position);\n\t\t\t\t_tempEye.x += a.x*dy*dist;\n\t\t\t\t_tempEye.y += a.y*dy*dist;\n\t\t\t\t_tempEye.z += a.z*dy*dist;\n if (checkTravelDistance()) {\n this.cameraObject.position.copy(_tempEye);\n this.updateDirectionalLight();\n const near_far_minimum_ratio = 0.00001;\n if ((near_far_minimum_ratio * this.cameraObject.far) <\n (this.cameraObject.near + dy*dist + this.near_plane_fly_debt)) {\n if (this.near_plane_fly_debt != 0.0)\t{\n this.near_plane_fly_debt += dy*dist;\n if (this.near_plane_fly_debt > 0.0) {\n this.cameraObject.near += this.near_plane_fly_debt;\n this.cameraObject.far += this.near_plane_fly_debt;\n this.near_plane_fly_debt = 0.0;\n }\n else {\n this.cameraObject.near += dy*dist;\n this.cameraObject.far += dy*dist;\n }\n }\t\t\t\n }\n else {\n if (this.near_plane_fly_debt == 0.0) {\n const diff = this.cameraObject.near - near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.near = near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.far -= diff;\n this.near_plane_fly_debt -= near_far_minimum_ratio * this.cameraObject.far;\n }\n this.near_plane_fly_debt += dy*dist;\n }\n }\n\t\t\t}\n\t\t}\n }\n\t\n\tconst flyZoom = () => {\n const delta_y = calculateZoomDelta();\n this.changeZoomByValue(delta_y);\n \n\t\tif (this._state === STATE.ZOOM) {\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y = this.pointer_y;\n\t\t}\n\t\tif (this._state === STATE.SCROLL) {\n\t\t\tmouseScroll = 0;\n\t\t}\n\t}\n\t\n\tthis.setDirectionalLight = directionalLightIn => {\n\t\tthis.directionalLight = directionalLightIn;\n\t};\n\t\n\tthis.updateDirectionalLight = () => {\n\t\tif (this.directionalLight != 0) {\n\t\t\tthis.directionalLight.position.set(this.cameraObject.position.x,\n\t\t\t\t\tthis.cameraObject.position.y,\n\t\t\t\t\tthis.cameraObject.position.z);\n\t\t}\n\t}\n\t\n\t\n\tthis.enable = function () {\n\t\tenabled = true;\n\t\tif (this.domElement && this.domElement.addEventListener) {\n\t\t\tthis.domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.addEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.addEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.addEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.addEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.addEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.addEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\t\n\tthis.disable = function () {\n\t\tenabled = false;\n\t\tif (this.domElement && this.domElement.removeEventListener) {\n\t\t\tthis.domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.removeEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\n\tthis.loadPath = pathData => {\n\t\tcameraPath = pathData.CameraPath;\n\t\tnumberOfCameraPoint = pathData.NumberOfPoints;\n\t}\n\t\n\tthis.loadPathURL = (path_url, finishCallback) => {\n\t\tconst xmlhttp = new XMLHttpRequest();\n\t\txmlhttp.onreadystatechange = () => {\n\t\t if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n\t\t const pathData = JSON.parse(xmlhttp.responseText);\n\t\t this.loadPath(pathData);\n\t if (finishCallback != undefined && (typeof finishCallback == 'function'))\n\t finishCallback();\n\t\t }\n\t\t}\n\t\trequestURL = resolveURL(path_url);\n\t\txmlhttp.open(\"GET\", requestURL, true);\n\t\txmlhttp.send();\n\t}\n\t\n\tthis.setPathDuration = durationIn => {\n duration = durationIn;\n if (smoothCameraTransitionObject)\n smoothCameraTransitionObject.setDuration(duration);\n if (rotateCameraTransitionObject)\n rotateCameraTransitionObject.setDuration(duration);\n\t}\n\t\n\t this.getPlayRate = () => {\n\t return playRate;\n\t }\n\t\n\tthis.setPlayRate = playRateIn => {\n\t\tplayRate = playRateIn;\n\t}\n\t \n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = targetTime - duration\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\t this.getTime = () => {\n\t return inbuildTime;\n\t }\n\t\n\tthis.setTime = timeIn => {\n\t if (timeIn > duration)\n\t inbuildTime = duration;\n\t else if (timeIn < 0.0)\n\t inbuildTime = 0.0;\n\t else\n\t inbuildTime = timeIn;\n\t}\n\t\n\tthis.getNumberOfTimeFrame = () => {\n\t\treturn numberOfCameraPoint;\n\t}\n\t\n\tthis.getCurrentTimeFrame = () => {\n\t if (numberOfCameraPoint > 2) {\n \t\tconst current_time = inbuildTime/duration * (numberOfCameraPoint - 1);\n \t\tconst bottom_frame = Math.floor(current_time);\n \t\tconst proportion = 1 - (current_time - bottom_frame);\n \t\tconst top_frame = Math.ceil(current_time);\n \t\tif (bottom_frame == top_frame) {\n \t\t\tif (bottom_frame == numberOfCameraPoint - 1) {\n \t\t\t\treturn [bottom_frame - 1, top_frame, 0];\n \t\t\t} else {\n \t\t\t\treturn [bottom_frame, top_frame + 1, 1.0];\n \t\t\t}\n \t\t}\n \t\treturn [bottom_frame, top_frame, proportion];\n\t } else if (numberOfCameraPoint == 1) {\n\t return [0, 0, 0];\n\t }\n\t \n\t return undefined;\n\t}\n\t\n\tthis.setCurrentTimeFrame = targetTimeFrame => {\n\t if (numberOfCameraPoint > 2) {\n \t\tinbuildTime = duration * targetTimeFrame / (numberOfCameraPoint - 1);\n \t\tif (inbuildTime < 0.0)\n \t\t\tinbuildTime = 0.0;\n \t\tif (inbuildTime > duration)\n \t\t\tinbuildTime = duration;\n\t }\n\t}\n\n\tconst updatePath = delta => {\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdateTime(delta);\n\t\t\tif (cameraPath) {\n\t\t\t\tconst time_frame = this.getCurrentTimeFrame();\n\t\t\t\tconst bottom_frame = time_frame[0];\n\t\t\t\tconst top_frame = time_frame[1];\n\t\t\t\tconst proportion = time_frame[2];\n\t\t\t\tconst bot_pos = [cameraPath[bottom_frame*3], cameraPath[bottom_frame*3+1], cameraPath[bottom_frame*3+2]];\n\t\t\t\tconst top_pos = [cameraPath[top_frame*3], cameraPath[top_frame*3+1], cameraPath[top_frame*3+2]];\n\t\t\t\tconst current_positions = [];\n\t\t\t\tfor (let i = 0; i < bot_pos.length; i++) {\n\t\t\t\t\tcurrent_positions.push(proportion * bot_pos[i] + (1.0 - proportion) * top_pos[i]);\n\t\t\t\t}\n\t\t\t\tthis.cameraObject.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\tthis.cameraObject.target.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\tif (deviceOrientationControl)\n\t\t\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t\t\tif (updateLightWithPathFlag) {\n\t\t\t\t\tthis.directionalLight.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\t\tthis.directionalLight.target.position.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t};\n\t\n\tthis.calculatePathNow = () => {\n\t updatePath(0.0);\n\t}\n\n handleSyncControl = () => {\n if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN)){\n translate();\n ndcControl.triggerCallback();\n } else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL)){\n ndcControl.zoom(calculateZoomDelta());\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y = this.pointer_y;\n mouseScroll = 0;\n ndcControl.triggerCallback();\n }\n }\n\t\n\tthis.update = timeChanged => {\n\t\tconst delta = timeChanged * playRate;\n\t\tlet controlEnabled = enabled;\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdatePath(delta);\n\t\t} else if (currentMode === MODE.SMOOTH_CAMERA_TRANSITION && smoothCameraTransitionObject) {\n\t\t\tsmoothCameraTransitionObject.update(delta);\n\t\t\tif (smoothCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\tsmoothCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.ROTATE_CAMERA_TRANSITION && rotateCameraTransitionObject) {\n\t\t\trotateCameraTransitionObject.update(delta);\n\t\t\tif (rotateCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\trotateCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject) {\n\t\t\tcameraAutoTumbleObject.update(delta);\n\t\t} else if (currentMode === MODE.SYNC_CONTROL && ndcControl) {\n handleSyncControl();\n controlEnabled = false;\n }\n\t\tif (controlEnabled) {\n\t\t\tif ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE)){\n\t\t\t\ttumble();\n\t\t\t} else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN)){\n\t\t\t\ttranslate();\n\t\t\t} else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL)){\n\t\t\t\tflyZoom();\n\t\t\t}\n\t\t\tif (this._state !== STATE.NONE) {\n\t\t\t\tif (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject &&\n\t\t\t\t\t\tcameraAutoTumbleObject.stopOnCameraInput) {\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._state === STATE.SCROLL)\n\t\t\t\tthis._state = STATE.NONE;\n\t\t}\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.update();\n\t\t\t//this.directionalLight.target.position.set(this.cameraObject.target.x, \n\t\t\t//\tthis.cameraObject.target.y, this.cameraObject.target.z);\n\t\t} else {\n\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t}\n\t};\n\t\n\tthis.playPath = () => {\n\t\tcurrentMode = MODE.PATH;\n\t}\n\t\n\tthis.stopPath = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\t\n\tthis.isPlayingPath = () => {\n\t\treturn (currentMode === MODE.PATH);\n\t}\n\t\n\tthis.enableDirectionalLightUpdateWithPath = flag => {\n\t\tupdateLightWithPathFlag = flag;\n\t}\n\t\n\tthis.enableDeviceOrientation = () => {\n\t\tif (!deviceOrientationControl)\n\t\t\tdeviceOrientationControl = new ModifiedDeviceOrientationControls(this.cameraObject);\n\t}\n\t\n\tthis.disableDeviceOrientation = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.dispose();\n\t\t\tdeviceOrientationControl = undefined;\n\t\t}\n\t}\n\t\n\tthis.isDeviceOrientationEnabled = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tthis.resetView = () => {\n const viewport = viewports[defaultViewport];\n\t\tthis.cameraObject.near = viewport.nearPlane;\n\t\tthis.cameraObject.far = viewport.farPlane;\n\t\tthis.cameraObject.position.set( viewport.eyePosition[0], viewport.eyePosition[1],\n viewport.eyePosition[2]);\n\t\tthis.cameraObject.target.set( viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2] );\n\t\tthis.cameraObject.up.set( viewport.upVector[0], viewport.upVector[1],\n viewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\n\t\n\tthis.setCurrentCameraSettings = newViewport => {\n\t\tif (newViewport.nearPlane)\n\t\t\tthis.cameraObject.near = newViewport.nearPlane;\n\t\tif (newViewport.farPlane)\n\t\t\tthis.cameraObject.far = newViewport.farPlane;\n\t\tif (newViewport.eyePosition)\n\t\t\tthis.cameraObject.position.set( newViewport.eyePosition[0], \n\t\t\t\t\tnewViewport.eyePosition[1], newViewport.eyePosition[2]);\n\t\tif (newViewport.targetPosition)\n\t\t\tthis.cameraObject.target.set( newViewport.targetPosition[0],\n\t\t\t\t\tnewViewport.targetPosition[1], newViewport.targetPosition[2] );\n\t\tif (newViewport.upVector)\n\t\t\tthis.cameraObject.up.set( newViewport.upVector[0], newViewport.upVector[1],\n\t\t\t\t\tnewViewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\t\n\tthis.getViewportFromCentreAndRadius = (centreX, centreY, centreZ, radius, view_angle, clip_distance) => {\n\t\tlet eyex = this.cameraObject.position.x-this.cameraObject.target.x;\n\t\tlet eyey = this.cameraObject.position.y-this.cameraObject.target.y;\n\t\tlet eyez = this.cameraObject.position.z-this.cameraObject.target.z;\n\t\tconst fact = 1.0/Math.sqrt(eyex*eyex+eyey*eyey+eyez*eyez);\n\t\teyex = eyex * fact;\n\t\teyey = eyey * fact;\n\t\teyez = eyez * fact;\n\t\t/* look at the centre of the sphere */\n\t\tconst localTargetPosition = [centreX, centreY, centreZ];\n\t\t/* shift the eye position to achieve the desired view_angle */\n\t\tconst eye_distance = radius/Math.tan(view_angle*Math.PI/360.0);\n\t\tconst localEyePosition = [ centreX + eyex*eye_distance, centreY + eyey*eye_distance,\n\t\t centreZ + eyez*eye_distance];\n\t\tconst localFarPlane = eye_distance+clip_distance;\n\t\tlet localNearPlane = 0.0;\n\t\tconst nearClippingFactor = 0.95;\n\t\tif (clip_distance > nearClippingFactor*eye_distance)\n\t\t{\n\t\t\tlocalNearPlane = (1.0 - nearClippingFactor)*eye_distance;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlocalNearPlane = eye_distance - clip_distance;\n\t\t}\n\t\tconst newViewport = new Viewport();\n\t\tnewViewport.nearPlane = localNearPlane;\n\t\tnewViewport.farPlane = localFarPlane;\n\t\tnewViewport.eyePosition = localEyePosition;\n\t\tnewViewport.targetPosition = localTargetPosition;\n\t\tnewViewport.upVector = [this.cameraObject.up.x, this.cameraObject.up.y,\n\t\t this.cameraObject.up.z];\n\t\t\n\t\treturn newViewport;\n\t}\n\n\tthis.getCurrentViewport = () => {\n\t\tconst currentViewport = new Viewport();\n\t\tcurrentViewport.nearPlane = this.cameraObject.near;\n\t\tcurrentViewport.farPlane = this.cameraObject.far;\n\t\tcurrentViewport.eyePosition[0] = this.cameraObject.position.x;\n\t\tcurrentViewport.eyePosition[1] = this.cameraObject.position.y;\n\t\tcurrentViewport.eyePosition[2] = this.cameraObject.position.z;\n\t\tcurrentViewport.targetPosition[0] = this.cameraObject.target.x;\n\t\tcurrentViewport.targetPosition[1] = this.cameraObject.target.y;\n\t\tcurrentViewport.targetPosition[2] = this.cameraObject.target.z;\n\t\tcurrentViewport.upVector[0] = this.cameraObject.up.x;\n\t\tcurrentViewport.upVector[1] = this.cameraObject.up.y;\n\t\tcurrentViewport.upVector[2] = this.cameraObject.up.z;\n\t\treturn currentViewport;\n\t}\n\t\n\tthis.getDefaultEyePosition = () => {\n\t\treturn eyePosition;\n\t}\n\t\n\tthis.getDefaultTargetPosition = () => {\n\t\treturn targetPosition;\n\t}\n\t\n\tthis.cameraTransition = (startingViewport, endingViewport, durationIn) => {\n\t if (rotateCameraTransitionObject == undefined)\n\t smoothCameraTransitionObject = new SmoothCameraTransition(startingViewport, endingViewport,\n\t this, durationIn);\n\t}\n\t\n\tthis.rotateCameraTransition = (axis, angle, duration) => {\n\t if (smoothCameraTransitionObject == undefined)\n\t rotateCameraTransitionObject = new RotateCameraTransition(axis, angle,\n\t this, duration);\n\t}\n\t\n\tthis.enableCameraTransition = () => {\n\t if (smoothCameraTransitionObject)\n\t currentMode = MODE.SMOOTH_CAMERA_TRANSITION;\n\t if (rotateCameraTransitionObject)\n\t currentMode = MODE.ROTATE_CAMERA_TRANSITION;\n\t}\n\t\n\tthis.pauseCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\t\n\tthis.stopCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tsmoothCameraTransitionObject = undefined;\n\t\trotateCameraTransitionObject = undefined;\n\t}\n\t\n\tthis.isTransitioningCamera = () => {\n\t\treturn (currentMode === MODE.SMOOTH_CAMERA_TRANSITION ||\n\t\t currentMode === MODE.ROTATE_CAMERA_TRANSITION);\n\t}\n \n /* tumble rate is in radians per second */\n\tthis.autoTumble = (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn) => {\n\t\tcameraAutoTumbleObject = new CameraAutoTumble(tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, this);\n\t}\n\t\n\tthis.enableAutoTumble = () => {\n\t\tcurrentMode = MODE.AUTO_TUMBLE;\n\t}\n\t\n\tthis.stopAutoTumble = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tcameraAutoTumbleObject = undefined;\n\t}\n\t\n\tthis.updateAutoTumble = () => {\n\t\tif (cameraAutoTumbleObject)\n\t\t\tcameraAutoTumbleObject.requireUpdate = true;\n\t}\n\t\n\tthis.isAutoTumble = () => {\n\t\treturn (currentMode === MODE.AUTO_TUMBLE);\n\t}\n\t\n this.enableRaycaster = (sceneIn, callbackFunctionIn, hoverCallbackFunctionIn) => {\n if (zincRayCaster == undefined)\n zincRayCaster = new RayCaster(sceneIn, this.scene, callbackFunctionIn, hoverCallbackFunctionIn, this.renderer);\n }\n\n this.disableRaycaster = () => {\n zincRayCaster.disable();\n zincRayCaster = undefined;\n }\n\n this.isSyncControl = () => {\n return currentMpde === MODE.SYNC_CONTROL;\n }\n\n this.enableSyncControl = () => {\n currentMode = MODE.SYNC_CONTROL;\n if (!ndcControl)\n ndcControl = new NDCCameraControl();\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n return ndcControl;\n }\n\n this.disableSyncControl = () => {\n currentMode = MODE.DEFAULT;\n this.cameraObject.zoom = 1;\n this.cameraObject.updateProjectionMatrix();\n }\n\t\n\tthis.enable();\n\n};\n\nconst SmoothCameraTransition = function(startingViewport, endingViewport, targetCameraIn, durationIn) {\n\tconst startingEyePosition = startingViewport.eyePosition;\n\tconst startingTargetPosition = startingViewport.targetPosition;\n\tconst startingUp = startingViewport.upVector;\n\tconst endingEyePosition = endingViewport.eyePosition;\n\tconst endingTargetPosition = endingViewport.targetPosition;\n\tconst endingUp = endingViewport.upVector;\n\tconst targetCamera = targetCameraIn;\n\tlet duration = durationIn;\n\tlet inbuildTime = 0;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tlet completed = false;\n\ttargetCamera.near = Math.min(startingViewport.nearPlane, endingViewport.nearPlane);\n\ttargetCamera.far = Math.max(startingViewport.farPlane, endingViewport.farPlane);\n\ttargetCamera.cameraObject.up.set( endingViewport.upVector[0], endingViewport.upVector[1],\n endingViewport.upVector[2]);\n \n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\t\n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = duration;\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\tconst updateCameraSettings = () => {\n\t\tconst ratio = inbuildTime / duration;\n\t\tconst eyePosition = [startingEyePosition[0] * (1.0 - ratio) + endingEyePosition[0] * ratio,\n\t\t startingEyePosition[1] * (1.0 - ratio) + endingEyePosition[1] * ratio,\n\t\t startingEyePosition[2] * (1.0 - ratio) + endingEyePosition[2] * ratio];\n\t\tconst targetPosition = [startingTargetPosition[0] * (1.0 - ratio) + endingTargetPosition[0] * ratio,\n\t\t startingTargetPosition[1] * (1.0 - ratio) + endingTargetPosition[1] * ratio,\n\t\t startingTargetPosition[2] * (1.0 - ratio) + endingTargetPosition[2] * ratio];\n const upVector = [startingUp[0] * (1.0 - ratio) + endingUp[0] * ratio,\n startingUp[1] * (1.0 - ratio) + endingUp[1] * ratio,\n startingUp[2] * (1.0 - ratio) + endingUp[2] * ratio];\n\t\ttargetCamera.cameraObject.position.set( eyePosition[0], eyePosition[1], eyePosition[2]);\n\t\ttargetCamera.cameraObject.target.set( targetPosition[0], targetPosition[1], targetPosition[2] );\n\t};\n\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tupdateTime(delta);\n\t\t\n\t\tupdateCameraSettings();\n\t\t\n\t\tif (inbuildTime == duration) {\n\t\t\tcompleted = true;\n\t\t}\n\n\t}\n\t\n\tthis.isTransitionCompleted = () => {\n\t\treturn completed;\n\t}\n\t\n};\n\nconst RotateCameraTransition = function(axisIn, angleIn, targetCameraIn, durationIn) {\n const axis = axisIn;\n const angle = angleIn;\n const targetCamera = targetCameraIn;\n let duration = durationIn;\n let inbuildTime = 0;\n const enabled = true;\n const ratio = inbuildTime / duration;\n let completed = false;\n\n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\n const updateCameraSettings = delta => {\n const previousTime = inbuildTime;\n let targetTime = inbuildTime + delta;\n if (targetTime > duration)\n targetTime = duration;\n inbuildTime = targetTime;\n const actualDelta = inbuildTime - previousTime;\n const ratio = actualDelta / duration;\n const alpha = ratio * angle;\n targetCamera.rotateAboutLookAtpoint(axis, alpha);\n };\n \n this.update = delta => {\n\n if ( this.enabled === false ) return;\n \n updateCameraSettings(delta);\n \n if (inbuildTime == duration) {\n completed = true;\n }\n\n }\n \n this.isTransitionCompleted = () => {\n return completed;\n }\n}\n\nconst RayCaster = function (sceneIn, hostSceneIn, callbackFunctionIn, hoverCallbackFunctionIn, rendererIn) {\n const scene = sceneIn;\n const hostScene = hostSceneIn;\n\tconst renderer = rendererIn;\n\tconst callbackFunction = callbackFunctionIn;\n\tconst hoverCallbackFunction = hoverCallbackFunctionIn;\n\tconst enabled = true;\n\tconst raycaster = new THREE.Raycaster();\n\traycaster.params.Line.threshold = 0.1;\n\traycaster.params.Points.threshold = 0.1;\n const mouse = new THREE.Vector2();\n let lastHovered = undefined;\n let cooldown = false;\n\t\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\t\n\tconst getIntersectsObject = (zincCamera, x, y) => {\n\t\tconst rect = zincCamera.domElement.getBoundingClientRect();\n\t\tmouse.x = ((x - rect.left) / rect.width) * 2 - 1;\n mouse.y = -((y - rect.top) / rect.height) * 2 + 1;\n if (hostScene !== scene) {\n const threejsScene = scene.getThreeJSScene();\n renderer.render(threejsScene, zincCamera.cameraObject);\n }\n raycaster.setFromCamera( mouse, zincCamera.cameraObject);\n let objects = scene.getPickableThreeJSObjects();\n\t\treturn raycaster.intersectObjects( objects, true );\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tconst intersects = getIntersectsObject(zincCamera, x, y);\n\t\t\tcallbackFunction(intersects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n const intersects = getIntersectsObject(zincCamera, x, y);\n lastHovered = new Date();\n hoverCallbackFunction(intersects, x, y);\n }\n }\n\t\n\tthis.move = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n if (scene.displayMarkers) {\n hovered(zincCamera, x, y);\n } else {\n if (!cooldown) {\n let now = new Date();\n if (!lastHovered || ( (now.getTime() - lastHovered.getTime()) > 250)) {\n hovered(zincCamera, x, y);\n } else {\n cooldown = true;\n setTimeout(awaitMove(zincCamera, x, y), 250);\n }\n }\n }\n }\n }\n \n let awaitMove = (zincCamera,x,y) => {\n return function() {\n cooldown = false;\n hovered(zincCamera, x, y);\n }\n }\n};\n\nconst CameraAutoTumble = function (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, targetCameraIn) {\n\tconst tumbleAxis = new THREE.Vector3();\n\tconst angle = -tumbleRateIn;\n\tconst targetCamera = targetCameraIn;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tconst tumbleDirection = tumbleDirectionIn;\n\tthis.stopOnCameraInput = stopOnCameraInputIn;\n this.requireUpdate = true;\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n\t\n\tconst computeTumbleAxisAngle = tumbleDirection => {\n\t\tconst tangent_dist = Math.sqrt(tumbleDirection[0]*tumbleDirection[0] +\n\t\t\ttumbleDirection[1]*tumbleDirection[1]);\n\t\tconst width = Math.abs(tumbleDirection[0]) * 4.0;\n\t\tconst height = Math.abs(tumbleDirection[1]) * 4.0;\n\t\tconst radius = 0.25 * (width + height);\n\t\tconst dx = -tumbleDirection[1]/tangent_dist;\n\t\tconst dy = tumbleDirection[0]/tangent_dist;\n\t\tlet d = dx*(tumbleDirection[0])+dy*(-tumbleDirection[1]);\n\t\t\n\t\tif (d > radius)\n\t\t{\n\t\t\td = radius;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (d < -radius)\n\t\t\t{\n\t\t\t\td = -radius;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t/* get axis to rotate about */\n\t\ttumbleAxis.copy(targetCamera.cameraObject.position).sub(\n targetCamera.cameraObject.target).normalize();\n\t\tb.copy(targetCamera.cameraObject.up).normalize();\n c.crossVectors(b, tumbleAxis).normalize().multiplyScalar(dx);\n b.multiplyScalar(dy);\n b.add(c).multiplyScalar(Math.cos(phi));\n tumbleAxis.multiplyScalar(Math.sin(phi)).add(b);\n\t};\n\t\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tif (this.requireUpdate) {\n\t\t\tcomputeTumbleAxisAngle(tumbleDirection);\n\t\t\tthis.requireUpdate = false;\n\t\t}\n\t\ttargetCamera.rotateAboutLookAtpoint(tumbleAxis, angle * delta/1000);\n\n\t}\n\t\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\nStereoCameraZoomFixed = function () {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.cameraL = new THREE.PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new THREE.PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n};\n\nObject.assign( StereoCameraZoomFixed.prototype, {\n\n\tupdate: (() => {\n\n\t\tlet focus, fov, aspect, near, far, zoom;\n\n\t\tconst eyeRight = new THREE.Matrix4();\n\t\tconst eyeLeft = new THREE.Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tconst needsUpdate = focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tconst eyeSep = 0.064 / 2;\n\t\t\t\tconst eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tconst ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ) / camera.zoom;\n\t\t\t\tlet xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t})()\n\n} );\n\n/** the following StereoEffect is written by third party */\n/**\n * @author alteredq / http://alteredqualia.com/\n * @authod mrdoob / http://mrdoob.com/\n * @authod arodic / http://aleksandarrodic.com/\n * @authod fonserbc / http://fonserbc.github.io/\n*/\nconst StereoEffect = function ( renderer ) {\n\n\tconst _stereo = new StereoCameraZoomFixed();\n\t_stereo.aspect = 0.5;\n\n\tthis.setSize = (width, height) => {\n\n\t\trenderer.setSize( width, height );\n\n\t};\n\n\tthis.render = (scene, camera) => {\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t_stereo.update( camera );\n\n\t\tconst size = renderer.getSize();\n\n\t\trenderer.setScissorTest( true );\n\t\trenderer.clear();\n\n\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\trenderer.setScissorTest( false );\n\n\t};\n\n};\n\n\n/**\n * @author richt / http://richt.me\n * @author WestLangley / http://github.com/WestLangley\n *\n * W3C Device Orientation control (http://w3c.github.io/deviceorientation/spec-source-orientation.html)\n */\n\nModifiedDeviceOrientationControls = function ( object ) {\n\n\tconst scope = this;\n\n\tthis.object = object; \n\tthis.object.rotation.reorder( \"YXZ\" );\n\n\tthis.enabled = true;\n\n\tthis.deviceOrientation = {};\n\tthis.screenOrientation = 0;\n\n\tconst onDeviceOrientationChangeEvent = event => {\n\n\t\tscope.deviceOrientation = event;\n\n\t};\n\n\tconst onScreenOrientationChangeEvent = () => {\n\t if (typeof(window) !== 'undefined')\n\t scope.screenOrientation = window.orientation || 0;\n\n\t};\n\n\t// The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n\n\tconst setObjectQuaternion = (() => {\n\n\t\tconst zee = new THREE.Vector3( 0, 0, 1 );\n\n\t\tconst euler = new THREE.Euler();\n\n\t\tconst q0 = new THREE.Quaternion();\n\n\t\tconst q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis\n\n\t\treturn (cameraObject, alpha, beta, gamma, orient) => {\n\t\t\t\n\t\t\tconst vector = new THREE.Vector3(0, 0, 1);\n\t\t\t\n\t\t\tvector.subVectors(cameraObject.target, cameraObject.position);\n\n\t\t\teuler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us\n\n\t\t\tconst quaternion = new THREE.Quaternion();\n\t\t\t\n\t\t\tquaternion.setFromEuler( euler ); // orient the device\n\n\t\t\tquaternion.multiply( q1 ); // camera looks out the back of the device, not the top\n\n\t\t\tquaternion.multiply( q0.setFromAxisAngle( zee, - orient ) ); // adjust for screen orientation\n\t\t\t\n\t\t\tvector.applyQuaternion(quaternion);\n\t\t\t\t\n\t\t\tvector.addVectors(cameraObject.position, vector);\n\t\t\t\n\t\t\tcameraObject.lookAt(vector);\n\n\t\t};\n\n\t})();\n\n\tthis.connect = () => {\n\n\t\tonScreenOrientationChangeEvent(); // run once on load\n\t\tif (typeof(window) !== 'undefined') {\n\t\t window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t\t}\n\t\tscope.enabled = true;\n\n\t};\n\n\tthis.disconnect = () => {\n\t if (typeof(window) !== 'undefined') {\n\t window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t }\n\t\tscope.enabled = false;\n\n\t};\n\n\tthis.update = () => {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tconst alpha = scope.deviceOrientation.alpha ? THREE.Math.degToRad( scope.deviceOrientation.alpha ) : 0; // Z\n\t\tconst beta = scope.deviceOrientation.beta ? THREE.Math.degToRad( scope.deviceOrientation.beta ) : 0; // X'\n\t\tconst gamma = scope.deviceOrientation.gamma ? THREE.Math.degToRad( scope.deviceOrientation.gamma ) : 0; // Y''\n\t\tconst orient = scope.screenOrientation ? THREE.Math.degToRad( scope.screenOrientation ) : 0; // O\n\n\t\tsetObjectQuaternion( scope.object, alpha, beta, gamma, orient );\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tthis.disconnect();\n\n\t};\n\n\tthis.connect();\n\n};\n\nconst NDCCameraControl = function () {\n\tlet camera = undefined;\n let targetCamera = undefined;\n let defaultViewport = undefined;\n const position = new THREE.Vector3();\n const target = new THREE.Vector3();\n const v1 = new THREE.Vector3();\n const v2 = new THREE.Vector3();\n let eventCallback = undefined;\n\n this.setCurrentCameraSettings = (cameraIn, defaultViewportIn) => {\n camera = cameraIn.clone();\n targetCamera = cameraIn;\n defaultViewport = defaultViewportIn;\n camera.near = defaultViewport.nearPlane;\n if (defaultViewport.farPlane)\n camera.far = defaultViewport.farPlane;\n if (defaultViewport.eyePosition)\n camera.position.set(defaultViewport.eyePosition[0],\n defaultViewport.eyePosition[1], defaultViewport.eyePosition[2]);\n if (defaultViewport.upVector)\n camera.up.set(defaultViewport.upVector[0], defaultViewport.upVector[1],\n defaultViewport.upVector[2]);\n if (defaultViewport.targetPosition) {\n camera.target = new THREE.Vector3(defaultViewport.targetPosition[0],\n defaultViewport.targetPosition[1], defaultViewport.targetPosition[2]);\n camera.lookAt(camera.target);\n }\n camera.updateProjectionMatrix();\n position.copy(camera.position).project(camera);\n target.copy(camera.target).project(camera);\n }\n\t\n this.getCurrentPosition = () => {\n target.copy(targetCamera.target).project(camera);\n return [target.x, target.y];\n }\n\n this.zoom = delta => {\n let scaledDelta = delta * 0.002;\n let zoom = Math.max(targetCamera.zoom - scaledDelta, 1.0);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.zoomToBox = (box, zoom) => {\n box.getCenter(v1);\n v1.project(camera);\n this.setCenterZoom([v1.x, v1.y], zoom);\n }\n\t \n //return top left and size\n this.getPanZoom = () => {\n return {target: this.getCurrentPosition(), zoom: targetCamera.zoom };\n }\n\n this.setCenterZoom = (center, zoom) => {\n v1.set(center[0], center[1], target.z).unproject(camera);\n v2.copy(v1).sub(targetCamera.target);\n targetCamera.target.copy(v1);\n targetCamera.lookAt(targetCamera.target);\n targetCamera.position.add(v2);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.setEventCallback = (callback) => {\n if (callback === undefined || (typeof callback == 'function'))\n eventCallback = callback;\n }\n\n this.triggerCallback = () => {\n if (eventCallback !== undefined && (typeof eventCallback == 'function'))\n eventCallback();\n }\n};\n\nexports.Viewport = Viewport\nexports.CameraControls = CameraControls\nexports.SmoothCameraTransition = SmoothCameraTransition\nexports.RotateCameraTransition = RotateCameraTransition\nexports.RayCaster = RayCaster\nexports.CameraAutoTumble = CameraAutoTumble\nexports.StereoEffect = StereoEffect\nexports.NDCCameraControl = NDCCameraControl\n","const { Group, Matrix4 } = require('three');\n\nlet Region = function (parentIn) {\n let parent = parentIn;\n let group = new Group();\n group.matrixAutoUpdate = false;\n group.userData = this;\n let children = [];\n let name = \"\";\n let zincObjects = [];\n const tMatrix = new Matrix4();\n let duration = 3000;\n tMatrix.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 ,0, 1);\n\n this.hideAllChildren = () => {\n children.forEach(child => child.hideAllChildren());\n zincObjects.forEach(zincObject => zincObject.setVisibility(false));\n }\n\n /***\n * Set the visibility and propagate it up and down the hierarchies\n * depending on the flag\n */\n this.setVisibility = (flag) => {\n group.visible = flag;\n }\n\n this.getVisibility = () => {\n return group.visible;\n }\n\n this.getGroup = () => {\n return group;\n }\n\n this.setTransformation = transformation => {\n tMatrix.set(...transformation);\n group.matrix.copy(tMatrix);\n group.updateMatrixWorld();\n }\n\n this.setName = (nameIn) => {\n if (nameIn && nameIn !== \"\") {\n name = nameIn;\n }\n }\n\n this.getName = () => {\n return name;\n }\n\n this.getParent = () => {\n return parent;\n }\n\n //This function returns the full path until it reaches the root\n this.getFullSeparatedPath = () => {\n const paths = [];\n if (name !== \"\") {\n paths.push(name);\n for (let p = parent; p !== undefined;) {\n const parentName = p.getName();\n if (parentName !== \"\") {\n paths.unshift(parentName);\n }\n p = p.getParent();\n }\n }\n return paths;\n }\n\n //This function returns the full path until it reaches the root\n this.getFullPath = () => {\n const paths = this.getFullSeparatedPath();\n if (paths.length > 0) {\n let fullPath = paths.shift();\n paths.forEach(path => {\n fullPath = fullPath.concat(\"/\", path);\n });\n return fullPath;\n }\n return \"\";\n }\n\n this.createChild = (nameIn) => {\n let childRegion = new Region(this);\n childRegion.setName(nameIn);\n children.push(childRegion);\n group.add(childRegion.getGroup());\n return childRegion;\n }\n\n this.getChildWithName = childName => {\n if (childName) {\n for (let i = 0; i < children.length; i++) {\n if (children[i].getName() === childName)\n return children[i];\n }\n }\n return undefined;\n }\n\n this.findChildFromSeparatedPath = pathArray => {\n if (pathArray && pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray && pathArray.length > 0) {\n const childRegion = this.getChildWithName(pathArray[0]);\n if (childRegion) {\n pathArray.shift();\n return childRegion.findChildFromSeparatedPath(pathArray);\n } else {\n return undefined;\n }\n }\n return this;\n }\n\n this.findChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.findChildFromSeparatedPath(pathArray);\n }\n\n this.createChildFromSeparatedPath = pathArray => {\n if (pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray.length > 0) {\n let childRegion = this.getChildWithName(pathArray[0]);\n if (!childRegion) {\n childRegion = this.createChild(pathArray[0]);\n }\n pathArray.shift();\n return childRegion.createChildFromSeparatedPath(pathArray);\n }\n return this;\n }\n\n this.createChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.createChildFromSeparatedPath(pathArray);\n }\n\n this.findOrCreateChildFromPath = (path) => {\n let childRegion = this.findChildFromPath(path);\n if (!childRegion) {\n childRegion = this.createChildFromPath(path);\n }\n return childRegion;\n }\n\n this.addZincObject = zincObject => {\n if (zincObject) {\n zincObject.setRegion(this);\n group.add(zincObject.morph);\n zincObjects.push(zincObject);\n }\n }\n\n /**\n * Remove a ZincObject from this region if it presents. This will eventually\n * destroy the object and free up the memory.\n * @param {Zinc.Object} zincObject - object to be removed from this region.\n */\n this.removeZincObject = zincObject => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n group.remove(zincObject.morph);\n zincObjects.splice(i, 1);\n zincObject.dispose();\n return;\n }\n }\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = (objectsList, pickMarkers, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.morph && (zincObject.morph.visible === true)) {\n if (pickMarkers) {\n let marker = zincObject.marker;\n if (marker && marker.isEnabled()) {\n objectsList.push(marker.morph);\n }\n } else {\n objectsList.push(zincObject.morph);\n }\n }\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.getPickableThreeJSObjects(objectsList, pickMarkers,\n transverse);\n });\n }\n return objectsList;\n }\n\n /**\n * Set the default duration value for all zinc objects\n * that are to be loaded into this region.\n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n duration = durationIn;\n zincObjects.forEach(zincObject => zincObject.setDuration(durationIn));\n children.forEach(childRegion => childRegion.setDuration(durationIn));\n }\n\n /**\n * Get the default duration value.\n * returns {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Get the bounding box of all the object in this and child regions only.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = transverse => {\n let boundingBox1 = undefined, boundingBox2 = undefined;\n zincObjects.forEach(zincObject => {\n boundingBox2 = zincObject.getBoundingBox();\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n if (boundingBox1)\n boundingBox1.applyMatrix4(group.matrixWorld);\n if (transverse) {\n children.forEach(childRegion => {\n boundingBox2 = childRegion.getBoundingBox(transverse);\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n }\n return boundingBox1;\n }\n\n this.clear = transverse => {\n if (transverse) {\n children.forEach(childRegion => childRegion.clear(transverse));\n }\n zincObjects.forEach(zincObject => {\n group.remove(zincObject.morph);\n zincObject.dispose();\n });\n children = [];\n zincObjects = [];\n }\n\n this.objectIsInRegion = (zincObject, transverse) => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n return true;\n }\n }\n if (transverse) {\n for (let i = 0; i < children.length; i++) {\n if (children[i].objectIsInRegion())\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n */\n this.forEachGeometry = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGeometry)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGeometry(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n */\n this.forEachGlyphset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGlyphset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGlyphset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n */\n this.forEachPointset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isPointset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachPointset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n */\n this.forEachLine = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isLines)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachLine(\n callbackFunction, transverse));\n }\n\n this.findObjectsWithAnatomicalId = (anatomicalId, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.anatomicalId === anatomicalId)\n \t objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithAnatomicalId(anatomicalId, transverse);\n objectsArray.push(...childObjects);\n });\n }\n\n return objectsArray;\n }\n\n /** \n * Find and return all zinc objects in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = (groupName, transverse) => {\n const objectsArray = [];\n zincObjects.forEach(zincObject => {\n if (zincObject.groupName === groupName)\n \t objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithGroupName(groupName, transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Find and return all geometries in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const geometriesArray = primitivesArray.filter(primitive => primitive.isGeometry);\n return geometriesArray;\n }\n\n /** \n * Find and return all pointsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const pointsetsArray = primitivesArray.filter(primitive => primitive.isPointset);\n return pointsetsArray;\n }\n\n /** \n * Find and return all glyphsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const glyphsetsArray = primitivesArray.filter(primitive => primitive.isGlyphset);\n return glyphsetsArray;\n }\n\n /** \n * Find and return all lines in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findLinesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const linesArray = primitivesArray.filter(primitive => primitive.isLines);\n return linesArray;\n }\n\n /** \n * Find and return all lines in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.getAllObjects = transverse => {\n const objectsArray = [...zincObjects];\n children.forEach(childRegion => {\n let childObjects = childRegion.getAllObjects(transverse);\n objectsArray.push(...childObjects);\n });\n return objectsArray;\n }\n\n /**\n * Get the current time of the region.\n * Return -1 if no graphics in the region.\n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (zincObjects[0] != undefined) {\n return zincObjects[0].getCurrentTime();\n } else {\n for (let i = 0; i < children.length; i++) {\n const time = children[i].getCurrentTime();\n if (time !== -1)\n return time;\n }\n }\n return -1;\n }\n\n /**\n * Set the current time of all the objects of this region.\n * @param {Number} time - Value to set the time to.\n */\n this.setMorphTime = (time, transverse) => {\n zincObjects.forEach(zincObject => {\n zincObject.setMorphTime(time);\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.setMorphTime(time);\n });\n }\n }\n\n /**\n * Check if any object in this region is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isTimeVarying()) {\n return true;\n }\n }\n for (let i = 0; i < children.length; i++) {\n if (children[i].isTimeVarying()) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation, options, transverse) => {\n // Let video dictates the progress if one is present\n const allObjects = this.getAllObjects(transverse);\n allObjects.forEach(zincObject => {\n zincObject.render(playRate * delta, playAnimation, options);\n });\n //process markers visibility and size\n if (options && options.displayMarkers && (playAnimation === false)) {\n if (options.markerDepths.length > 0) {\n const min = Math.min(...options.markerDepths);\n const max = Math.max(...options.markerDepths);\n allObjects.forEach(zincObject => {\n zincObject.processMarkerVisual(min, max, options);\n });\n }\n }\n }\n}\n\nexports.Region = Region;\n","const THREE = require('three');\n\nexports.Minimap = function (sceneIn) {\n let targetScene = sceneIn;\n this.camera = new THREE.OrthographicCamera(\n -0.5, 0.5, 0.5, -0.5, 0.01, 10);\n this.helper = undefined;\n let geometry = new THREE.BufferGeometry();\n var vertices = new Float32Array( [\n -1.0, -1.0, 1.0,\n 1.0, -1.0, 1.0,\n 1.0, 1.0, 1.0,\n 1.0, 1.0, 1.0,\n -1.0, 1.0, 1.0,\n -1.0, -1.0, 1.0\n ] );\n let positionAttributes = new THREE.BufferAttribute( vertices, 3 );\n geometry.setAttribute( 'position', positionAttributes);\n var material = new THREE.MeshBasicMaterial( { color: 0x333333, \n depthTest: false,\n depthWrite: false,\n opacity: 0.5,\n transparent: true } );\n this.mask = new THREE.Mesh( geometry, material );\n let _box = new THREE.Box3();\n let _center = new THREE.Vector3();\n\n this.getDiffFromNormalised = (x, y) => {\n _box.setFromBufferAttribute(positionAttributes).getCenter(_center);\n let coord = _center.clone().project(this.camera);\n let new_coord = new THREE.Vector3(x, y, coord.z).unproject(this.camera);\n return new_coord.sub(_center);\n }\n\n let setCurrentCameraSettings = (diameter, newViewport) => {\n if (targetScene.camera.near)\n this.camera.near = targetScene.camera.near;\n if (newViewport.farPlane)\n this.camera.far = newViewport.farPlane;\n if (newViewport.eyePosition)\n this.camera.position.set(newViewport.eyePosition[0],\n newViewport.eyePosition[1], newViewport.eyePosition[2]);\n if (newViewport.upVector)\n this.camera.up.set(newViewport.upVector[0], newViewport.upVector[1],\n newViewport.upVector[2]);\n if (newViewport.targetPosition)\n this.camera.lookAt(new THREE.Vector3(newViewport.targetPosition[0],\n newViewport.targetPosition[1], newViewport.targetPosition[2]));\n this.camera.zoom = 1 / diameter;\n this.camera.updateProjectionMatrix();\n }\n\n this.getBoundary = () => {\n let target = new THREE.Vector3().copy(\n targetScene.camera.target).project(targetScene.camera);\n let v1 = new THREE.Vector3(-1, -1, target.z).unproject(targetScene.camera);\n let v2 = new THREE.Vector3(1, -1, target.z).unproject(targetScene.camera);\n let v3 = new THREE.Vector3(1, 1, target.z).unproject(targetScene.camera);\n let v4 = new THREE.Vector3(-1, 1, target.z).unproject(targetScene.camera);\n let array = [v1, v2, v3, v3, v4, v1];\n positionAttributes.copyVector3sArray(array);\n positionAttributes.needsUpdate = true;\n }\n\n this.updateCamera = () => {\n this.getBoundary();\n let cameraControl = targetScene.getZincCameraControls();\n let boundingBox = targetScene.getBoundingBox();\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const diameter = boundingBox.min.distanceTo(boundingBox.max);\n const radius = diameter / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = cameraControl.getViewportFromCentreAndRadius(\n centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n setCurrentCameraSettings(diameter, viewport);\n }\n }\n}\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Geometry = require('./primitives/geometry').Geometry;\nconst work = require('webworkify-webpack');\nconst Promise = require('promise-polyfill').default;\n//const work = undefined;\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nconst GeometryCSG = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n\thost = hostIn;\n let core = undefined;\n let worker = undefined;\n let onProgress = false;\n let myResolve = undefined;\n \n var createGeometryFromJSON = json => {\n\t \tconst material = host.morph.material.clone();\n\t \tmaterial.morphTargets = false;\n\t const newGeometry = new Geometry();\n\t\tconst JSONParser = new JSONLoader();\n\t\tconst geometry = JSONParser.parse(json);\n const mesh = new THREE.Mesh(geometry.geometry, material);\n\t newGeometry.geometry = mesh.geometry;\n\t newGeometry.morph = mesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n var workerEventHandler = ev => {\n\t switch (ev.data.action) {\n\t \tcase 'message':\n\t console.log(ev.data.message);\n\t break;\n\t \tcase 'result':\n\t \tconst csg = new GeometryCSG(createGeometryFromJSON(ev.data.object));\n\t \tif (myResolve)\n\t \t\tmyResolve(csg);\n\t \tmyResolve = undefined;\n\t \tonProgress = false;\n\t break;\n\t \tdefault:\n\t \tthrow 'Cannot handle specified action.';\n }\n }\n \n var initialise = hostIn => {\n\t if (work !== undefined) {\n\t\tworker = work(require.resolve('./workers/geometryCSG.worker.js'));\n\t }\n\t if (!worker) {\n\t core = new (require('./workers/geometryCSGInternal').GeometryCSGInternal)(hostIn);\n\t } else {\n\t\tif (hostIn && hostIn.isGeometry) {\n\t\t let mesh = hostIn.morph;\n\t\t let json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t worker.addEventListener('message', function (ev) {\n\t\t\t workerEventHandler(ev);\n\t\t });\n\t\t worker.postMessage({action: \"initialise\", object: json});\n\t\t}\n\t }\n }\n \n this.getHostGeometry = () => {\n\tconst tempCSG = new ThreeBSP(host.morph);\n return new createZincGeometry(tempCSG);\n }\n \n this.getGeometry = () => host;\n \n const createZincGeometry = csgMesh => {\n\t\tconst material = host.morph.material.clone();\n\t\tmaterial.morphTargets = false;\n\t\tconst newMesh = csgMesh.toMesh(material);\n\t const newGeometry = new Geometry();\n\t newGeometry.geometry = newMesh.geometry;\n\t newGeometry.morph = newMesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n this.setCSG = CSG => {\n\t core.setCSG(CSG);\n } \n \n const sendToWork = (guestGeometry, action, resolve, reject) => {\n\t if (!onProgress) {\n\t\t let mesh = guestGeometry.morph;\n\t\t const json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t myResolve = resolve;\n\t\t onProgress = true;\n\t\t worker.postMessage({action: action, object: json});\n\t } else {\n\t\t reject(\"On progress\");\n\t }\n }\n \n this.intersect = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.intersect(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n\t};\n \n this.subtract = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.subtract(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.union = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.union(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.terminateWorker = () => {\n\t if (worker)\n\t\t worker.terminate();\n }\n \n initialise(hostIn);\n};\n\nexports.GeometryCSG = GeometryCSG;\n","'use strict';\n\t\n\tvar ThreeBSP,\n\t\tEPSILON = 1e-5,\n\t\tCOPLANAR = 0,\n\t\tFRONT = 1,\n\t\tBACK = 2,\n\t\tSPANNING = 3;\n\t\n module.exports = function( THREE ) {\n var ThreeBSP = function( geometry ) {\n // Convert THREE.Geometry to ThreeBSP\n var i, _length_i,\n face, vertex, faceVertexUvs, uvs,\n polygon,\n polygons = [],\n tree;\n \n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n if ( geometry instanceof THREE.Geometry ) {\n this.matrix = new THREE.Matrix4;\n } else if ( geometry.isMesh ) {\n // #todo: add hierarchy support\n geometry.updateMatrix();\n this.matrix = geometry.matrix.clone();\n geometry = geometry.geometry;\n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n geometry.mergeVertices();\n geometry.computeVertexNormals(false);\n } else if ( geometry instanceof ThreeBSP.Node ) {\n this.tree = geometry;\n this.matrix = new THREE.Matrix4;\n return this;\n } else {\n throw 'ThreeBSP: Given geometry is unsupported';\n }\n \n for ( i = 0, _length_i = geometry.faces.length; i < _length_i; i++ ) {\n face = geometry.faces[i];\n faceVertexUvs = geometry.faceVertexUvs[0][i];\n polygon = new ThreeBSP.Polygon;\n \n if ( face instanceof THREE.Face3 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else if ( typeof THREE.Face4 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[1], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.d ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[3].x, faceVertexUvs[3].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[3], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else {\n throw 'Invalid face type at index ' + i;\n }\n \n polygon.calculateProperties();\n polygons.push( polygon );\n };\n \n this.tree = new ThreeBSP.Node( polygons );\n };\n ThreeBSP.prototype.subtract = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.union = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.intersect = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n b.clipTo( a );\n b.invert();\n a.clipTo( b );\n b.clipTo( a );\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.toGeometry = function() {\n var i, j,\n matrix = new THREE.Matrix4().getInverse( this.matrix ),\n geometry = new THREE.Geometry(),\n polygons = this.tree.allPolygons(),\n polygon_count = polygons.length,\n polygon, polygon_vertice_count,\n vertice_dict = {},\n vertex_idx_a, vertex_idx_b, vertex_idx_c,\n vertex, face,\n verticeUvs;\n \n for ( i = 0; i < polygon_count; i++ ) {\n polygon = polygons[i];\n polygon_vertice_count = polygon.vertices.length;\n \n for ( j = 2; j < polygon_vertice_count; j++ ) {\n verticeUvs = [];\n \n vertex = polygon.vertices[0];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n \n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j-1];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n face = new THREE.Face3(\n vertex_idx_a,\n vertex_idx_b,\n vertex_idx_c,\n new THREE.Vector3( polygon.normal.x, polygon.normal.y, polygon.normal.z )\n );\n \n geometry.faces.push( face );\n geometry.faceVertexUvs[0].push( verticeUvs );\n }\n \n }\n return geometry;\n };\n ThreeBSP.prototype.toBufferGeometry = function( ) {\n var geometry = this.toGeometry();\n var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);\n\n return bufferGeometry;\n };\n ThreeBSP.prototype.toMesh = function( material ) {\n var geometry = this.toBufferGeometry(),\n mesh = new THREE.Mesh( geometry, material );\n \n mesh.position.setFromMatrixPosition( this.matrix );\n mesh.rotation.setFromRotationMatrix( this.matrix );\n \n return mesh;\n };\n \n \n ThreeBSP.Polygon = function( vertices, normal, w ) {\n if ( !( vertices instanceof Array ) ) {\n vertices = [];\n }\n \n this.vertices = vertices;\n if ( vertices.length > 0 ) {\n this.calculateProperties();\n } else {\n this.normal = this.w = undefined;\n }\n };\n ThreeBSP.Polygon.prototype.calculateProperties = function() {\n var a = this.vertices[0],\n b = this.vertices[1],\n c = this.vertices[2];\n \n this.normal = b.clone().subtract( a ).cross(\n c.clone().subtract( a )\n ).normalize();\n \n this.w = this.normal.clone().dot( a );\n \n return this;\n };\n ThreeBSP.Polygon.prototype.clone = function() {\n var i, vertice_count,\n polygon = new ThreeBSP.Polygon;\n \n for ( i = 0, vertice_count = this.vertices.length; i < vertice_count; i++ ) {\n polygon.vertices.push( this.vertices[i].clone() );\n };\n polygon.calculateProperties();\n \n return polygon;\n };\n \n ThreeBSP.Polygon.prototype.flip = function() {\n var i, vertices = [];\n \n this.normal.multiplyScalar( -1 );\n this.w *= -1;\n \n for ( i = this.vertices.length - 1; i >= 0; i-- ) {\n vertices.push( this.vertices[i] );\n };\n this.vertices = vertices;\n \n return this;\n };\n ThreeBSP.Polygon.prototype.classifyVertex = function( vertex ) { \n var side_value = this.normal.dot( vertex ) - this.w;\n \n if ( side_value < -EPSILON ) {\n return BACK;\n } else if ( side_value > EPSILON ) {\n return FRONT;\n } else {\n return COPLANAR;\n }\n };\n ThreeBSP.Polygon.prototype.classifySide = function( polygon ) {\n var i, vertex, classification,\n num_positive = 0,\n num_negative = 0,\n vertice_count = polygon.vertices.length;\n \n for ( i = 0; i < vertice_count; i++ ) {\n vertex = polygon.vertices[i];\n classification = this.classifyVertex( vertex );\n if ( classification === FRONT ) {\n num_positive++;\n } else if ( classification === BACK ) {\n num_negative++;\n }\n }\n \n if ( num_positive > 0 && num_negative === 0 ) {\n return FRONT;\n } else if ( num_positive === 0 && num_negative > 0 ) {\n return BACK;\n } else if ( num_positive === 0 && num_negative === 0 ) {\n return COPLANAR;\n } else {\n return SPANNING;\n }\n };\n ThreeBSP.Polygon.prototype.splitPolygon = function( polygon, coplanar_front, coplanar_back, front, back ) {\n var classification = this.classifySide( polygon );\n \n if ( classification === COPLANAR ) {\n \n ( this.normal.dot( polygon.normal ) > 0 ? coplanar_front : coplanar_back ).push( polygon );\n \n } else if ( classification === FRONT ) {\n \n front.push( polygon );\n \n } else if ( classification === BACK ) {\n \n back.push( polygon );\n \n } else {\n \n var vertice_count,\n i, j, ti, tj, vi, vj,\n t, v,\n f = [],\n b = [];\n \n for ( i = 0, vertice_count = polygon.vertices.length; i < vertice_count; i++ ) {\n \n j = (i + 1) % vertice_count;\n vi = polygon.vertices[i];\n vj = polygon.vertices[j];\n ti = this.classifyVertex( vi );\n tj = this.classifyVertex( vj );\n \n if ( ti != BACK ) f.push( vi );\n if ( ti != FRONT ) b.push( vi );\n if ( (ti | tj) === SPANNING ) {\n t = ( this.w - this.normal.dot( vi ) ) / this.normal.dot( vj.clone().subtract( vi ) );\n v = vi.interpolate( vj, t );\n f.push( v );\n b.push( v );\n }\n }\n \n \n if ( f.length >= 3 ) front.push( new ThreeBSP.Polygon( f ).calculateProperties() );\n if ( b.length >= 3 ) back.push( new ThreeBSP.Polygon( b ).calculateProperties() );\n }\n };\n \n ThreeBSP.Vertex = function( x, y, z, normal, uv ) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.normal = normal || new THREE.Vector3;\n this.uv = uv || new THREE.Vector2;\n };\n ThreeBSP.Vertex.prototype.clone = function() {\n return new ThreeBSP.Vertex( this.x, this.y, this.z, this.normal.clone(), this.uv.clone() );\n };\n ThreeBSP.Vertex.prototype.add = function( vertex ) {\n this.x += vertex.x;\n this.y += vertex.y;\n this.z += vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.subtract = function( vertex ) {\n this.x -= vertex.x;\n this.y -= vertex.y;\n this.z -= vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.multiplyScalar = function( scalar ) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n };\n ThreeBSP.Vertex.prototype.cross = function( vertex ) {\n var x = this.x,\n y = this.y,\n z = this.z;\n\n this.x = y * vertex.z - z * vertex.y;\n this.y = z * vertex.x - x * vertex.z;\n this.z = x * vertex.y - y * vertex.x;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.normalize = function() {\n var length = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n \n this.x /= length;\n this.y /= length;\n this.z /= length;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.dot = function( vertex ) {\n return this.x * vertex.x + this.y * vertex.y + this.z * vertex.z;\n };\n ThreeBSP.Vertex.prototype.lerp = function( a, t ) {\n this.add(\n a.clone().subtract( this ).multiplyScalar( t )\n );\n \n this.normal.add(\n a.normal.clone().sub( this.normal ).multiplyScalar( t )\n );\n \n this.uv.add(\n a.uv.clone().sub( this.uv ).multiplyScalar( t )\n );\n \n return this;\n };\n ThreeBSP.Vertex.prototype.interpolate = function( other, t ) {\n return this.clone().lerp( other, t );\n };\n ThreeBSP.Vertex.prototype.applyMatrix4 = function ( m ) {\n\n // input: THREE.Matrix4 affine matrix\n\n var x = this.x, y = this.y, z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n\n return this;\n\n };\n \n \n ThreeBSP.Node = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n\n this.polygons = [];\n this.front = this.back = undefined;\n \n if ( !(polygons instanceof Array) || polygons.length === 0 ) return;\n\n this.divider = polygons[0].clone();\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n this.front = new ThreeBSP.Node( front );\n }\n \n if ( back.length > 0 ) {\n this.back = new ThreeBSP.Node( back );\n }\n };\n ThreeBSP.Node.isConvex = function( polygons ) {\n var i, j;\n for ( i = 0; i < polygons.length; i++ ) {\n for ( j = 0; j < polygons.length; j++ ) {\n if ( i !== j && polygons[i].classifySide( polygons[j] ) !== BACK ) {\n return false;\n }\n }\n }\n return true;\n };\n ThreeBSP.Node.prototype.build = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n \n if ( !this.divider ) {\n this.divider = polygons[0].clone();\n }\n\n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n if ( !this.front ) this.front = new ThreeBSP.Node();\n this.front.build( front );\n }\n \n if ( back.length > 0 ) {\n if ( !this.back ) this.back = new ThreeBSP.Node();\n this.back.build( back );\n }\n };\n ThreeBSP.Node.prototype.allPolygons = function() {\n var polygons = this.polygons.slice();\n if ( this.front ) polygons = polygons.concat( this.front.allPolygons() );\n if ( this.back ) polygons = polygons.concat( this.back.allPolygons() );\n return polygons;\n };\n ThreeBSP.Node.prototype.clone = function() {\n var node = new ThreeBSP.Node();\n \n node.divider = this.divider.clone();\n node.polygons = this.polygons.map( function( polygon ) { return polygon.clone(); } );\n node.front = this.front && this.front.clone();\n node.back = this.back && this.back.clone();\n \n return node;\n };\n ThreeBSP.Node.prototype.invert = function() {\n var i, polygon_count, temp;\n \n for ( i = 0, polygon_count = this.polygons.length; i < polygon_count; i++ ) {\n this.polygons[i].flip();\n }\n \n this.divider.flip();\n if ( this.front ) this.front.invert();\n if ( this.back ) this.back.invert();\n \n temp = this.front;\n this.front = this.back;\n this.back = temp;\n \n return this;\n };\n ThreeBSP.Node.prototype.clipPolygons = function( polygons ) {\n var i, polygon_count,\n front, back;\n\n if ( !this.divider ) return polygons.slice();\n \n front = [], back = [];\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], front, back, front, back );\n }\n\n if ( this.front ) front = this.front.clipPolygons( front );\n if ( this.back ) back = this.back.clipPolygons( back );\n else back = [];\n\n return front.concat( back );\n };\n \n ThreeBSP.Node.prototype.clipTo = function( node ) {\n this.polygons = node.clipPolygons( this.polygons );\n if ( this.front ) this.front.clipTo( node );\n if ( this.back ) this.back.clipTo( node );\n };\n \n \n return ThreeBSP;\n }\n","module.exports = require(\"webworkify-webpack\");","module.exports = require(\"promise-polyfill\");","const Geometry = require('../primitives/geometry').Geometry;\nconst THREE = require('three');\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nmodule.exports = function (self) {\n\tlet core = undefined;\n\t\n\tvar geometryFromJSON = function(object) {\n\t\tvar JSONParser = new JSONLoader();\n\t\tvar geometry = JSONParser.parse(object);\n\t\tvar material = new THREE.MeshPhongMaterial();\n var mesh = new THREE.Mesh(geometry.geometry, material);\n var host = new Geometry();\n host.morph = mesh;\n return host;\n\t}\n\n\tvar initialise = function(object) {\n\t\tvar host = geometryFromJSON(object);\n\t\tcore = new (require('./geometryCSGInternal').GeometryCSGInternal)(host);\n\t\tself.postMessage({action:\"message\", message: \"Initialised\"});\n\t}\n\t\n\tvar intersect = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.intersect(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar subtract = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.subtract(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar union = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.union(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tself.addEventListener('message',function (ev){\n\t switch (ev.data.action) {\n \tcase 'initialise':\n initialise(ev.data.object);\n break;\n \tcase 'intersect':\n \t\tintersect(ev.data.object);\n break;\n \tcase 'subtract':\n \t\tsubtract(ev.data.object);\n break;\n \tcase 'union':\n \t\tunion(ev.data.object);\n break;\n \tdefault:\n \t\tthrow 'Cannot handle specified action.';\n\t }\n\t});\n\t\t\n //var test = ev.data;\n //self.postMessage(test, [test]);\n};\n\n","const THREE = require('three');\nconst ThreeBSP = require('../three-js-csg')(THREE);\nconst Geometry = require('../primitives/geometry').Geometry;\nconst GeometryCSG = require('../geometryCSG').GeometryCSG;\n\nconst GeometryCSGInternal = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n host = hostIn;\n let hostCSG = undefined;\n \n this.setGeometry = hostIn => {\n if (hostIn && hostIn.isGeometry)\n\t host = hostIn;\n hostCSG = undefined;\n }\n \n this.setCSG = csg => {\n\t hostCSG = csg;\n }\n \n const prepareCSG = guestGeometry => {\n\t if (host && host.morph && guestGeometry && guestGeometry.morph) {\n\t if (hostCSG === undefined)\n\t hostCSG = new ThreeBSP(host.morph);\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t return hostCSG.intersect(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.subtract = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.subtract(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.union = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.union(guestCSG);\n\t }\n\t return undefined;\n }\n};\n\nexports.GeometryCSGInternal = GeometryCSGInternal;\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Glyphset = require('./primitives/glyphset').Glyphset;\n\n/**\n * Provides an object which takes in a glyphset, convert it into a CSG and further\n * action such as intersect with another geometry may be performed.\n * \n * @class\n * @author Alan Wu\n * @return {GlyphsetCSG}\n */\nconst GlyphsetCSG = function (hostIn) {\n let host = undefined;\n if (hostIn && hostIn.isGlyphset)\n\t host = hostIn;\n const hostCSGs = new Array();\n const currentIntersect = undefined;\n \n this.setGlyphset = hostIn => {\n\t if (hostIn && hostIn.isGlyphset)\n\t\t host = hostIn;\n\t hostCSG = undefined;\n }\n \n this.getGlyphset = () => {\n\t return host;\n }\n \n const prepareCSGForGlyphs = () => {\n\t return glyph => {\n\t\t const mesh = glyph.getMesh();\n\t\t const label = glyph.getLabel();\n\t\t if (mesh) {\n\t\t\t const csg = new ThreeBSP(mesh.geometry.clone().applyMatrix(mesh.matrix));\n\t\t\t const store = [];\n\t\t\t store.csg = csg;\n\t\t\t store.label = label;\n\t\t\t if (mesh.material)\n\t\t\t\t store.material = mesh.material.clone();\n\t\t\t hostCSGs.push(store);\n\t\t }\n\t };\n };\n \n const prepareCSG = guestGeometry => {\n\t if (host && guestGeometry && guestGeometry.morph) {\n\t if (hostCSGs.length == 0) {\n\t \t host.forEachGlyph(prepareCSGForGlyphs());\n\t }\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if ((hostCSGs.length > 0) && guestCSG) {\n\t\tconst glyphset = new (require('./primitives/glyphset').Glyphset)();\n\t\tfor (let i = 0; i < hostCSGs.length; i++) {\n\t\t\tconst hostCSG = hostCSGs[i];\n\t\t const intersect = hostCSG.csg.intersect(guestCSG);\n\t\t const mesh = intersect.toMesh();\n\t\t if (mesh && mesh.geometry && (mesh.geometry.vertices.length > 0)) {\n\t\t \tif (hostCSG.material) {\n\t\t \t\tmesh.material = hostCSG.material;\n\t\t \t\tmesh.material.side = THREE.DoubleSide;\n\t\t \t\tmesh.material.clippingPlanes = null;\n\t\t \t}\n\t\t\t const glyph = glyphset.addMeshAsGlyph(mesh, i+1);\n\t\t\t glyph.setLabel(hostCSG.label);\n\t\t }\n\t\t}\n\t const newCSG = new GlyphsetCSG(glyphset);\t\n\t return newCSG;\n\t }\n\n\t return undefined;\n }\n \n};\n\nexports.GlyphsetCSG = GlyphsetCSG;\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://Zinc/webpack/universalModuleDefinition","webpack://Zinc/webpack/bootstrap","webpack://Zinc/./src/zinc.js","webpack://Zinc/external \"url-polyfill\"","webpack://Zinc/./src/primitives/geometry.js","webpack://Zinc/external \"three\"","webpack://Zinc/./src/primitives/zincObject.js","webpack://Zinc/./src/three/Geometry.js","webpack://Zinc/./src/utilities.js","webpack://Zinc/./src/primitives/marker.js","webpack://Zinc/./src/assets/mapMarker.svg","webpack://Zinc/./src/primitives/augmentShader.js","webpack://Zinc/./src/primitives/glyph.js","webpack://Zinc/./src/primitives/label.js","webpack://Zinc/external \"three-spritetext\"","webpack://Zinc/./src/primitives/glyphset.js","webpack://Zinc/./src/loader.js","webpack://Zinc/./src/three/Loader.js","webpack://Zinc/./src/videoHandler.js","webpack://Zinc/./src/primitives/pointset.js","webpack://Zinc/./src/three/Points.js","webpack://Zinc/./src/assets/disc.png","webpack://Zinc/./src/primitives/lines.js","webpack://Zinc/./src/three/line/LineSegments.js","webpack://Zinc/./src/three/line/Line.js","webpack://Zinc/./src/renderer.js","webpack://Zinc/external \"css-element-queries/src/ResizeSensor\"","webpack://Zinc/./src/scene.js","webpack://Zinc/./src/sceneLoader.js","webpack://Zinc/external \"three/examples/jsm/loaders/STLLoader\"","webpack://Zinc/external \"three/examples/jsm/loaders/OBJLoader\"","webpack://Zinc/external \"three/examples/jsm/loaders/GLTFLoader\"","webpack://Zinc/./src/sceneExporter.js","webpack://Zinc/./src/three/GLTFExporter.js","webpack://Zinc/./src/controls.js","webpack://Zinc/./src/region.js","webpack://Zinc/./src/minimap.js","webpack://Zinc/./src/geometryCSG.js","webpack://Zinc/./src/three-js-csg.js","webpack://Zinc/external \"webworkify-webpack\"","webpack://Zinc/external \"promise-polyfill\"","webpack://Zinc/./src/workers/geometryCSG.worker.js","webpack://Zinc/./src/workers/geometryCSGInternal.js","webpack://Zinc/./src/glyphsetCSG.js"],"names":["require","Zinc","Revision","defaultMaterialColor","defaultOpacity","modelPrefix","Geometry","Glyph","Glyphset","Pointset","Lines","Renderer","Scene","GeometryCSG","GlyphsetCSG","Viewport","CameraControls","SmoothCameraTransition","RayCaster","CameraAutoTumble","StereoEffect","loadExternalFile","loadExternalFiles","THREE","module","exports","ZincObject","call","videoHandler","isGeometry","createMesh","geometryIn","materialIn","options","geometry","morph","toBufferGeometry","isTransparent","opacity","material","_video","morphTargets","localTimeEnabled","localMorphColour","morphNormals","BufferGeometry","attributes","color","MeshPhongMaterial","colour","transparent","side","DoubleSide","vertexColors","VertexColors","morphAttributes","onBeforeCompile","augmentMorphColor","videoTexture","createCanvasVideoTexture","MeshBasicMaterial","Color","map","mesh","Mesh","setMesh","calculateUVs","computeBoundingBox","max","boundingBox","min","offset","Vector2","x","y","range","faceVertexUvs","i","faces","length","v1","vertices","a","v2","b","v3","c","push","uvsNeedUpdate","setWireframe","wireframe","prototype","Object","create","THREEGeometry","isZincObject","secondaryMesh","groupName","timeEnabled","morphColour","inbuildTime","mixer","animationGroup","duration","clipAction","userData","marker","markerUpdateRequired","markerVertexIndex","boundingBoxUpdateRequired","cachedBoundingBox","Box3","_vertex","Vector3","anatomicalId","region","animationClip","setDuration","durationIn","getDuration","setRegion","getRegion","morphNormalsReady","computeMorphNormals","toIndexedBufferGeometry","copyMorphColorsToIndexedBufferGeometry","clone","colorsNeedUpdate","computeBoundingSphere","checkAndCreateTransparentMesh","secondaryMaterial","FrontSide","renderOrder","name","BackSide","needsUpdate","add","checkAndRemoveTransparentMesh","remove","uncache","AnimationObjectGroup","AnimationMixer","morphAttribute","position","normal","AnimationClip","CreateClipsFromMorphTargetSequences","loop","loopOnce","clampWhenFinished","play","matrixAutoUpdate","setFrustumCulled","setAttribute","getAttribute","setName","groupNameIn","getCurrentTime","ratio","time","_clip","updateMorphColorAttribute","targetGeometry","morphColors","influences","morphTargetInfluences","deleteAttribute","bound","morphArray","setMorphTime","timeChanged","actualDuration","newTime","isTimeVarying","update","getVisibility","visible","setVisibility","setAlpha","alpha","transparentChanged","flag","frustumCulled","setVertexColors","getColour","setColour","getColourHex","getHexString","setColourHex","hex","setHex","setMaterial","dispose","getClosestVertexIndex","closestIndex","setFromBufferAttribute","center","getCenter","distance","currentDistance","current","count","fromArray","array","distanceTo","getClosestVertex","found","multiplyScalar","getBoundingBox","box","setFromArray","set","updateMarker","playAnimation","displayMarkers","isEnabled","disable","Marker","setPosition","z","camera","markerDepths","updateNDC","cameraObject","enable","processMarkerVisual","updateVisual","initiateMorphColor","setRenderOrder","render","delta","targetTime","_m1","Matrix4","_obj","Object3D","_offset","uuid","MathUtils","generateUUID","type","colors","normals","uvs","skinWeights","skinIndices","lineDistances","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","normalsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","assign","EventDispatcher","constructor","applyMatrix4","matrix","vertex","normalMatrix","Matrix3","getNormalMatrix","il","face","applyMatrix3","normalize","j","jl","vertexNormals","rotateX","angle","makeRotationX","rotateY","makeRotationY","rotateZ","makeRotationZ","translate","makeTranslation","scale","makeScale","lookAt","vector","updateMatrix","fromBufferGeometry","addFace","materialIndex","scope","fromBufferAttribute","Face3","uv","uv2","index","console","error","groups","group","start","getX","computeFaceNormals","negate","radius","s","cb","ab","f","fl","vA","vB","vC","subVectors","cross","copy","computeVertexNormals","areaWeighted","Array","v","vl","computeFlatVertexNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","setFromPoints","Sphere","merge","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","colors1","colors2","vertexCopy","faceVertexNormals","faceVertexColors","faceCopy","faceVertexUvs2","uvs2","uvsCopy","k","kl","mergeMesh","isMesh","mergeVertices","precisionPoints","verticesMap","unique","changes","precision","Math","pow","key","round","faceIndicesToRemove","indices","n","idx","splice","diff","points","point","l","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","uvs1","id","toJSON","setBit","value","enabled","getNormalIndex","hash","toString","normalsHash","getColorIndex","r","g","colorsHash","getHex","getUvIndex","uvsHash","data","metadata","version","generator","parameters","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","source","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","computeGroups","DirectGeometry","fromGeometry","buffergeometry","positions","Float32Array","BufferAttribute","copyVector3sArray","copyColorsArray","copyVector2sArray","attribute","Float32BufferAttribute","copyVector4sArray","buffer","copyArray","colorArray","colorsArray","setIndex","normalsArray","computeTangents","computeLineDistances","applyMatrix","warn","dispatchEvent","createBufferGeometryFromObject","object","isPoints","isLine","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","isVector3","isArray","isColor","resolveURL","url","actualURL","prefix","test","callback","errorCallback","request","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","send","urls","partialCallback","text","urlIndex","result","numComplete","numUrls","getColorsRGB","index_in_colors","floor","remainder","hex_value","mycolor","copyMorphColorsToBufferGeometry","bufferGeometry","morphColor","tolerance","Number","EPSILON","hashToIndex","getIndex","vertexCount","nextIndex","attributeNames","keys","attrArrays","morphAttrsArrays","newIndices","getters","morphAttr","fill","decimalShift","log10","shiftMultiplier","itemSize","getterFunc","newarray","newMorphArrays","m","ml","oldAttribute","isInterleavedBufferAttribute","setArray","cons","Uint8Array","Uint16Array","Uint32Array","newIndexBuffer","PhongToToon","isMeshPhongMaterial","MeshToonMaterial","markerImage","Image","src","texture","Texture","image","size","zincObject","spriteMaterial","sprite","Group","parent","isMarker","initialise","SpriteMaterial","alphaTest","depthTest","depthWrite","sizeAttenuation","Sprite","porportion","setSpriteSize","project","shader","vertexShader","replace","join","idIn","glyphsetIn","FaceColors","label","labelString","isGlyph","fromMesh","meshIn","getGlyphset","setLabel","String","showLabel","getPosition","getSprite","Label","getGroup","getLabel","getMesh","setTransformation","axis1","axis2","axis3","elements","SpriteText","default","textIn","getStyle","setScale","scaling","getString","JSONLoader","glyphList","axis1s","axis2s","axis3s","scales","labels","numberOfTimeSteps","numberOfVertices","baseSize","scaleFactors","repeat_mode","ready","morphColours","morphVertices","isGlyphset","_transformMatrix","_bot_colour","_top_colour","_boundingBox1","_boundingBox2","_boundingBox3","_points","load","glyphsetData","glyphURL","finishCallback","isInline","displayLabels","MorphColours","MorphVertices","number_of_time_steps","number_of_vertices","base_size","scale_factors","loader","InstancedMesh","parse","meshloader","materials","crossOrigin","resolve_glyph_axes","return_arrays","sign","axis_scale","final_axis1","final_axis2","final_axis3","final_point","mirrored_axis1","mirrored_axis2","mirrored_axis3","mirrored_point","number_of_glyphs","glyph_repeat_mode","use_axis1","use_axis2","use_scale","final_scale1","magnitude","sqrt","updateGlyphsetTransformation","current_positions","current_axis1s","current_axis2s","current_axis3s","current_scales","numberOfGlyphs","numberOfPositions","current_glyph_index","current_index","current_position","current_axis1","current_axis2","current_axis3","current_scale","arrays","setMatrixAt","glyph","instanceMatrix","updateGlyphsetHexColors","current_colors","hex_values","numberOfColours","setColorAt","instanceColor","updateMorphGlyphsets","current_time","bottom_frame","proportion","top_frame","ceil","bottom_positions","top_positions","bottom_axis1","top_axis1","bottom_axis2","top_axis2","bottom_axis3","top_axis3","bottom_scale","top_scale","bottom_colors","top_colors","setRGB","createGlyphs","addCustomGlyph","addMeshAsGlyph","forEachGlyph","callbackFunction","tempGeometry","getMatrixAt","setFromMatrixPosition","applyMatrix4ToBox","box1","box2","union","Loader","LoaderUtils","Vector4","FileLoader","DefaultLoadingManager","manager","withCredentials","onLoad","onProgress","onError","texturePath","extractUrlBase","setWithCredentials","json","JSON","toLowerCase","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","u","nUvLayers","parseSkin","influencesPerVertex","w","d","bones","parseMorphing","dstVertices","srcVertices","dstNormals","srcNormals","cl","dstColors","srcColors","parseAnimations","outputAnimations","animations","animation","concat","clip","parseAnimation","morphAnimationClips","initMaterials","video","fullPath","VideoHandler","singleSided","flipSided","specularCoef","shininess","Handlers","handlers","regex","get","file","onLoadStart","onLoadProgress","onLoadComplete","createMaterial","BlendingMode","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","textureLoader","TextureLoader","materialLoader","MaterialLoader","loadTexture","path","repeat","wrap","anisotropy","setCrossOrigin","wrapS","RepeatWrapping","wrapT","MirroredRepeatWrapping","textures","blending","specular","emissive","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","emissiveMap","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","lightMap","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","aoMap","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","bumpMap","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","bumpScale","normalMap","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","normalScale","specularMap","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","metalnessMap","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","roughnessMap","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","alphaMap","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","setTextures","srcIn","_this","lastPlayPos","currentPlayPos","bufferingDetected","actualTime","currentTime","getVideoDuration","VideoTexture","minFilter","LinearFilter","magFilter","format","RGBFormat","isReadyToPlay","document","createElement","Points","isPointset","getCircularTexture","setSize","setSizeAttenuation","_inverseMatrix","_ray","Ray","_sphere","_position","_morphA","_tempA","PointsMaterial","updateMorphTargets","raycast","raycaster","intersects","matrixWorld","threshold","params","drawRange","ray","intersectsSphere","invert","localThreshold","localThresholdSq","isBufferGeometry","positionAttribute","morphPosition","end","calculatePosition","testPoint","morphTargetDictionary","rayPointDistanceSq","distanceSqToPoint","intersectPoint","closestPointToPoint","origin","near","far","distanceToRay","morphInfluences","influence","addScaledVector","sub","isLines","createLineSegment","line","LineSegments","setWidth","width","linewidth","_start","_end","Line","isLineSegments","_morphB","_tempB","LineBasicMaterial","vStart","vEnd","interSegment","interRay","step","distSq","distanceSqToSegment","faceIndex","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","canvas","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","height","onWindowResize","rect","getBoundingClientRect","left","top","target","getSize","initialiseVisualisation","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","scene","createScene","setCurrentScene","getCurrentScene","sceneIn","removeActiveScene","oldScene","setInteractiveControlEnable","setAdditionalScenesGroup","getSceneByName","new_scene","sceneName","resetView","viewAll","boundingBox2","viewAllWithBoundingBox","loadModelsURL","colours","opacities","loadViewURL","loadFromViewURL","jsonFilePrefix","updateDirectionalLight","runAnimation","requestAnimationFrame","cancelAnimationFrame","stopAnimate","stop","animate","Date","now","addPreRenderCallbackFunction","removePreRenderCallbackFunction","addPostRenderCallbackFunction","removePostRenderCallbackFunction","getPlayRate","setPlayRate","playRateIn","setMorphsTime","getZincGeometryByID","addToScene","addObject","addToOrthoScene","OrthographicCamera","createHUDSprites","imagewidth","imageheight","addLogo","ImageUtils","getDelta","renderGeometries","sceneItem","clearDepth","hasOwnProperty","getThreeJSRenderer","isSceneActive","addActiveScene","additionalScene","getThreeJSScene","clearAllActiveScene","clearAll","transitionScene","endingScene","currentCamera","getZincCameraControls","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","SceneLoader","SceneExporter","defaultMetadata","Duration","OriginalDuration","TimeStamps","defaultDuration","rendererIn","sceneLoader","minimap","rootRegion","Region","directionalLight","ambient","zincCameraControls","stereoEffectFlag","stereoEffect","autoClearFlag","displayMinimap","minimapScissor","x_offset","y_offset","align","updateRequired","scissor","_markerTarget","getDownloadProgress","aspect","updateProjectionMatrix","onResize","changeZoomByScrollRateUnit","unit","setupCamera","PerspectiveCamera","AmbientLight","DirectionalLight","setDirectionalLight","Minimap","loadView","settings","viewPort","setFromObject","setCurrentCameraSettings","setupMultipleViews","defaultView","entries","viewport","addViewport","setDefaultViewport","forEachGeometry","forEachGlyphset","forEachPointset","forEachLine","findGeometriesWithGroupName","GroupName","findPointsetsWithGroupName","findGlyphsetsWithGroupName","findLinesWithGroupName","findObjectsWithGroupName","findObjectsWithAnatomicalId","getBoundingBoxOfZincObjects","objectsArray","vectorToScreenXY","widthHalf","heightHalf","getObjectsScreenXY","zincObjects","getNamedObjectsScreenXY","addZincObject","calculateMaxAllowedDistance","loadGlyphsetURL","metaurl","glyphurl","loadPointsetURL","loadLinesURL","loadSTL","loadOBJ","loadMetadataURL","allCompletedCallback","loadGLTF","removeObject","toBeDownloaded","pause","setTime","myPlayRate","setVideoHandler","videoHandlerIn","getWindowsPosition","renderer_width","renderer_height","includes","renderMinimap","setScissorTest","setScissor","setViewport","updateCamera","mask","clear","setPathDuration","setStereoEffectEnable","stereoFlag","objectIsInScene","objectIsInRegion","alignBoundingBoxToCameraView","transitionTime","targetPosition","eyePosition","upVector","newVec1","newVec2","newVec3","crossVectors","angleTo","rotateCameraTransition","rotateAboutLookAtpoint","alignObjectToCameraView","setCameraTargetToObject","addVectors","isStereoEffectEnable","removeZincObject","getPickableThreeJSObjects","returnedObjects","getNormalisedMinimapCoordinates","event","offsetY","clientY","clientX","getMinimapDiffFromNormalised","getDiffFromNormalised","toBeDwonloaded","addMetadataTimeStamp","convertDurationObjectTomSec","getMetadataTag","getMetadata","setMetadataTag","removeMetadataTag","resetMetadata","resetDuration","convertDurationObjectToString","years","months","weeks","days","hours","mins","secs","setDurationFromObject","string","millisec","setOriginalDurationFromObject","exportGLTF","binary","exporter","getRootRegion","STLLoader","OBJLoader","GLTFLoader","progressMap","viewLoaded","errorDownload","totalSize","totalLoaded","unknownFound","progress","xhr","loaded","total","loadMultipleViews","referenceURL","views","Default","Inline","addMultipleViews","Entries","promises","newURL","URL","href","Promise","resolve","reject","fetch","then","response","catch","all","values","forEach","entry","setCurrentViewport","xmlhttp","viewData","requestURL","number","filename","targetRegion","numberOfResources","linesloader","newLines","loadGlyphset","newGlyphset","myCallback","onLoadGlyphsetReady","pointsetloader","newPointset","objloader","traverse","child","zincGeometry","addMeshToZincGeometry","loadSurfaceURL","fileFormat","metaFinishCallback","numberOfDownloaded","downloadedItem","addZincGeometry","newGeometry","parseDuration","durationString","match","loadSettings","item","readPrimitivesItem","order","FileFormat","AnatomicalId","compression","Type","newGeometryURL","GlyphGeometriesURL","DisplayLabels","readViewAndSettingsItem","substring","lastIndexOf","setPath","gltf","children","loadRegions","currentRegion","regions","Primitives","primitive","Order","Transformation","Children","regionName","childRegion","findOrCreateChildFromPath","getNumberOfObjectsInRegions","regionJson","counts","getNumberOfObjects","numberOfObjects","Regions","loadVersionOne","loadVersionTwo","Settings","Views","responseURL","Version","GLTFExporter","getAllObjects","pluginCallbacks","register","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","indexOf","unregister","input","onDone","GLTFWriter","plugins","setPlugins","write","WEBGL_CONSTANTS","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","UNSIGNED_INT","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","CLAMP_TO_EDGE","MIRRORED_REPEAT","REPEAT","THREE_TO_WEBGL","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","ClampToEdgeWrapping","PATH_PROPERTIES","quaternion","GLB_HEADER_BYTES","GLB_HEADER_MAGIC","GLB_VERSION","GLB_CHUNK_PREFIX_BYTES","GLB_CHUNK_TYPE_JSON","GLB_CHUNK_TYPE_BIN","equalArray","array1","array2","every","element","stringToArrayBuffer","window","TextEncoder","encode","ArrayBuffer","charCodeAt","isIdentityMatrix","getMinMax","output","POSITIVE_INFINITY","NEGATIVE_INFINITY","getY","getZ","getW","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","byteLength","cachedCanvas","pending","buffers","byteOffset","nodeMap","Map","skins","extensionsUsed","uids","uid","asset","cache","meshes","attributesNormalized","images","trs","onlyVisible","truncateDrawRange","embedImages","maxTextureSize","includeCustomExtensions","processInput","blob","Blob","extensionsUsedList","reader","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","DataView","setUint32","jsonChunk","stringify","jsonChunkPrefix","header","headerView","totalByteLength","glbBlob","glbReader","readAsDataURL","base64data","uri","serializeUserData","objectDef","gltfExtensions","extensionName","extensions","extras","message","getUID","has","isNormalizedNormalAttribute","abs","createNormalizedNormalAttribute","setX","setXYZ","applyTextureTransform","mapDef","didTransform","transformDef","toArray","rotation","processBuffer","processBufferView","componentType","bufferViews","componentSize","dataView","setFloat32","setUint16","setUint8","bufferViewDef","byteStride","processBufferViewImage","processAccessor","Error","end2","bufferViewTarget","minMax","bufferView","accessorDef","normalized","accessors","processImage","flipY","cachedImages","mimeType","RGBAFormat","imageDef","ctx","getContext","HTMLImageElement","HTMLCanvasElement","OffscreenCanvas","ImageBitmap","drawImage","Uint8ClampedArray","putImageData","ImageData","toBlob","bufferViewIndex","toDataURL","processSampler","samplers","samplerDef","processTexture","textureDef","sampler","_invokeAll","ext","writeTexture","processMaterial","isShaderMaterial","materialDef","pbrMetallicRoughness","isMeshStandardMaterial","isMeshBasicMaterial","baseColorFactor","metallicFactor","metalness","roughnessFactor","roughness","metalRoughMapDef","metallicRoughnessTexture","baseColorMapDef","baseColorTexture","emissiveIntensity","maxEmissiveComponent","emissiveFactor","emissiveMapDef","emissiveTexture","normalMapDef","normalTexture","occlusionMapDef","texCoord","aoMapIntensity","strength","occlusionTexture","alphaMode","alphaCutoff","doubleSided","writeMaterial","processMesh","meshCacheKeyParts","meshCacheKey","mode","isLineLoop","meshDef","primitives","targets","nameConversion","skinWeight","skinIndex","originalNormal","modifiedAttribute","attributeName","substr","toUpperCase","validVertexAttributes","accessor","weights","targetNames","reverseDictionary","warned","gltfAttributeName","baseAttribute","relativeAttribute","morphTargetsRelative","isMultiMaterial","cacheKey","writeMesh","processCamera","cameras","isOrtho","isOrthographicCamera","cameraDef","orthographic","xmag","right","ymag","zfar","znear","perspective","aspectRatio","yfov","degToRad","fov","processAnimation","root","Utils","mergeMorphTargetTracks","tracks","channels","track","trackBinding","PropertyBinding","parseTrackName","trackNode","findNode","nodeName","trackProperty","propertyName","objectName","isSkinnedMesh","skeleton","getBoneByName","objectIndex","outputItemSize","times","interpolation","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","getInterpolation","InterpolateDiscrete","node","processSkin","nodes","rootJoint","joints","inverseBindMatrices","temporaryBoneInverse","boneInverses","multiply","bindMatrix","skin","processNode","nodeDef","translation","meshIndex","isCamera","nodeIndex","writeNode","processScene","scenes","sceneDef","processObjects","objects","beforeParse","objectsWithoutScene","afterParse","func","light","isLight","isDirectionalLight","isPointLight","isSpotLight","lightDef","intensity","spot","innerConeAngle","penumbra","outerConeAngle","decay","lights","isGLTFSpecularGlossinessMaterial","extensionDef","diffuseFactor","specularFactor","glossinessFactor","glossiness","diffuseTexture","specularMapDef","specularGlossinessTexture","insertKeyframe","valueSize","getValueSize","TimeBufferType","ValueBufferType","interpolant","evaluate","slice","mergedTracks","sourceTracks","sourceTrack","sourceTrackBinding","sourceTrackNode","propertyIndex","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","setInterpolation","InterpolateLinear","targetCount","targetIndex","mergedTrack","sourceInterpolant","keyframeIndex","nearPlane","farPlane","MODE","NONE","DEFAULT","PATH","SMOOTH_CAMERA_TRANSITION","AUTO_TUMBLE","ROTATE_TRANSITION","MINIMAP","SYNC_CONTROL","STATE","ROTATE","ZOOM","PAN","TOUCH_ROTATE","TOUCH_ZOOM","TOUCH_PAN","SCROLL","ROTATE_DIRECTION","FREE","HORIZONTAL","VERTICAL","CLICK_ACTION","MAIN","AUXILIARY","SECONDARY","tumble_rate","pointer_x","pointer_y","pointer_x_start","pointer_y_start","previous_pointer_x","previous_pointer_y","near_plane_fly_debt","touchZoomDistanceStart","touchZoomDistanceEnd","scrollRate","cameraPath","numberOfCameraPoint","updateLightWithPathFlag","deviceOrientationControl","defaultViewport","currentMode","smoothCameraTransitionObject","rotateCameraTransitionObject","cameraAutoTumbleObject","mouseScroll","rotateMode","_state","zincRayCaster","targetTouchId","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","sceneSphere","_tempEye","ndcControl","maxDist","viewports","getBoundingSphere","currentDist","viewportName","defaultName","getDefaultViewport","getViewportOfName","setRotationMode","setMouseButtonAction","buttonName","actionName","checkTravelDistance","newDist","translateViewport","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","len","touches","dx","dy","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentWheelEvent","deltaY","stopImmediatePropagation","fact","unproject","getVectorsFromRotateAboutLookAtPoints","axis","dot","up","rel_eyea","rel_eyeb","rel_eyec","upa","upb","upc","cos_angle","cos","sin_angle","sin","returned_values","tumble","delta_x","delta_y","tangent_dist","phi","acos","PI","calculateZoomDelta","changeZoomByValue","dist","near_far_minimum_ratio","flyZoom","directionalLightIn","addEventListener","removeEventListener","loadPath","pathData","CameraPath","NumberOfPoints","loadPathURL","path_url","updateTime","getTime","timeIn","getNumberOfTimeFrame","getCurrentTimeFrame","setCurrentTimeFrame","targetTimeFrame","updatePath","time_frame","bot_pos","top_pos","calculatePathNow","handleSyncControl","triggerCallback","zoom","controlEnabled","isTransitionCompleted","ROTATE_CAMERA_TRANSITION","stopOnCameraInput","playPath","stopPath","isPlayingPath","enableDirectionalLightUpdateWithPath","enableDeviceOrientation","ModifiedDeviceOrientationControls","disableDeviceOrientation","isDeviceOrientationEnabled","newViewport","view_angle","clip_distance","eyex","eyey","eyez","eye_distance","tan","localEyePosition","localNearPlane","nearClippingFactor","currentViewport","getDefaultEyePosition","getDefaultTargetPosition","RotateCameraTransition","pauseCameraTransition","stopCameraTransition","isTransitioningCamera","autoTumble","tumbleDirectionIn","tumbleRateIn","stopOnCameraInputIn","enableAutoTumble","stopAutoTumble","updateAutoTumble","requireUpdate","isAutoTumble","enableRaycaster","callbackFunctionIn","hoverCallbackFunctionIn","disableRaycaster","isSyncControl","currentMpde","enableSyncControl","NDCCameraControl","disableSyncControl","targetCameraIn","startingEyePosition","startingTargetPosition","startingUp","endingEyePosition","endingTargetPosition","endingUp","targetCamera","completed","newDuration","updateCameraSettings","axisIn","angleIn","previousTime","actualDelta","hostSceneIn","hoverCallbackFunction","Raycaster","mouse","lastHovered","cooldown","getIntersectsObject","zincCamera","threejsScene","setFromCamera","intersectObjects","hovered","setTimeout","awaitMove","tumbleAxis","computeTumbleAxisAngle","tumbleDirection","StereoCameraZoomFixed","cameraL","layers","cameraR","focus","eyeRight","eyeLeft","xmin","xmax","projectionMatrix","eyeSep","eyeSepOnProjection","ymax","DEG2RAD","_stereo","updateMatrixWorld","reorder","deviceOrientation","screenOrientation","onDeviceOrientationChangeEvent","onScreenOrientationChangeEvent","orientation","setObjectQuaternion","zee","euler","Euler","q0","Quaternion","q1","beta","gamma","orient","setFromEuler","setFromAxisAngle","applyQuaternion","connect","disconnect","eventCallback","cameraIn","defaultViewportIn","getCurrentPosition","zoomToBox","setCenterZoom","getPanZoom","setEventCallback","parentIn","tMatrix","hideAllChildren","transformation","nameIn","getName","getParent","getFullSeparatedPath","paths","parentName","p","unshift","getFullPath","shift","createChild","getChildWithName","childName","findChildFromSeparatedPath","pathArray","findChildFromPath","split","createChildFromSeparatedPath","createChildFromPath","objectsList","pickMarkers","transverse","boundingBox1","childObjects","primitivesArray","geometriesArray","filter","pointsetsArray","glyphsetsArray","linesArray","allObjects","targetScene","helper","positionAttributes","_box","_center","coord","new_coord","diameter","getBoundary","v4","cameraControl","ThreeBSP","work","BufferGeometryLoader","hostIn","host","core","worker","myResolve","createGeometryFromJSON","JSONParser","workerEventHandler","ev","action","log","csg","GeometryCSGInternal","postMessage","getHostGeometry","tempCSG","createZincGeometry","getGeometry","csgMesh","newMesh","toMesh","setCSG","CSG","sendToWork","guestGeometry","intersect","newCSG","subtract","terminateWorker","terminate","COPLANAR","FRONT","BACK","SPANNING","_length_i","polygon","polygons","Node","tree","Polygon","Vertex","Face4","calculateProperties","other_tree","clipTo","build","allPolygons","toGeometry","polygon_vertice_count","vertex_idx_a","vertex_idx_b","vertex_idx_c","verticeUvs","getInverse","polygon_count","vertice_dict","setFromRotationMatrix","vertice_count","flip","classifyVertex","side_value","classifySide","classification","num_positive","num_negative","splitPolygon","coplanar_front","coplanar_back","front","back","ti","tj","vi","vj","t","interpolate","scalar","lerp","other","e","divider","isConvex","temp","clipPolygons","self","geometryFromJSON","guest","hostCSG","setGeometry","prepareCSG","guestCSG","hostCSGs","setGlyphset","prepareCSGForGlyphs","store","glyphset","clippingPlanes"],"mappings":"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","file":"zinc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Zinc\"] = factory();\n\telse\n\t\troot[\"Zinc\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","require(\"url-polyfill\");\n\n/**\n * Provides a global namespace for the Zinc javascript library and some default parameters for it.\n * \n * @namespace\n * @author Alan Wu\n */\n\nconst Zinc = function() {\n this.Revision = \"0.40.0\";\n this.defaultMaterialColor = 0xFFFFFF;\n this.defaultOpacity = 1.0;\n this.modelPrefix = undefined;\n this.Geometry = require('./primitives/geometry').Geometry;\n this.Glyph = require('./primitives/glyph').Glyph;\n this.Glyphset = require('./primitives/glyphset').Glyphset;\n this.Pointset = require('./primitives/pointset').Pointset;\n this.Lines = require('./primitives/lines').Lines;\n this.Renderer = require('./renderer').Renderer;\n this.Scene = require('./scene').Scene;\n this.GeometryCSG = require('./geometryCSG').GeometryCSG;\n this.GlyphsetCSG = require('./glyphsetCSG').GlyphsetCSG;\n this.Viewport = require('./controls').Viewport;\n this.CameraControls = require('./controls').CameraControls;\n this.SmoothCameraTransition = require('./controls').SmoothCameraTransition;\n this.RayCaster = require('./controls').RayCaster;\n this.CameraAutoTumble = require('./controls').CameraAutoTumble;\n this.StereoEffect = require('./controls').StereoEffect;\n this.loadExternalFile = require('./utilities').loadExternalFile;\n this.loadExternalFiles = require('./utilities').loadExternalFiles;\n this.THREE = require('three'); \n \n};\n\nmodule.exports = new Zinc();\n","module.exports = require(\"url-polyfill\");","const THREE = require('three');\n\n/**\n * Provides an object which stores geometry and provides method which controls its animations.\n * This is created when a valid json file containging geometry is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Geometry}\n */\nconst Geometry = function () {\n (require('./zincObject').ZincObject).call(this);\n\t// THREE.Geometry or THREE.BufferGeometry\n\tthis.videoHandler = undefined;\n this.isGeometry = true;\n\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (this.geometry && this.morph && (geometryIn != undefined))\n\t\t\treturn;\n\t\t// First copy the geometry\n\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\n\t\tlet isTransparent = false;\n\t\tif (1.0 > options.opacity)\n\t\t\t isTransparent = true;\n\n\t\tlet material = undefined;\n\t\tif (geometry._video === undefined) {\n const morphTargets = options.localTimeEnabled || options.localMorphColour;\n\t\t\tif (materialIn) {\n\t\t\t\tmaterial = materialIn;\n\t\t\t\tmaterial.morphTargets = morphTargets;\n\t\t\t\tmaterial.morphNormals = options.localTimeEnabled;\n\t\t\t} else {\n\t\t\t\tif (geometry instanceof THREE.BufferGeometry && geometry.attributes.color === undefined) {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : morphTargets,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : morphTargets,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\tvertexColors : THREE.VertexColors,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t//material = PhongToToon(material);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ]) {\n\t\t\t\tmaterial.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n\t\t\t}\n\t\t} else {\n\t\t\tlet videoTexture = geometry._video.createCanvasVideoTexture();\n\t\t\tmaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\tcolor : new THREE.Color(1, 1, 1),\n\t\t\t\ttransparent : isTransparent,\n\t\t\t\topacity : options.opacity,\n\t\t\t\tmap : videoTexture,\n\t\t\t\tside : THREE.DoubleSide\n\t\t\t});\n\t\t\tthis.videoHandler = geometry._video;\n\t\t}\n\t\tlet mesh = new THREE.Mesh(geometry, material); \n\t\tthis.setMesh(mesh, options.localTimeEnabled, options.localMorphColour);\n\t}\n\t\n\tthis.calculateUVs = () => {\n\t\tthis.geometry.computeBoundingBox();\n\t\tconst max = this.geometry.boundingBox.max, min = this.geometry.boundingBox.min;\n\t\tconst offset = new THREE.Vector2(0 - min.x, 0 - min.y);\n\t\tconst range = new THREE.Vector2(max.x - min.x, max.y - min.y);\n\t\tthis.geometry.faceVertexUvs[0] = [];\n\t\tfor (let i = 0; i < this.geometry.faces.length ; i++) {\n\t\t const v1 = this.geometry.vertices[this.geometry.faces[i].a];\n\t\t const v2 = this.geometry.vertices[this.geometry.faces[i].b];\n\t\t const v3 = this.geometry.vertices[this.geometry.faces[i].c];\n\t\t geometry.faceVertexUvs[0].push(\n\t\t [\n\t\t new THREE.Vector2((v1.x + offset.x)/range.x ,(v1.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v2.x + offset.x)/range.x ,(v2.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v3.x + offset.x)/range.x ,(v3.y + offset.y)/range.y)\n\t\t ]);\n\t\t}\n\t\tgeometry.uvsNeedUpdate = true;\t\n\t}\n\t\n\t/**\n\t * Set wireframe display for this geometry.\n\t * \n\t * @param {Boolean} wireframe - Flag to turn on/off wireframe display.\n\t */\n\tthis.setWireframe = wireframe => {\n\t\tthis.morph.material.wireframe = wireframe;\n\t}\n\t\n}\n\nGeometry.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Geometry = Geometry;\n","module.exports = require(\"three\");","const THREE = require('three');\nconst THREEGeometry = require('../three/Geometry').Geometry;\n\nconst ZincObject = function() {\n this.isZincObject = true;\n this.geometry = undefined;\n // THREE.Mesh\n this.morph = undefined;\n // THREE.Mesh - for utilities purpose such as rendering \n // transparent surfaces - one for front face and one for back face.\n this.secondaryMesh = undefined;\n /**\n\t * Groupname given to this geometry.\n\t */\n this.groupName = undefined;\n this.timeEnabled = false;\n this.morphColour = false;\n this.inbuildTime = 0;\n this.mixer = undefined;\n this.animationGroup = undefined;\n\t/**\n\t * Total duration of the animation, this value interacts with the \n\t * {@link Zinc.Renderer#playRate} to produce the actual duration of the\n\t * animation. Actual time in second = duration / playRate.\n\t */\n this.duration = 6000;\n this.clipAction = undefined;\n this.userData = {};\n this.videoHandler = undefined;\n this.marker = undefined;\n this.markerUpdateRequired = true;\n this.markerVertexIndex = -1;\n this.boundingBoxUpdateRequired = true;\n this.cachedBoundingBox = new THREE.Box3();\n this._vertex = new THREE.Vector3();\n this.anatomicalId = undefined;\n this.region = undefined;\n this.animationClip = undefined;\n}\n\nZincObject.prototype.setDuration = function(durationIn) {\n this.duration = durationIn;\n if (this.clipAction) {\n this.clipAction.setDuration(this.duration);\n }\n}\n\nZincObject.prototype.getDuration = function() {\n return this.duration;\n}\n\nZincObject.prototype.setRegion = function(region) {\n this.region = region;\n}\n\nZincObject.prototype.getRegion = function() {\n return this.region;\n}\n\nZincObject.prototype.toBufferGeometry = function(geometryIn, options) {\n let geometry = undefined;\n if (geometryIn instanceof THREEGeometry) {\n if (options.localTimeEnabled && !geometryIn.morphNormalsReady && \n (geometryIn.morphNormals == undefined || geometryIn.morphNormals.length == 0))\n geometryIn.computeMorphNormals();\n geometry = geometryIn.toIndexedBufferGeometry();\n if (options.localMorphColour) {\n require(\"../utilities\").copyMorphColorsToIndexedBufferGeometry(geometryIn, geometry);\n }\n } else if (geometryIn instanceof THREE.BufferGeometry) {\n geometry = geometryIn.clone();\n }\n geometry.colorsNeedUpdate = true;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n if (geometryIn._video)\n geometry._video = geometryIn._video;\n return geometry;\n}\n\nZincObject.prototype.checkAndCreateTransparentMesh = function(options) {\n if (this.isGeometry && this.morph.material && this.morph.material.transparent) {\n if (!this.secondaryMesh) {\n let secondaryMaterial = this.morph.material.clone();\n secondaryMaterial.side = THREE.FrontSide;\n this.secondaryMesh = new THREE.Mesh(this.morph.geometry, secondaryMaterial);\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n this.secondaryMesh.userData = this;\n this.secondaryMesh.name = this.groupName;\n }\n this.morph.material.side = THREE.BackSide;\n this.morph.material.needsUpdate = true;\n this.morph.add(this.secondaryMesh);\n this.animationGroup.add(this.secondaryMesh);\n }\n}\n\nZincObject.prototype.checkAndRemoveTransparentMesh = function() {\n if (this.isGeometry && this.secondaryMesh) {\n this.morph.remove(this.secondaryMesh);\n this.animationGroup.uncache(this.secondaryMesh);\n this.animationGroup.remove(this.secondaryMesh);\n }\n this.morph.material.side = THREE.DoubleSide;\n}\n\nZincObject.prototype.setMesh = function(mesh, localTimeEnabled, localMorphColour) {\n this.animationGroup = new THREE.AnimationObjectGroup(mesh);\n this.mixer = new THREE.AnimationMixer(this.animationGroup);\n this.geometry = mesh.geometry;\n this.clipAction = undefined;\n if (this.geometry && this.geometry.morphAttributes) {\n let morphAttribute = this.geometry.morphAttributes.position;\n if (!morphAttribute) {\n morphAttribute = this.geometry.morphAttributes.color ?\n this.geometry.morphAttributes.color :\n this.geometry.morphAttributes.normal;\n }\n if (morphAttribute) {\n this.animationClip = THREE.AnimationClip.CreateClipsFromMorphTargetSequences(\n morphAttribute, 10, true);\n if (this.animationClip && (this.animationClip[0] != undefined)) {\n this.clipAction = this.mixer.clipAction(this.animationClip[0]).setDuration(\n this.duration);\n this.clipAction.loop = THREE.loopOnce;\n this.clipAction.clampWhenFinished = true;\n this.clipAction.play();\n }\n }\n }\n this.timeEnabled = localTimeEnabled;\n this.morphColour = localMorphColour;\n this.morph = mesh;\n this.morph.userData = this;\n this.morph.matrixAutoUpdate = false;\n this.checkAndCreateTransparentMesh();\n if (this.timeEnabled) {\n this.setFrustumCulled(false);\n } else {\n if (this.morphColour) {\n this.geometry.setAttribute('morphTarget0', this.geometry.getAttribute( 'position' ) );\n this.geometry.setAttribute('morphTarget1', this.geometry.getAttribute( 'position' ) );\n }\n }\n this.boundingBoxUpdateRequired = true;\n}\n\nZincObject.prototype.setName = function(groupNameIn) {\n this.groupName = groupNameIn;\n if (this.morph) {\n this.morph.name = this.groupName;\n }\n if (this.secondaryMesh) {\n this.secondaryMesh.name = this.groupName;\n }\n}\n\n/**\n * Get the local time of this geometry, it returns a value between \n * 0 and the duration.\n * \n * @return {Number}\n */\nZincObject.prototype.getCurrentTime = function() {\n if (this.clipAction) {\n const ratio = this.clipAction.time / this.clipAction._clip.duration;\n return this.duration * ratio;\n } else {\n return this.inbuildTime;\n }\n}\n\nconst updateMorphColorAttribute = function(targetGeometry, morph) {\n if (morph && targetGeometry.morphAttributes[ \"color\" ]) {\n const morphColors = targetGeometry.morphAttributes[ \"color\" ];\n const influences = morph.morphTargetInfluences;\n const length = influences.length;\n targetGeometry.deleteAttribute( 'morphColor0' );\n targetGeometry.deleteAttribute( 'morphColor1' );\n let bound = 0;\n let morphArray = [];\n for (let i = 0; (1 > bound) || (i < length); i++) {\n if (influences[i] > 0) {\n bound++;\n morphArray.push([i, influences[i]]);\n }\n }\n if (morphArray.length == 2) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[1][0] ] );\n } else if (morphArray.length == 1) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[0][0] ] );\n }\n }\n}\n\n/**\n * Set the local time of this geometry.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\nZincObject.prototype.setMorphTime = function(time) {\n let timeChanged = false;\n if (this.clipAction) {\n const ratio = time / this.duration;\n const actualDuration = this.clipAction._clip.duration;\n let newTime = ratio * actualDuration;\n if (newTime != this.clipAction.time) {\n this.clipAction.time = newTime;\n timeChanged = true;\n }\n if (timeChanged && this.isTimeVarying()) {\n this.mixer.update( 0.0 );\n }\n } else {\n let newTime = time; \n if (time > this.duration)\n newTime = this.duration;\n else if (0 > time)\n newTime = 0;\n else\n newTime = time;\n if (newTime != this.inbuildTime) {\n this.inbuildTime = newTime;\n timeChanged = true;\n }\n }\n if (timeChanged) {\n this.boundingBoxUpdateRequired = true;\n updateMorphColorAttribute(this.geometry, this.morph);\n if (this.timeEnabled)\n this.markerUpdateRequired = true;\n }\n}\n\n/**\n * Check if the geometry is time varying.\n * \n * @return {Boolean}\n */\nZincObject.prototype.isTimeVarying = function() {\n if (this.timeEnabled || this.morphColour)\n return true;\n return false;\n}\n\n/**\n * Get the visibility of this Geometry.\n * \n */\nZincObject.prototype.getVisibility = function() {\n return this.morph.visible;\n}\n\n/**\n * Set the visibility of this Geometry.\n * \n * @param {Boolean} visible - a boolean flag indicate the visibility to be set \n */\nZincObject.prototype.setVisibility = function(visible) {\n this.morph.visible = visible;\n}\n\n/**\n * Set the opacity of this Geometry. This function will also set the isTransparent\n * flag according to the provided alpha value.\n * \n * @param {Number} alpah - Alpha value to set for this geometry, \n * can be any value between from 0 to 1.0.\n */\nZincObject.prototype.setAlpha = function(alpha) {\n const material = this.morph.material;\n let isTransparent = false;\n if (alpha < 1.0)\n isTransparent = true;\n let transparentChanged = material.transparent == isTransparent ? false : true;\n material.opacity = alpha;\n material.transparent = isTransparent;\n if (transparentChanged)\n if (isTransparent)\n this.checkAndCreateTransparentMesh();\n else\n this.checkAndRemoveTransparentMesh();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.opacity = alpha;\n}\n\nZincObject.prototype.setFrustumCulled = function(flag) {\n if (this.morph) {\n this.morph.frustumCulled = flag;\n }\n}\n\nZincObject.prototype.setVertexColors = function(vertexColors) {\n this.morph.material.vertexColors = vertexColors;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.vertexColors = vertexColors;\n}\n\n/**\n * Set the colour of the geometry.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.getColour = function(colour) {\n if (this.morph && this.morph.material)\n return this.morph.material.color;\n\treturn undefined;\n}\n \n/**\n * Set the colour of the geometry.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.setColour = function(colour) {\n this.morph.material.color = colour;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n}\n\nZincObject.prototype.getColourHex = function() {\n if (!this.morphColour)\n return this.morph.material.color.getHexString();\n return undefined;\n}\n\nZincObject.prototype.setColourHex = function(hex) {\n this.morph.material.color.setHex(hex);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color.setHex(hex);\n}\n\n/**\n * Set the material of the geometry.\n * \n * @param {THREE.Material} material - Material to be set for this geometry.\n */\nZincObject.prototype.setMaterial = function(material) {\n this.morph.material = material;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material) {\n this.secondaryMesh.material.dispose();\n this.secondaryMesh.material = material.clone()\n this.secondaryMesh.material.side = THREE.FrontSide;\n }\n}\n\n/**\n * Get the index of the closest vertex to centroid.\n */\nZincObject.prototype.getClosestVertexIndex = function() {\n let closestIndex = -1;\n if (this.morph) {\n let position = this.morph.geometry.attributes.position;\n let boundingBox = new THREE.Box3().setFromBufferAttribute(position);\n let center = new THREE.Vector3();\n boundingBox.getCenter(center);\n if (position && boundingBox) {\n let distance = -1;\n let currentDistance = 0;\n let current = new THREE.Vector3();\n for (let i = 0; i < position.count; i++) {\n current.fromArray(position.array, i * 3);\n currentDistance = current.distanceTo(center);\n if (distance == -1)\n distance = currentDistance;\n else if (distance > (currentDistance)) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n }\n return closestIndex;\n}\n\n/**\n * Get the closest vertex to centroid.\n */\nZincObject.prototype.getClosestVertex = function() {\n let position = new THREE.Vector3();\n if (this.markerVertexIndex == -1) {\n this.markerVertexIndex = this.getClosestVertexIndex();\n }\n if (this.markerVertexIndex >= 0) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = this.morph.geometry.morphAttributes;\n if (influences && attributes && attributes.position) {\n let found = false;\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n this._vertex.fromArray(\n attributes.position[i].array, this.markerVertexIndex * 3);\n position.add(this._vertex.multiplyScalar(influences[i]));\n }\n }\n if (found)\n return position;\n } else {\n position.fromArray(this.morph.geometry.attributes.position.array,\n this.markerVertexIndex * 3);\n return position;\n }\n }\n this.getBoundingBox().getCenter(position);\n return position;\n}\n\n/**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\nZincObject.prototype.getBoundingBox = function() {\n if (this.morph && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = undefined;\n if (this.morph.geometry)\n attributes = this.morph.geometry.morphAttributes;\n let found = false;\n if (influences && attributes && attributes.position) {\n let min = new THREE.Vector3();\n let max = new THREE.Vector3();\n let box = new THREE.Box3();\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n box.setFromArray(attributes.position[i].array);\n min.add(box.min.multiplyScalar(influences[i]));\n max.add(box.max.multiplyScalar(influences[i]));\n }\n }\n if (found)\n this.cachedBoundingBox.set(min, max);\n }\n if (!found)\n this.cachedBoundingBox.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n}\n\n/**\n * Clear this geometry and free the memory.\n */\nZincObject.prototype.dispose = function() {\n if (this.morph && this.morph.geometry)\n this.morph.geometry.dispose();\n if (this.morph && this.morph.material)\n this.morph.material.dispose();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.dispose();\n if (this.geometry)\n this.geometry.dispose();\n this.animationGroup = undefined;\n this.mixer = undefined;\n this.morph = undefined;\n this.clipAction = undefined;\n this.groupName = undefined;\n}\n\nZincObject.prototype.updateMarker = function(playAnimation, options) {\n if ((playAnimation == false) &&\n (options && options.displayMarkers))\n {\n if (this.groupName) {\n if (!this.marker) {\n this.marker = new (require(\"./marker\").Marker)(this);\n this.markerUpdateRequired = true;\n }\n if (this.markerUpdateRequired) {\n let position = this.getClosestVertex();\n if (position) {\n this.marker.setPosition(position.x, position.y, position.z);\n this.markerUpdateRequired = false;\n }\n }\n if (options && options.camera && options.markerDepths) {\n options.markerDepths.push(\n this.marker.updateNDC(options.camera.cameraObject));\n }\n if (!this.marker.isEnabled()) {\n this.marker.enable();\n this.morph.add(this.marker.morph);\n }\n }\n } else {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.disable();\n this.morph.remove(this.marker.morph);\n }\n this.markerUpdateRequired = true;\n }\n}\n\nZincObject.prototype.processMarkerVisual = function(min, max) {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.updateVisual(min, max);\n }\n}\n\nZincObject.prototype.initiateMorphColor = function() {\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true))) {\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n}\n\nZincObject.prototype.setRenderOrder = function(renderOrder) {\n if (this.morph && (renderOrder !== undefined)) {\n this.morph.renderOrder = renderOrder;\n if (this.secondaryMesh)\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n\n }\n}\n\n//Update the geometry and colours depending on the morph.\nZincObject.prototype.render = function(delta, playAnimation, options) {\n if (playAnimation == true)\n {\n if ((this.clipAction) && this.isTimeVarying()) {\n this.mixer.update( delta );\n }\n else {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n }\n if (delta != 0) {\n this.boundingBoxUpdateRequired = true;\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true)))\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n }\n this.updateMarker(playAnimation, options);\n}\n\nexports.ZincObject = ZincObject;\n","import {\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tEventDispatcher,\n\tFloat32BufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tMathUtils,\n\tObject3D,\n\tSphere,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _m1 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\n\nfunction Geometry() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n this.normals = [];\n this.uvs = [];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\tthis.morphNormalsReady = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n return vertices;\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\tlet vertexNormals = tmpGeo.computeVertexNormals();\n\n if (vertexNormals && vertexNormals.length > 0) {\n this.morphTargets[i].normals = new Array( this.vertices.length );\n\n for ( let v = 0; v < vertexNormals.length; v ++ ) {\n \n this.morphTargets[i].normals[ v ] = vertexNormals[v].clone();\n \n }\n }\n\n\t\t\t// store morph normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n this.morphNormalsReady = true;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet normalMatrix;\n\t\tconst vertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tconst face = faces2[ i ];\n\t\t\tlet normal, color;\n\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tconst diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tconst vertices = source.vertices;\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tconst colors = source.colors;\n\n\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tconst faces = source.faces;\n\n\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\n\tcomputeGroups( ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = this.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\treturn groups;\n\n\t},\n\n\ttoBufferGeometry: function () {\n\n\t\tconst geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tbuffergeometry.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n toIndexedBufferGeometry: function () {\n\n\t\t//const geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( this.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( this.vertices ) );\n\n\t\tif ( this.normals.length > 0 ) {\n\t\t\tconst normals = new Float32Array( this.normals.length );\n let buffer = new BufferAttribute( normals, 3 ).copyArray( this.normals );\n\t\t\tbuffergeometry.setAttribute( 'normal', buffer);\n\t\t}\n if ( this.uvs.length > 0 && this.uvs[0].length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( this.uvs[0].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyArray( this.uvs[0] ) );\n\t\t}\n\n\t\tif ( this.uvs.length > 1 && this.uvs[1].length > 0 ) {\n\t\t\tconst uvs2 = new Float32Array( this.uvs[1].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyArray( this.uvs[1] ) );\n\t\t}\n\n if ( this.colors.length > 0) {\n\n const colorArray = [];\n for (let i = 0 ; i < this.colors.length; i++) {\n colorArray.push(new Color( this.colors[ i ] ));\n }\n const colors = new Float32Array( colorArray.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( colorArray ) );\n\n } else {\n\n const colorsArray = new Float32Array( this.vertices.length * 3 );\n for (let i = 0; i < this.vertices.length * 3; i++) {\n colorsArray[i] = 1.0;\n }\n buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ) );\n \n }\n\n if (this.faces.length > 0) {\n\n let colors = [];\n\n let indices = [];\n\n for (let i = 0 ; i < this.faces.length; i++) {\n\n indices.push(this.faces[i].a, this.faces[i].b, this.faces[i].c);\n\n const vertexColors = this.faces[i].vertexColors;\n \n if ( vertexColors.length === 3 ) {\n \n colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n \n } else {\n \n const color = this.faces[i].color;\n \n colors.push( color, color, color );\n \n }\n\n }\n\n // if ( colors.length > 0 ) {\n\n// const colorsArray = new Float32Array( colors.length * 3 );\n// buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ).copyColorsArray( colors ) );\n \n// }\n\n buffergeometry.setIndex( indices );\n\n buffergeometry.groups = this.computeGroups();\n\n }\n\n\t\t// morphs\n\n if (this.morphTargets.length > 0) {\n\n\t\t\tconst array = [];\n const normalsArray = [];\n\n\t\t\tfor ( let i = 0, l = this.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = this.morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.vertices.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.vertices ) );\n\n if (morphTarget.normals) {\n\n\n const attribute = new Float32BufferAttribute( morphTarget.normals.length * 3, 3 );\n attribute.name = morphTarget.name;\n\n normalsArray.push( attribute.copyVector3sArray( morphTarget.normals ) );\n \n }\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes.position = array;\n buffergeometry.morphAttributes.normal = normalsArray;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( this.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( this.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( this.skinIndices ) );\n\n\t\t}\n\n\t\tif ( this.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( this.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( this.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = this.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = this.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nGeometry.createBufferGeometryFromObject = function ( object ) {\n\n\tlet buffergeometry = new BufferGeometry();\n\n\tconst geometry = object.geometry;\n\n\tif ( object.isPoints || object.isLine ) {\n\n\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\tbuffergeometry.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\tbuffergeometry.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\tbuffergeometry.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t} else if ( object.isMesh ) {\n\n\t\tbuffergeometry = geometry.toBufferGeometry();\n\n\t}\n\n\treturn buffergeometry;\n\n};\n\nclass DirectGeometry {\n\n\tconstructor() {\n\n\t\tthis.vertices = [];\n\t\tthis.normals = [];\n\t\tthis.colors = [];\n\t\tthis.uvs = [];\n\t\tthis.uvs2 = [];\n\n\t\tthis.groups = [];\n\n\t\tthis.morphTargets = {};\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\t// this.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tcomputeGroups( geometry ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t}\n\n\tfromGeometry( geometry ) {\n\n\t\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Face3 {\n\n\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\tthis.materialIndex = materialIndex;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { Face3, Geometry };\n","const THREE = require('three');\n\nfunction resolveURL(url) {\n\tlet actualURL = url;\n\tconst prefix = (require(\"./zinc\").modelPrefix);\n\t\n\tif (prefix) {\n\t\tif (prefix[prefix.length -1] != '/')\n\t\t\tprefix = prefix + '/';\n\t\tconst r = new RegExp('^(?:[a-z]+:)?//', 'i');\n\t\tif (!r.test(url)) {\n\t\t\tactualURL = prefix + url;\n\t\t}\n\t}\n\t\n\treturn actualURL;\n}\n\n//Convenient function\nfunction loadExternalFile(url, data, callback, errorCallback) {\n // Set up an asynchronous request\n const request = new XMLHttpRequest();\n request.open('GET', resolveURL(url), true);\n\n // Hook the event that gets called as the request progresses\n request.onreadystatechange = () => {\n // If the request is \"DONE\" (completed or failed)\n if (request.readyState == 4) {\n // If we got HTTP status 200 (OK)\n if (request.status == 200) {\n callback(request.responseText, data)\n } else { // Failed\n errorCallback(url);\n }\n }\n };\n\n request.send(null); \n}\n\nfunction loadExternalFiles(urls, callback, errorCallback) {\n const numUrls = urls.length;\n let numComplete = 0;\n const result = [];\n\n // Callback for a single file\n function partialCallback(text, urlIndex) {\n result[urlIndex] = text;\n numComplete++;\n\n // When all files have downloaded\n if (numComplete == numUrls) {\n callback(result);\n }\n }\n\n for (let i = 0; i < numUrls; i++) {\n \tloadExternalFile(urls[i], i, partialCallback, errorCallback);\n }\n}\n\n\n//Get the colours at index\nexports.getColorsRGB = (colors, index) => {\n const index_in_colors = Math.floor(index/3);\n const remainder = index%3;\n let hex_value = 0;\n if (remainder == 0)\n {\n hex_value = colors[index_in_colors].r;\n }\n else if (remainder == 1)\n {\n hex_value = colors[index_in_colors].g;\n }\n else if (remainder == 2)\n {\n hex_value = colors[index_in_colors].b;\n }\n const mycolor = new THREE.Color(hex_value);\n return [mycolor.r, mycolor.g, mycolor.b];\n}\n\n\nexports.copyMorphColorsToBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( var i = 0, l = morphColors.length; i < l; i ++ ) {\n let morphColor = morphColors[ i ];\n let colorArray = [];\n\t\t for ( var j = 0; j < geometry.faces.length; j ++ ) {\n let face = geometry.faces[j];\n let color = getColorsRGB(morphColor.colors, face.a);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.b);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.c);\n colorArray.push(color[0], color[1], color[2]);\n }\n var attribute = new THREE.Float32BufferAttribute( geometry.faces.length * 3 * 3, 3 );\n attribute.name = morphColor.name;\n array.push( attribute.copyArray( colorArray ) );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n }\n\n\n exports.copyMorphColorsToIndexedBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( let i = 0, l = morphColors.length; i < l; i ++ ) {\n const morphColor = morphColors[ i ];\n const colorArray = [];\n\t\t for ( let j = 0; j < morphColor.colors.length * 3; j ++ ) {\n let color = getColorsRGB(morphColor.colors, j);\n colorArray.push(color[0], color[1], color[2]);\n }\n const attribute = new THREE.Float32BufferAttribute( colorArray, 3 );\n attribute.name = morphColor.name;\n array.push( attribute );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n }\n\n exports.mergeVertices = ( geometry, tolerance = 1e-4 ) => {\n\n tolerance = Math.max( tolerance, Number.EPSILON );\n\n // Generate an index buffer if the geometry doesn't have one, or optimize it\n // if it's already available.\n var hashToIndex = {};\n var indices = geometry.getIndex();\n var positions = geometry.getAttribute( 'position' );\n var vertexCount = indices ? indices.count : positions.count;\n\n // next value for triangle indices\n var nextIndex = 0;\n\n // attributes and new attribute arrays\n var attributeNames = Object.keys( geometry.attributes );\n var attrArrays = {};\n var morphAttrsArrays = {};\n var newIndices = [];\n var getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\n // initialize the arrays\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n var name = attributeNames[ i ];\n\n attrArrays[ name ] = [];\n\n var morphAttr = geometry.morphAttributes[ name ];\n if ( morphAttr ) {\n\n morphAttrsArrays[ name ] = new Array( morphAttr.length ).fill().map( () => [] );\n\n }\n\n }\n\n // convert the error tolerance to an amount of decimal places to truncate to\n var decimalShift = Math.log10( 1 / tolerance );\n var shiftMultiplier = Math.pow( 10, decimalShift );\n for ( var i = 0; i < vertexCount; i ++ ) {\n\n var index = indices ? indices.getX( i ) : i;\n\n // Generate a hash for the vertex attributes at the current index 'i'\n var hash = '';\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var itemSize = attribute.itemSize;\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n // double tilde truncates the decimal value\n hash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * shiftMultiplier ) },`;\n\n }\n\n }\n\n // Add another reference to the vertex if it's already\n // used by another index\n if ( hash in hashToIndex ) {\n\n newIndices.push( hashToIndex[ hash ] );\n\n } else {\n\n // copy data to the new index in the attribute arrays\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var morphAttr = geometry.morphAttributes[ name ];\n var itemSize = attribute.itemSize;\n var newarray = attrArrays[ name ];\n var newMorphArrays = morphAttrsArrays[ name ];\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n var getterFunc = getters[ k ];\n newarray.push( attribute[ getterFunc ]( index ) );\n\n if ( morphAttr ) {\n\n for ( var m = 0, ml = morphAttr.length; m < ml; m ++ ) {\n\n newMorphArrays[ m ].push( morphAttr[ m ][ getterFunc ]( index ) );\n\n }\n\n }\n\n }\n\n }\n\n hashToIndex[ hash ] = nextIndex;\n newIndices.push( nextIndex );\n nextIndex ++;\n\n }\n\n }\n\n // Generate typed arrays from new attribute arrays and update\n // the attributeBuffers\n const result = geometry.clone();\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n var name = attributeNames[ i ];\n var oldAttribute = geometry.getAttribute( name );\n var attribute;\n\n var buffer = new oldAttribute.array.constructor( attrArrays[ name ] );\n if ( oldAttribute.isInterleavedBufferAttribute ) {\n\n attribute = new THREE.BufferAttribute( buffer, oldAttribute.itemSize, oldAttribute.itemSize );\n\n } else {\n\n attribute = geometry.getAttribute( name ).clone();\n attribute.setArray( buffer );\n\n }\n\n result.setAttribute( name, attribute );\n\n // Update the attribute arrays\n if ( name in morphAttrsArrays ) {\n\n for ( var j = 0; j < morphAttrsArrays[ name ].length; j ++ ) {\n\n var morphAttribute = geometry.morphAttributes[ name ][ j ].clone();\n morphAttribute.setArray( new morphAttribute.array.constructor( morphAttrsArrays[ name ][ j ] ) );\n result.morphAttributes[ name ][ j ] = morphAttribute;\n\n }\n\n }\n\n }\n\n // Generate an index buffer typed array\n var cons = Uint8Array;\n if ( newIndices.length >= Math.pow( 2, 8 ) ) cons = Uint16Array;\n if ( newIndices.length >= Math.pow( 2, 16 ) ) cons = Uint32Array;\n\n var newIndexBuffer = new cons( newIndices );\n var newIndices = null;\n if ( indices === null ) {\n\n newIndices = new THREE.BufferAttribute( newIndexBuffer, 1 );\n\n } else {\n\n newIndices = geometry.getIndex().clone();\n newIndices.setArray( newIndexBuffer );\n\n }\n\n result.setIndex( newIndices );\n\n return result;\n\n}\n\nfunction PhongToToon(materialIn) {\n\tif (materialIn.isMeshPhongMaterial) {\n\t\tlet material = new THREE.MeshToonMaterial({\n\t\t\tcolor : materialIn.color.clone(),\n\t\t\tmorphTargets : materialIn.morphTargets,\n\t\t\tmorphNormals : materialIn.morphNormals,\n\t\t\tvertexColors : materialIn.vertexColors,\n\t\t\ttransparent : materialIn.transparent,\n\t\t\topacity : materialIn.opacity,\n\t\t\tside : materialIn.side\n\t\t});\n\t\tif (materialIn.map)\n\t\t\tmaterial.map = materialIn.map;\n\t\treturn material;\n\t}\n\n\treturn materialIn;\n}\n\n\nexports.resolveURL = resolveURL;\nexports.loadExternalFile = loadExternalFile;\nexports.loadExternalFiles = loadExternalFiles;\nexports.PhongToToon = PhongToToon;\n","var THREE = require('three');\nconst markerImage = new Image(128, 128);\nmarkerImage.src = require(\"../assets/mapMarker.svg\");\nconst texture = new THREE.Texture();\ntexture.image = markerImage;\ntexture.needsUpdate = true;\nconst size = [0.015, 0.02, 1];\n\n//Marker - used to indicate there is a \nconst Marker = function(zincObject) {\n (require('./zincObject').ZincObject).call(this);\n this.texture = texture;\n let spriteMaterial = undefined;\n let sprite = undefined;\n this.morph = new THREE.Group();\n this.parent = zincObject;\n this.isMarker = true;\n let enabled = false;\n let vector = new THREE.Vector3();\n\n\tlet initialise = () => {\n spriteMaterial = new THREE.SpriteMaterial({\n map: texture,\n alphaTest: 0.5,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n sizeAttenuation: false\n }); \n sprite = new THREE.Sprite(spriteMaterial);\n sprite.center.set(0.5, 0);\n this.morph.add(sprite);\n this.morph.position.set(0, 0, 0);\n this.morph.renderOrder = 10000;\n sprite.scale.set(size[0], size[1], size[2]);\n sprite.userData = this;\n }\n\n this.updateVisual = (min, max) => {\n let scale = 1;\n let opacity = 1;\n let porportion = 0;\n if (min !== max) {\n porportion = (1 - (vector.z - min) / (max - min));\n scale = 0.5 + porportion * 0.5;\n opacity = 0.6 + porportion * 0.4;\n }\n sprite.material.opacity = opacity;\n this.setSpriteSize(scale);\n }\n\n this.updateNDC = camera => {\n vector.copy(this.morph.position);\n vector.project(camera);\n vector.z = Math.min(Math.max(vector.z, 0), 1);\n return vector.z;\n }\n\n this.setPosition = (x, y, z) => {\n this.morph.position.set(x, y, z);\n }\n\n this.setSpriteSize = size => {\n sprite.scale.set(0.015, 0.02, 1);\n sprite.scale.multiplyScalar(size);\n }\n\n this.isEnabled = () => {\n return enabled;\n }\n\n this.enable = () => {\n enabled = true;\n this.morph.visible = true;\n }\n \n this.disable = () => {\n enabled = false;\n this.morph.visible = false;\n }\n\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}\n\nMarker.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Marker = Marker;\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzY1IDU2MCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzY1IDU2MCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBmaWxsPSIjMDBBRUVGIiBkPSJNMTgyLjksNTUxLjdjMCwwLjEsMC4yLDAuMywwLjIsMC4zUzM1OC4zLDI4MywzNTguMywxOTQuNmMwLTEzMC4xLTg4LjgtMTg2LjctMTc1LjQtMTg2LjkNCgkJQzk2LjMsNy45LDcuNSw2NC41LDcuNSwxOTQuNmMwLDg4LjQsMTc1LjMsMzU3LjQsMTc1LjMsMzU3LjRTMTgyLjksNTUxLjcsMTgyLjksNTUxLjd6IE0xMjIuMiwxODcuMmMwLTMzLjYsMjcuMi02MC44LDYwLjgtNjAuOA0KCQljMzMuNiwwLDYwLjgsMjcuMiw2MC44LDYwLjhTMjE2LjUsMjQ4LDE4Mi45LDI0OEMxNDkuNCwyNDgsMTIyLjIsMjIwLjgsMTIyLjIsMTg3LjJ6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\"","exports.augmentMorphColor = function() {\n return function(shader) {\n shader.vertexShader = shader.vertexShader.replace(\n '#include <color_pars_vertex>',\n [\n\t 'varying vec3 vColor;',\n 'attribute vec3 morphColor0;',\n 'attribute vec3 morphColor1;'\n ].join( '\\n' )\n );\n shader.vertexShader = shader.vertexShader.replace(\n '#include <color_vertex>',\n [\n 'vColor.xyz = color.xyz;',\n '#ifdef USE_MORPHTARGETS',\n 'vColor = morphColor0 * morphTargetInfluences[ 0 ];',\n 'vColor += morphColor1 * morphTargetInfluences[ 1 ];',\n '#endif'\n ].join( '\\n' )\n );\n };\n}\n","const THREE = require('three');\n\n/**\n * Zinc representation of glyph graphic, it contains the colours, \n * geometry and transformation of the glyph.\n * \n * @param {THREE.Geometry} geometry - Geometry of the glyph.\n * @param {THREE.material} materialIn - Material of the glyph.\n * @param {Number} idIn - Id of the glyph.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Glyph}\n */\nconst Glyph = function(geometry, materialIn, idIn, glyphsetIn) {\n (require('./zincObject').ZincObject).call(this);\n\tlet material = undefined;\n\tif (materialIn) {\n\t\tmaterial = materialIn.clone();\n\t\tmaterial.vertexColors = THREE.FaceColors;\n\t}\n\tconst parent = glyphsetIn;\n\tthis.id = idIn;\n\tlet label = undefined;\n\tlet labelString = undefined;\n\tconst group = new THREE.Group();\n\tthis.isGlyph = true;\n\t\n\tthis.fromMesh = meshIn => {\n\t\tif (meshIn && meshIn.isMesh) {\n\t\t\tthis.morph = meshIn.clone();\n\t\t\tthis.morph.userData = this;\n\t\t\tgroup.add(this.morph);\n\t\t\treturn true;\n\t\t} \n\t\treturn false;\n\t}\n\t\n\tif (geometry && material) {\n\t\tthis.fromMesh(new THREE.Mesh( geometry, material ));\n\t}\n\t\n\tthis.getGlyphset = function() {\n\t\treturn parent;\n\t}\n\t\n\tthis.setLabel = text => {\n\t\tif (text && (typeof text === 'string' || text instanceof String)) {\n\t\t\tlabelString = text;\n\t\t\tif (this.morph)\n this.morph.name = text;\n\t\t}\n\t\tif (label)\n\t\t\tthis.showLabel();\n\t}\t\n\t\n\tthis.showLabel = (colour) => {\n\t if (label) {\n\t\t position = label.getPosition();\n\t\t group.remove(label.getSprite());\n\t\t label.dispose();\n\t\t label = undefined;\n }\n\t if (labelString && (typeof labelString === 'string' || labelString instanceof String)) {\n\t\t let position = [0, 0, 0];\n\t label = new (require('./label').Label)(labelString, colour);\n\t label.setPosition(position[0], position[1], position[2]);\n\t group.add(label.getSprite());\n\t }\n\t}\n\t\n\t/**\n\t * Get the group containing the label and mesh.\n\t * @return {THREE.Group}\n\t */\n\tthis.getGroup = () => {\n\t\treturn group;\n\t}\n\t\n\t/**\n\t * Get the label of this glyph\n\t * @return {Label}\n\t */\n\tthis.getLabel = () => {\n\t\treturn labelString;\n\t}\n \n\t/**\n\t * Get the mesh of this glyph.\n\t * @return {THREE.Mesh}\n\t */\n\tthis.getMesh = () => {\n\t\treturn this.morph;\n }\n\n\t/**\n\t * Set the transformation of this glyph.\n\t * @param {Array} position - Three components vectors containing position of the\n\t * transformation.\n\t * @param {Array} axis1 - Three components vectors containing axis1 rotation of the\n\t * transformation.\n\t * @param {Array} axis2 - Three components vectors containing axis2 rotation of the\n\t * transformation.\n\t * @param {Array} position - Three components vectors containing axis3 rotation of the\n\t * transformation.\n\t */\n\tthis.setTransformation = (position, axis1, axis2, axis3) => {\n if (this.morph) {\n this.morph.matrix.elements[0] = axis1[0];\n this.morph.matrix.elements[1] = axis1[1];\n this.morph.matrix.elements[2] = axis1[2];\n this.morph.matrix.elements[3] = 0.0;\n this.morph.matrix.elements[4] = axis2[0];\n this.morph.matrix.elements[5] = axis2[1];\n this.morph.matrix.elements[6] = axis2[2];\n this.morph.matrix.elements[7] = 0.0;\n this.morph.matrix.elements[8] = axis3[0];\n this.morph.matrix.elements[9] = axis3[1];\n this.morph.matrix.elements[10] = axis3[2];\n this.morph.matrix.elements[11] = 0.0;\n this.morph.matrix.elements[12] = position[0];\n this.morph.matrix.elements[13] = position[1];\n this.morph.matrix.elements[14] = position[2];\n this.morph.matrix.elements[15] = 1.0;\n this.morph.matrixAutoUpdate = false;\n }\n\t\tif (label)\n\t\t label.setPosition(position[0], position[1], position[2]);\n\t}\n \n this.setColour = (color) => {\n if (label)\n label.setColour(color);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n }\n\n\t/**\n\t * Clear and free its memory.\n\t */\n\tthis.dispose = () => {\n\t if (this.material)\n\t this.material.dispose();\n\t\tthis.morph = undefined;\n\t}\n}\n\nGlyph.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyph = Glyph;\n","const SpriteText = require('three-spritetext').default;\n\nexports.Label = function ( textIn, colour ) {\n let text = textIn;\n let sprite = undefined;\n if (colour)\n sprite = new SpriteText(text, 0.015, colour.getStyle());\n else\n sprite = new SpriteText(text, 0.015);\n sprite.material.sizeAttenuation = false;\n sprite.center.x = -0.05;\n sprite.center.y = 0;\n\n this.getPosition = () => {\n\t if (sprite)\n\t\t return [sprite.position.x, sprite.position.y, sprite.position.z];\n\t return [0, 0, 0];\n }\n \n//now set the position at the correct 3D space \n this.setPosition = (x, y, z) => {\n if (sprite)\n sprite.position.set(x, y, z);\n }\n\n this.setColour = colour => {\n sprite.color = colour.getStyle();\n }\n \n //scale up the texture\n this.setScale = scaling => {\n if (sprite && scaling > 0.0) \n sprite.scale.set( scaling, scaling, 1.0 );\n }\n \n this.dispose = () => {\n sprite.dispose();\n }\n \n this.getSprite = () => {\n return sprite;\n }\n \n this.getString = () => {\n\t return text;\n }\n\n};\n\n\n\n","module.exports = require(\"three-spritetext\");","const THREE = require('three');\nconst JSONLoader = require('../loader').JSONLoader;\n\n/**\n * This is a container of {@link Zinc.Glyph} and their graphical properties \n * including transformations, colors, number of time steps, duration of animations\n * and group name. Please note that all glyphs in the glyphset share the same geometry\n * however they may have different transformations.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Glyphset}\n */\nconst Glyphset = function () {\n (require('./zincObject').ZincObject).call(this);\n const glyphList = [];\n let axis1s = undefined;\n let axis2s = undefined;\n let axis3s = undefined;\n let positions = undefined;\n let scales = undefined;\n let colors = undefined;\n let labels = undefined;\n let numberOfTimeSteps = 0;\n let numberOfVertices = 0;\n let baseSize = [0, 0, 0];\n let offset = [0, 0, 0];\n let scaleFactors = [0, 0, 0];\n let repeat_mode = \"NONE\";\n this.ready = false;\n let morphColours = false;\n let morphVertices = false;\n this.isGlyphset = true;\n let _transformMatrix = new THREE.Matrix4();\n const _bot_colour = new THREE.Color();\n const _top_colour = new THREE.Color();\n const _boundingBox1 = new THREE.Box3();\n const _boundingBox2 = new THREE.Box3();\n const _boundingBox3 = new THREE.Box3();\n const _points = [];\n for (let i = 0; i < 8; i++) {\n _points[i] = new THREE.Vector3();\n }\n\n\t/**\n\t * Get the {@link Three.Group} containing all of the glyphs' meshes.\n\t * @returns {Three.Group}\n\t */\n this.getGroup = () => {\n return this.morph;\n }\n\n\t/**\n\t * Copy glyphset data into this glyphset then load the glyph's geoemtry \n\t * with the provided glyphURL. FinishCallback will be called once\n\t * glyph is loaded.\n\t * \n\t * @param {Array} glyphsetData - contains the informations about the glyphs.\n\t * @param {String} glyphURL - URL to the geometry which will be applied to all\n\t * all the glyphs in the glyphset once loaded.\n\t * @param {Function} finishCallback - User's function to be called once glyph's\n\t * geometry is loaded.\n\t */\n this.load = (glyphsetData, glyphURL, finishCallback, isInline, displayLabels) => {\n axis1s = glyphsetData.axis1;\n axis2s = glyphsetData.axis2;\n axis3s = glyphsetData.axis3;\n positions = glyphsetData.positions;\n scales = glyphsetData.scale;\n colors = glyphsetData.colors;\n labels = glyphsetData.label;\n morphColours = glyphsetData.metadata.MorphColours;\n morphVertices = glyphsetData.metadata.MorphVertices;\n numberOfTimeSteps = glyphsetData.metadata.number_of_time_steps;\n repeat_mode = glyphsetData.metadata.repeat_mode;\n numberOfVertices = glyphsetData.metadata.number_of_vertices;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfVertices = numberOfVertices * 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfVertices = numberOfVertices * 3;\n baseSize = glyphsetData.metadata.base_size;\n offset = glyphsetData.metadata.offset;\n scaleFactors = glyphsetData.metadata.scale_factors;\n const loader = new JSONLoader();\n this.geometry = new THREE.BufferGeometry();\n this.morph = new THREE.InstancedMesh(this.geometry, undefined, numberOfVertices);\n if (isInline) {\n var object = loader.parse(glyphURL);\n (meshloader(finishCallback, displayLabels))(object.geometry, object.materials);\n object.geometry.dispose();\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(glyphURL, meshloader(finishCallback, displayLabels));\n }\n }\n\n\t/**\n\t * Calculate the actual transformation value that can be applied \n\t * to the transformation matrix.\n\t * @returns {Array}\n\t */\n const resolve_glyph_axes = (point, axis1, axis2, axis3, scale) => {\n const return_arrays = [];\n if (repeat_mode == \"NONE\" || repeat_mode == \"MIRROR\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n const mirrored_axis1 = [0.0, 0.0, 0.0];\n const mirrored_axis2 = [0.0, 0.0, 0.0];\n const mirrored_axis3 = [0.0, 0.0, 0.0];\n const mirrored_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[j] + scale[j] * scaleFactors[j];\n }\n for (var j = 0; j < 3; j++) {\n final_axis1[j] = axis1[j] * axis_scale[0];\n final_axis2[j] = axis2[j] * axis_scale[1];\n final_axis3[j] = axis3[j] * axis_scale[2];\n final_point[j] = point[j]\n + offset[0] * final_axis1[j]\n + offset[1] * final_axis2[j]\n + offset[2] * final_axis3[j];\n if (repeat_mode == \"MIRROR\") {\n mirrored_axis1[j] = -final_axis1[j];\n mirrored_axis2[j] = -final_axis2[j];\n mirrored_axis3[j] = -final_axis3[j];\n mirrored_point[j] = final_point[j];\n if (scale[0] < 0.0) {\n // shift glyph origin to end of axis1 \n final_point[j] -= final_axis1[j];\n mirrored_point[j] -= mirrored_axis1[j];\n }\n }\n }\n /* if required, reverse axis3 to maintain right-handed coordinate system */\n if (0.0 > (\n final_axis3[0] * (final_axis1[1] * final_axis2[2] -\n final_axis1[2] * final_axis2[1]) +\n final_axis3[1] * (final_axis1[2] * final_axis2[0] -\n final_axis1[0] * final_axis2[2]) +\n final_axis3[2] * (final_axis1[0] * final_axis2[1] -\n final_axis1[1] * final_axis2[0]))) {\n final_axis3[0] = -final_axis3[0];\n final_axis3[1] = -final_axis3[1];\n final_axis3[2] = -final_axis3[2];\n }\n return_arrays.push([final_point, final_axis1, final_axis2, final_axis3]);\n if (repeat_mode == \"MIRROR\") {\n if (0.0 > (\n mirrored_axis3[0] * (mirrored_axis1[1] * mirrored_axis2[2] -\n mirrored_axis1[2] * mirrored_axis2[1]) +\n mirrored_axis3[1] * (mirrored_axis1[2] * mirrored_axis2[0] -\n mirrored_axis1[0] * mirrored_axis2[2]) +\n mirrored_axis3[2] * (mirrored_axis1[0] * mirrored_axis2[1] -\n mirrored_axis1[1] * mirrored_axis2[0]))) {\n mirrored_axis3[0] = -mirrored_axis3[0];\n mirrored_axis3[1] = -mirrored_axis3[1];\n mirrored_axis3[2] = -mirrored_axis3[2];\n }\n return_arrays.push([mirrored_point, mirrored_axis1, mirrored_axis2, mirrored_axis3]);\n }\n }\n else if (repeat_mode == \"AXES_2D\" || repeat_mode == \"AXES_3D\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[0] + scale[j] * scaleFactors[0];\n }\n for (var j = 0; j < 3; j++) {\n final_point[j] = point[j]\n + offset[0] * axis_scale[0] * axis1[j]\n + offset[1] * axis_scale[1] * axis2[j]\n + offset[2] * axis_scale[2] * axis3[j];\n }\n const number_of_glyphs = (glyph_repeat_mode == \"AXES_2D\") ? 2 : 3;\n for (let k = 0; k < number_of_glyphs; k++) {\n let use_axis1, use_axis2;\n const use_scale = scale[k];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n if (k == 0) {\n use_axis1 = axis1;\n use_axis2 = axis2;\n }\n else if (k == 1) {\n use_axis1 = axis2;\n use_axis2 = (glyph_repeat_mode == \"AXES_2D\") ? axis1 : axis3;\n }\n else // if (k == 2)\n {\n use_axis1 = axis3;\n use_axis2 = axis1;\n }\n const final_scale1 = baseSize[0] + use_scale * scaleFactors[0];\n final_axis1[0] = use_axis1[0] * final_scale1;\n final_axis1[1] = use_axis1[1] * final_scale1;\n final_axis1[2] = use_axis1[2] * final_scale1;\n final_axis3[0] = final_axis1[1] * use_axis2[2] - use_axis2[1] * final_axis1[2];\n final_axis3[1] = final_axis1[2] * use_axis2[0] - use_axis2[2] * final_axis1[0];\n final_axis3[2] = final_axis1[0] * use_axis2[1] - final_axis1[1] * use_axis2[0];\n let magnitude = Math.sqrt(final_axis3[0] * final_axis3[0] + final_axis3[1] * final_axis3[1] + final_axis3[2] * final_axis3[2]);\n if (0.0 < magnitude) {\n let scaling = (baseSize[2] + use_scale * scaleFactors[2]) / magnitude;\n if ((repeat_mode == \"AXES_2D\") && (k > 0)) {\n scaling *= -1.0;\n }\n final_axis3[0] *= scaling;\n final_axis3[1] *= scaling;\n final_axis3[2] *= scaling;\n }\n\n final_axis2[0] = final_axis3[1] * final_axis1[2] - final_axis1[1] * final_axis3[2];\n final_axis2[1] = final_axis3[2] * final_axis1[0] - final_axis1[2] * final_axis3[0];\n final_axis2[2] = final_axis3[0] * final_axis1[1] - final_axis3[1] * final_axis1[0];\n magnitude = Math.sqrt(final_axis2[0] * final_axis2[0] + final_axis2[1] * final_axis2[1] + final_axis2[2] * final_axis2[2]);\n if (0.0 < magnitude) {\n var scaling = (baseSize[1] + use_scale * scaleFactors[1]) / magnitude;\n final_axis2[0] *= scaling;\n final_axis2[1] *= scaling;\n final_axis2[2] *= scaling;\n }\n return_arrays.push([final_point, final_axis1, final_axis2, final_axis3])\n }\n }\n return return_arrays;\n };\n\n\t/**\n\t * Update transformation for each of the glyph in this glyphset.\n\t */\n const updateGlyphsetTransformation = (\n current_positions,\n current_axis1s,\n current_axis2s,\n current_axis3s,\n current_scales\n ) => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfPositions = current_positions.length / 3;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n const current_position = [current_positions[current_index], current_positions[current_index + 1],\n current_positions[current_index + 2]];\n const current_axis1 = [current_axis1s[current_index], current_axis1s[current_index + 1],\n current_axis1s[current_index + 2]];\n const current_axis2 = [current_axis2s[current_index], current_axis2s[current_index + 1],\n current_axis2s[current_index + 2]];\n const current_axis3 = [current_axis3s[current_index], current_axis3s[current_index + 1],\n current_axis3s[current_index + 2]];\n const current_scale = [current_scales[current_index], current_scales[current_index + 1],\n current_scales[current_index + 2]];\n const arrays = resolve_glyph_axes(current_position, current_axis1, current_axis2,\n current_axis3, current_scale);\n if (arrays.length == numberOfGlyphs) {\n for (let j = 0; j < numberOfGlyphs; j++) {\n _transformMatrix.elements[0] = arrays[j][1][0];\n _transformMatrix.elements[1] = arrays[j][1][1];\n _transformMatrix.elements[2] = arrays[j][1][2];\n _transformMatrix.elements[3] = 0.0;\n _transformMatrix.elements[4] = arrays[j][2][0];\n _transformMatrix.elements[5] = arrays[j][2][1];\n _transformMatrix.elements[6] = arrays[j][2][2];\n _transformMatrix.elements[7] = 0.0;\n _transformMatrix.elements[8] = arrays[j][3][0];\n _transformMatrix.elements[9] = arrays[j][3][1];\n _transformMatrix.elements[10] = arrays[j][3][2];\n _transformMatrix.elements[11] = 0.0;\n _transformMatrix.elements[12] = arrays[j][0][0];\n _transformMatrix.elements[13] = arrays[j][0][1];\n _transformMatrix.elements[14] = arrays[j][0][2];\n _transformMatrix.elements[15] = 1.0;\n this.morph.setMatrixAt(current_glyph_index, _transformMatrix);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setTransformation(arrays[j][0], arrays[j][1],\n arrays[j][2], arrays[j][3]);\n current_glyph_index++;\n }\n }\n }\n this.morph.instanceMatrix.needsUpdate = true;\n };\n\n\t/**\n\t * Update colour for each of the glyph in this glyphset.\n\t */\n const updateGlyphsetHexColors = current_colors => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfColours = current_colors.length;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfColours; i++) {\n const hex_values = current_colors[i];\n for (let j = 0; j < numberOfGlyphs; j++) {\n _bot_colour.setHex(hex_values)\n this.morph.setColorAt(current_glyph_index, _bot_colour);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setColour(_bot_colour);\n current_glyph_index++;\n }\n }\n this.morph.instanceColor.needsUpdate = true;\n };\n\n\t/**\n\t * Update the current states of the glyphs in this glyphset, this includes transformation and\n\t * colour for each of them. This is called when glyphset and glyphs are initialised and whenever\n\t * the internal time has been updated.\n\t */\n const updateMorphGlyphsets = () => {\n let current_positions = [];\n let current_axis1s = [];\n let current_axis2s = [];\n let current_axis3s = [];\n let current_scales = [];\n let current_colors = [];\n const current_time = this.inbuildTime / this.duration * (numberOfTimeSteps - 1);\n const bottom_frame = Math.floor(current_time);\n const proportion = 1 - (current_time - bottom_frame);\n const top_frame = Math.ceil(current_time);\n if (morphVertices) {\n const bottom_positions = positions[bottom_frame.toString()];\n const top_positions = positions[top_frame.toString()];\n const bottom_axis1 = axis1s[bottom_frame.toString()];\n const top_axis1 = axis1s[top_frame.toString()];\n const bottom_axis2 = axis2s[bottom_frame.toString()];\n const top_axis2 = axis2s[top_frame.toString()];\n const bottom_axis3 = axis3s[bottom_frame.toString()];\n const top_axis3 = axis3s[top_frame.toString()];\n const bottom_scale = scales[bottom_frame.toString()];\n const top_scale = scales[top_frame.toString()];\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions.push(proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i]);\n current_axis1s.push(proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i]);\n current_axis2s.push(proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i]);\n current_axis3s.push(proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i]);\n current_scales.push(proportion * bottom_scale[i] + (1.0 - proportion) * top_scale[i]);\n }\n } else {\n current_positions = positions[\"0\"];\n current_axis1s = axis1s[\"0\"];\n current_axis2s = axis2s[\"0\"];\n current_axis3s = axis3s[\"0\"];\n current_scales = scales[\"0\"];\n }\n updateGlyphsetTransformation(current_positions, current_axis1s, current_axis2s, current_axis3s,\n current_scales);\n this.boundingBoxUpdateRequired = true;\n if (colors != undefined) {\n if (morphColours) {\n const bottom_colors = colors[bottom_frame.toString()];\n const top_colors = colors[top_frame.toString()];\n for (let i = 0; i < bottom_colors.length; i++) {\n _bot_colour.setHex(bottom_colors[i]);\n _top_colour.setHex(top_colors[i]);\n _bot_colour.setRGB(_bot_colour.r * proportion + _top_colour.r * (1 - proportion),\n _bot_colour.g * proportion + _top_colour.g * (1 - proportion),\n _bot_colour.b * proportion + _top_colour.b * (1 - proportion));\n current_colors.push(_bot_colour.getHex());\n }\n\t\t\t\t/*\n\t\t\t\tfor (var i = 0; i < bottom_colors.length; i++) {\n\t\t\t\t\tcurrent_colors.push(proportion * bottom_colors[i] + (1.0 - proportion) * top_colors[i]);\n\t\t\t\t}\n\t\t\t\t*/\n } else {\n current_colors = colors[\"0\"];\n }\n updateGlyphsetHexColors(current_colors);\n }\n current_positions = null;\n current_axis1s = null;\n current_axis2s = null;\n current_axis3s = null;\n current_scales = null;\n current_colors = null;\n };\n\n this.showLabel = () => {\n for (let i = 0; i < glyphList.length; i++) {\n glyphList[i].showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n }\n\n const createGlyphs = (displayLabels) => {\n if ((labels != undefined) && displayLabels) {\n for (let i = 0; i < numberOfVertices; i++) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, i, this);\n if (labels != undefined && labels[i] != undefined) {\n glyph.setLabel(labels[i]);\n }\n if (numberOfTimeSteps > 0) {\n glyph.setFrustumCulled(false);\n }\n glyphList[i] = glyph;\n this.morph.add(glyph.getGroup());\n }\n }\n if ((labels != undefined) && displayLabels) {\n this.showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n //Update the transformation of the glyphs.\n updateGlyphsetTransformation(positions[\"0\"], axis1s[\"0\"],\n axis2s[\"0\"], axis3s[\"0\"], scales[\"0\"]);\n //Update the color of the glyphs.\n if (colors != undefined) {\n updateGlyphsetHexColors(colors[\"0\"]);\n }\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n };\n\n this.addCustomGlyph = glyph => {\n if (glyph.isGlyph)\n glyphList.push(glyph);\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n this.addMeshAsGlyph = (mesh, id) => {\n if (mesh.isMesh) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, id, this);\n glyph.fromMesh(mesh);\n glyphList.push(glyph);\n this.morph.add(glyph.getGroup())\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n return glyph;\n }\n return undefined;\n }\n\n\t/**\n\t * A function which iterates through the list of glyphs and call the callback\n\t * function with the glyph as the argument.\n\t * @param {Function} callbackFunction - Callback function with the glyph\n\t * as an argument.\n\t */\n this.forEachGlyph = callbackFunction => {\n for (let i = 0; i < glyphList.length; i++) {\n callbackFunction(glyphList[i]);\n }\n }\n\n var meshloader = (finishCallback, displayLabels) => {\n return (geometry, materials) => {\n const tempGeometry = geometry.toBufferGeometry();\n this.geometry.copy(tempGeometry);\n this.geometry.computeBoundingSphere();\n this.geometry.computeBoundingBox();\n tempGeometry.dispose();\n if (materials && materials[0])\n this.morph.material = materials[0];\n createGlyphs(displayLabels);\n this.morph.name = this.groupName;\n this.morph.userData = this;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(this);\n };\n }\n\n /**\n * Get the index of the closest vertex to centroid.\n */\n this.getClosestVertexIndex = function () {\n let closestIndex = -1;\n if (this.morph && this.ready) {\n let center = new THREE.Vector3();\n this.getBoundingBox().getCenter(center);\n let current_positions = positions[\"0\"];\n const numberOfPositions = current_positions.length / 3;\n let position = new THREE.Vector3();\n let distance = -1;\n let currentDistance = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n position.set(current_positions[current_index],\n current_positions[current_index + 1],\n current_positions[current_index + 2]);\n currentDistance = center.distanceTo(position);\n if (distance == -1) {\n distance = currentDistance;\n closestIndex = i;\n } else if (distance > currentDistance) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n return closestIndex;\n }\n\n /**\n * Get the closest vertex to centroid.\n */\n this.getClosestVertex = function () {\n\n if (this.markerVertexIndex == -1) {\n this.markerVertexIndex = this.getClosestVertexIndex();\n }\n if (this.markerVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.markerVertexIndex]) {\n glyphList[this.markerVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.markerVertexIndex, _transformMatrix);\n position.setFromMatrixPosition(_transformMatrix);\n return position;\n }\n }\n\n return undefined;\n }\n\n this.applyMatrix4ToBox = (box1, box2, matrix) => {\n _points[0].set(box1.min.x, box1.min.y, box1.min.z).applyMatrix4(matrix); // 000\n _points[1].set(box1.min.x, box1.min.y, box1.max.z).applyMatrix4(matrix); // 001\n _points[2].set(box1.min.x, box1.max.y, box1.min.z).applyMatrix4(matrix); // 010\n _points[3].set(box1.min.x, box1.max.y, box1.max.z).applyMatrix4(matrix); // 011\n _points[4].set(box1.max.x, box1.min.y, box1.min.z).applyMatrix4(matrix); // 100\n _points[5].set(box1.max.x, box1.min.y, box1.max.z).applyMatrix4(matrix); // 101\n _points[6].set(box1.max.x, box1.max.y, box1.min.z).applyMatrix4(matrix); // 110\n _points[7].set(box1.max.x, box1.max.y, box1.max.z).applyMatrix4(matrix); // 111\n box2.setFromPoints(_points);\n }\n\n\n\t/**\n\t * Get the bounding box for the whole set of glyphs.\n\t * \n\t * @return {Three.Box3};\n\t */\n this.getBoundingBox = () => {\n if (this.morph && this.ready && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n _boundingBox1.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n for (let i = 0; i < numberOfVertices; i++) {\n this.morph.getMatrixAt(i, _transformMatrix);\n this.applyMatrix4ToBox(_boundingBox1, _boundingBox2, _transformMatrix);\n if (i == 0) {\n _boundingBox3.copy(_boundingBox2);\n } else {\n _boundingBox3.union(_boundingBox2);\n }\n }\n if (_boundingBox3) {\n this.cachedBoundingBox.copy(_boundingBox3);\n this.boundingBoxUpdateRequired = false;\n } else\n return undefined;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n\n\t/**\n\t * Set the local time of this glyphset.\n\t * \n\t * @param {Number} time - Can be any value between 0 to duration.\n\t */\n this.setMorphTime = time => {\n if (time > this.duration)\n this.inbuildTime = this.duration;\n else if (0 > time)\n this.inbuildTime = 0;\n else\n this.inbuildTime = time;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n if (morphVertices)\n this.markerUpdateRequired = true;\n }\n }\n\n /**\n * Check if the glyphset is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if ((numberOfTimeSteps > 0) && (morphColours || morphVertices))\n return true;\n return false;\n }\n\n this.getCurrentTime = () => {\n return this.inbuildTime;\n }\n\n\n\t/**\n\t * Clear this glyphset and its list of glyphs which will release them from the memory.\n\t */\n this.dispose = () => {\n for (let i = glyphList.length - 1; i >= 0; i--) {\n glyphList[i].dispose();\n }\n if (this.geometry)\n this.geometry.dispose();\n if (this.morph)\n this.morph.material.dispose();\n axis1s = undefined;\n axis2s = undefined;\n axis3s = undefined;\n positions = undefined;\n scales = undefined;\n colors = undefined;\n this.ready = false;\n this.groupName = undefined;\n }\n\n //Update the geometry and colours depending on the morph.\n this.render = (delta, playAnimation, options) => {\n if (playAnimation == true) {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration\n this.inbuildTime = targetTime;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n }\n }\n this.updateMarker(playAnimation, options);\n }\n}\n\nGlyphset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyphset = Glyphset;\n","var THREE = require('three');\n\nvar Loader = require('./three/Loader').Loader;\nvar LoaderUtils = THREE.LoaderUtils;\nvar AnimationClip = THREE.AnimationClip;\nvar Vector3 = THREE.Vector3;\nvar Vector4 = THREE.Vector4;\nvar Color = THREE.Color;\nvar Vector2 = THREE.Vector2;\nvar Face3 = require('./three/Geometry').Face3;\nvar Geometry = require('./three/Geometry').Geometry;\nvar FileLoader = THREE.FileLoader;\nvar DefaultLoadingManager = THREE.DefaultLoadingManager;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n if (json.uvs) {\n\n for ( i = 0; i < json.uvs.length; i ++ ) {\n\n geometry.uvs[i] = [];\n\n for ( let k = 0; k < json.uvs[i].length ; k++ ) {\n\n geometry.uvs[i][k] = json.uvs[i][k];\n\n }\n \n }\n \n }\n\n if (normals) {\n\n for ( i = 0; i < normals.length; i ++ ) {\n\n geometry.normals[i] = normals[i];\n\n }\n \n }\n\n if (colors) {\n\n for ( i = 0; i < colors.length; i ++ ) {\n\n geometry.colors[i] = colors[i];\n\n }\n \n }\n\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphNormals !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphNormals.length; i < l; i ++ ) {\n\n if (geometry.morphTargets[ i ]) {\n\n geometry.morphTargets[ i ].normals = [];\n\n var dstNormals = geometry.morphTargets[ i ].normals;\n var srcNormals = json.morphNormals[ i ].normals;\n\n for ( var v = 0, vl = srcNormals.length; v < vl; v += 3 ) {\n\n var normals = new Vector3();\n normals.x = srcNormals[ v ];\n normals.y = srcNormals[ v + 1 ] ;\n normals.z = srcNormals[ v + 2 ] ;\n\n dstNormals.push( normals );\n\n }\n\n geometry.morphNormalsReady = true;\n\n }\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined ) {\n\n\t\t\t\tvar i, l, c, cl, dstColors, srcColors, color;\n\n\t\t\t\tfor ( i = 0, l = json.morphColors.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphColors[ i ] = {};\n\t\t\t\t\tgeometry.morphColors[ i ].name = json.morphColors[ i ].name;\n\t\t\t\t\tgeometry.morphColors[ i ].colors = [];\n\n\t\t\t\t\tdstColors = geometry.morphColors[ i ].colors;\n\t\t\t\t\tsrcColors = json.morphColors[ i ].colors;\n\n\t\t\t\t\tfor ( c = 0, cl = srcColors.length; c < cl; c += 3 ) {\n\n\t\t\t\t\t\tcolor = new THREE.Color( 0xffaa00 );\n\t\t\t\t\t\tcolor.setRGB( srcColors[ c ], srcColors[ c + 1 ], srcColors[ c + 2 ] );\n\t\t\t\t\t\tdstColors.push( color );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\t\t\tgeometry.morphColors = [];\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, 'Anonymous' );\n\n\t\t\t\t\n\t\t\t\tif (json.materials[0].video) {\n\t\t\t\t\t\n\t\t\t\t\tvar fullPath = texturePath + json.materials[0].video;\n\t\t\t\t\t\n\t\t\t\t\tconst videoHandler = new (require('./videoHandler').VideoHandler)(fullPath);\n\t\t\t\t\t\n\t\t\t\t\tgeometry._video = videoHandler;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (materials && materials.length > 0) {\n\t\t\t\t\tif (json.materials[0].singleSided) {\n\t\t\t\t\t\tmaterials[0].side = THREE.FrontSide;\n\t\t\t\t\t} else if (json.materials[0].flipSided){\n\t\t\t\t\t\tmaterials[0].side = THREE.BackSide;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaterials[0].side = THREE.DoubleSide;\n }\n if (json.materials[0].specularCoef) {\n materials[0].shininess = Math.floor(json.materials[0].specularCoef / 3);\n }\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n\nexport { JSONLoader };\n","var THREE = require('three');\n\nimport {\n\tNoBlending,\n\tNormalBlending,\n\tAdditiveBlending,\n\tSubtractiveBlending,\n\tMultiplyBlending,\n\tCustomBlending,\n\n\tFaceColors,\n\tVertexColors,\n\n\tDoubleSide,\n\tBackSide,\n\n\tMirroredRepeatWrapping,\n RepeatWrapping,\n MathUtils,\n MaterialLoader,\n TextureLoader,\n Color\n} from 'three';\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = MathUtils.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: MathUtils.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\nexport { Loader };\n","var THREE = require('three');\n\n\n// Alan notes: pause video when stuck\n//VideoTexture is used for creating and updating a video projected onto a Three.js texture\nexports.VideoHandler = function(srcIn) {\n\n\tvar _this = this;\n\tthis.video = undefined;\n\tthis.videoTexture = undefined;\n\tvar src = srcIn;\n\tvar lastTime = 0;\n\tvar lastUpdate = 0;\n\tvar frameRate = 30;\n\tvar videoPlaneLoadedFlag = false;\n\tvar lastPlayPos = 0;\n\tvar currentPlayPos = 0;\n\tvar bufferingDetected = false;\n\t\n\tvar checkBuffering = function(delta, playAnimation) {\n\t currentPlayPos = _this.video.currentTime;\n\n\t // checking offset should be at most the check interval\n\t // but allow for some margin\n\t var offset = delta - 0.02;\n\n\t // if no buffering is currently detected,\n\t // and the position does not seem to increase\n\t // and the _this.video isn't manually paused...\n\t if (!bufferingDetected && (currentPlayPos < (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = true;\n\t }\n\n\t // if we were buffering but the _this.video has advanced,\n\t // then there is no buffering\n\t if (bufferingDetected && (currentPlayPos > (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = false;\n\t }\n\t lastPlayPos = currentPlayPos;\n\t}\n\n\tvar initialise = function(){\n\t\tif (document) {\n\t\t \t_this.video = document.createElement( 'video' );\n\t\t \t_this.video.crossOrigin = \"anonymous\";\n\t\t \t_this.video.src = src;\n\t\t \t_this.video.load();\n _this.video.loop = true;\n \n\t\t}\n\t}\n\n\tthis.setMorphTime = function(time, duration){\n\t\tvar actualTime = time / duration * _this.video.duration;\n\t\t_this.video.currentTime = actualTime;\n\t}\n\n\t// videoPlaneLoaded connects the video to the video texture once it has loaded\n\t this.getVideoDuration = function() {\n\t\t return _this.video.duration;\n\t}\n\n\tthis.createCanvasVideoTexture = function(){\n\t\t_this.videoTexture = new THREE.VideoTexture( _this.video );\n\t\t_this.videoTexture.minFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.magFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.format = THREE.RGBFormat;\n _this.video.currentTime = 0;\n\t\treturn _this.videoTexture;\n\t}\n\t\n\tthis.getCurrentTime = function(duration) {\n\t\tif (_this.video)\n\t\t\treturn duration * (_this.video.currentTime / _this.video.duration);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tthis.isReadyToPlay = function(){\n\t\t// video.readyState 3 means we have data to load for the current time and foreseeable future\n\t\tif (_this.video && _this.video.readyState >= 3){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}","const THREE = require('three');\nconst Points = require('../three/Points').Points;\n\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Geometry}\n */\nconst Pointset = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isPointset = true;\n\n /** Shape of the points is created using the function below */\n\tconst getCircularTexture = () => {\n\t\tvar image = new Image();\n\t\timage.src = require(\"../assets/disc.png\");\n\t\tconst texture = new THREE.Texture();\n\t\ttexture.image = image;\n\t\ttexture.needsUpdate = true;\n\t\treturn texture;\n\t}\n\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tconst texture = getCircularTexture();\n\t\t\tmaterialIn.map = texture;\n\t\t\tlet point = new Points(geometry, materialIn);\n\t\t\tthis.setMesh(point, options.localTimeEnabled, options.localMorphColour);\n\t\t}\t\n\t}\n\n\tthis.setSize = size => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.size = size;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\t\n\tthis.setSizeAttenuation = flag => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.sizeAttenuation = flag;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n}\n\nPointset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Pointset = Pointset;\n","import {\n\tBufferGeometry,\n\tMatrix4,\n Object3D,\n PointsMaterial,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n const drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n \n calculatePosition( this, positionAttribute, morphPosition, a );\n\n\t\t\t\t\ttestPoint( _position, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n \n calculatePosition( this, positionAttribute, morphPosition, i );\n\n\t\t\t\t\ttestPoint( _position, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction calculatePosition( object, position, morphPosition, a )\t{\n\n _position.fromBufferAttribute( position, a );\n\n const morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n const influence = morphInfluences[ i ];\n const morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n\n _morphA.addScaledVector( _tempA.sub( _position ), influence );\n\n }\n\n _position.add( _morphA );\n\n }\n\n}\n\nexport { Points };","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==\"","const THREE = require('three');\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst Lines = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isLines = true;\n\n\tthis.createLineSegment = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ])\n\t\t\t\tmaterialIn.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n let line = new (require(\"../three/line/LineSegments\").LineSegments)(geometry, materialIn);\n\t\t\tthis.setMesh(line, options.localTimeEnabled, options.localMorphColour);\n\t\t}\t\t\n\t}\n\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n}\n\nLines.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Lines = Lines;\n","import { Line } from './Line.js';\nimport {\n Float32BufferAttribute,\n\tVector3\n} from 'three';\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nexport { LineSegments };","import {\n BufferGeometry,\n Float32BufferAttribute,\n LineBasicMaterial,\n\tMatrix4,\n Object3D,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n const drawRange = geometry.drawRange;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n const b = index.getX( i + 1 );\n \n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, a, b );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, i, i+1 );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction calculatePosition( vStart, vEnd, object, position, morphPosition, a, b )\t{\n\n vStart.fromBufferAttribute( position, a );\n vEnd.fromBufferAttribute( position, b );\n\n var morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n _morphB.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n var influence = morphInfluences[ i ];\n var morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n _tempB.fromBufferAttribute( morphAttribute, b );\n\n _morphA.addScaledVector( _tempA.sub( vStart ), influence );\n _morphB.addScaledVector( _tempB.sub( vEnd ), influence );\n\n }\n\n vStart.add( _morphA );\n vEnd.add( _morphB );\n\n }\n\n}\n\nLine.prototype.isLine = true;\n\n\nexport { Line };","const THREE = require('three');\r\nconst ResizeSensor = require('css-element-queries/src/ResizeSensor');\r\n/**\r\n * Create a Zinc 3D renderer in the container provided.\r\n * The primary function of a Zinc 3D renderer is to display the current\r\n * scene (@link Zinc.Scene} set to the renderer and each scene may contain as \r\n * many geometries, glyphset and other primitives as the system can support.\r\n * Zinc.Renderer also allows additional scenes to be displayed.\r\n * \r\n * @param {Object} containerIn - Container to create the renderer on.\r\n * @class\r\n * @author Alan Wu\r\n * @return {Zinc.Renderer}\r\n */\r\nexports.Renderer = function (containerIn) {\r\n\r\n\tlet container = containerIn;\r\n\t\r\n\tconst stats = 0;\r\n\t\r\n\tlet renderer = undefined;\r\n\tlet currentScene = undefined;\r\n\r\n\t//myGezincGeometriestains a tuple of the threejs mesh, timeEnabled, morphColour flag, unique id and morph\r\n\tconst clock = new THREE.Clock(false);\r\n\tthis.playAnimation = true;\r\n /* default animation update rate, rate is 1000 and duration \r\n is default to 6000, 6s to finish a full animation */\r\n\tlet playRate = 1000;\r\n\tlet preRenderCallbackFunctions = [];\r\n let preRenderCallbackFunctions_id = 0;\r\n let postRenderCallbackFunctions = [];\r\n\tlet postRenderCallbackFunctions_id = 0;\r\n\tlet animated_id = undefined;\r\n\tlet cameraOrtho = undefined, sceneOrtho = undefined, logoSprite = undefined;\r\n\tlet sceneMap = [];\r\n\tlet additionalActiveScenes = [];\r\n\tlet scenesGroup = new THREE.Group();\r\n\tlet canvas = undefined;\r\n let sensor = undefined;\r\n let isRendering = false;\r\n\tconst _this = this;\r\n\tconst currentSize = [0, 0];\r\n\tconst currentOffset = [0, 0];\r\n\t\r\n\tthis.getDrawingWidth = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientWidth;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientWidth !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientWidth);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.width);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tthis.getDrawingHeight = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientHeight;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientHeight !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientHeight);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.height);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t/** \r\n\t * Call this to resize the renderer, this is normally call automatically.\r\n\t */\r\n\tthis.onWindowResize = () => {\r\n\t\tcurrentScene.onWindowResize();\r\n\t\tconst width = this.getDrawingWidth();\r\n\t\tconst height = this.getDrawingHeight();\r\n\t\tif (renderer != undefined) {\r\n\t\t\tlet rect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\trect = container.getBoundingClientRect();\r\n\t\t\t\trenderer.setSize(width, height);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (typeof canvas.getBoundingClientRect !== 'undefined') {\r\n\t\t\t\t\trect = canvas.getBoundingClientRect();\r\n\t\t\t\t\tcanvas.width = width;\r\n\t\t\t\t\tcanvas.height = height;\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (rect) {\r\n\t\t\t\tcurrentOffset[0] = rect.left;\r\n\t\t\t\tcurrentOffset[1] = rect.top;\r\n\t\t\t}\r\n\t\t\tconst target = new THREE.Vector2();\r\n\t\t\trenderer.getSize(target);\r\n\t\t\tcurrentSize[0] = target.x;\r\n\t\t\tcurrentSize[1] = target.y;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialise the renderer and its visualisations.\r\n\t */\r\n\tthis.initialiseVisualisation = parameters => {\r\n\t parameters = parameters || {};\r\n\t if (parameters['antialias'] === undefined) {\r\n let onMobile = false;\r\n try {\r\n if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\r\n onMobile = true;\r\n }\r\n }\r\n catch(err) {\r\n onMobile = false;\r\n }\r\n if (onMobile)\r\n parameters['antialias'] = false;\r\n else\r\n parameters['antialias'] = true;\r\n\t }\r\n\t if (parameters[\"canvas\"]) {\r\n\t\t container = undefined;\r\n\t\t canvas = parameters[\"canvas\"];\r\n\t }\r\n renderer = new THREE.WebGLRenderer(parameters);\r\n if (container !== undefined) {\r\n\t\t container.appendChild( renderer.domElement );\r\n }\r\n\t renderer.setClearColor( 0xffffff, 1);\r\n\t if (canvas && canvas.style) {\r\n\t\t canvas.style.height = \"100%\";\r\n\t\t canvas.style.width = \"100%\";\r\n }\r\n renderer.autoClear = false;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the current scene on display.\r\n\t * @return {Zinc.Scene};\r\n\t */\r\n\tthis.getCurrentScene = () => {\r\n\t\treturn currentScene;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current scene on display.\r\n\t * \r\n\t * @param {Zinc.Scene} sceneIn - The scene to be set, only scene created by this instance\r\n\t * of ZincRenderer is supported currently.\r\n\t */\r\n\tthis.setCurrentScene = sceneIn => {\r\n\t\tif (sceneIn) {\r\n\t\t\tthis.removeActiveScene(sceneIn);\r\n\t\t\tconst oldScene = currentScene;\r\n\t\t\tcurrentScene = sceneIn;\r\n\t\t\tif (oldScene) {\r\n\t\t\t\toldScene.setInteractiveControlEnable(false);\r\n\t\t\t}\r\n\t\t\tcurrentScene.setInteractiveControlEnable(true);\r\n\t\t\tcurrentScene.setAdditionalScenesGroup(scenesGroup);\r\n\t\t\tthis.onWindowResize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Return scene with the matching name if scene with that name has been created.\r\n\t * \r\n\t * @param {String} name - Name to match\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.getSceneByName = name => {\r\n\t\treturn sceneMap[name];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Create a new scene with the provided name if scene with the same name exists,\r\n\t * return undefined.\r\n\t * \r\n\t * @param {String} name - Name of the scene to be created.\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.createScene = name => {\r\n\t\tif (sceneMap[name] != undefined){\r\n\t\t\treturn undefined;\r\n\t\t} else {\r\n\t\t\tlet new_scene = undefined;\r\n\t\t\tif (canvas)\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(canvas, renderer);\r\n\t\t\telse\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(container, renderer);\r\n\t\t\tsceneMap[name] = new_scene;\r\n\t\t\tnew_scene.sceneName = name;\r\n\t\t\treturn new_scene;\r\n\t\t}\r\n\t}\r\n\t\r\n\tconst updateOrthoScene = () => {\r\n\t\tif (logoSprite != undefined) {\r\n\t\t\tconst material = logoSprite.material;\r\n\t\t\tif (material.map) {\r\n\t\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\t\tconst calculatedWidth = (width - material.map.image.width)/2;\r\n\t\t\t\tconst calculatedHeight = (-height + material.map.image.height)/2;\r\n\t\t\t\tlogoSprite.position.set(calculatedWidth, calculatedHeight, 1 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tconst updateOrthoCamera = () => {\r\n\t\tif (cameraOrtho != undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho.left = -width / 2;\r\n\t\t\tcameraOrtho.right = width / 2;\r\n\t\t\tcameraOrtho.top = height / 2;\r\n\t\t\tcameraOrtho.bottom = -height / 2;\r\n\t\t\tcameraOrtho.updateProjectionMatrix();\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Reset the viewport of the current scene to its original state.\r\n\t */\r\n\tthis.resetView = () => {\r\n\t\tcurrentScene.resetView();\r\n\t}\r\n\t\r\n\t/**\r\n\t * Adjust zoom distance to include all primitives in scene and also the additional scenes\r\n\t * but the lookat direction and up vectors will remain constant.\r\n\t */\r\n\tthis.viewAll = () => {\r\n\t\tif (currentScene) {\t\r\n\t\t\tconst boundingBox = currentScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\t const boundingBox2 = additionalActiveScenes[i].getBoundingBox();\r\n\t\t\t if (boundingBox2) {\r\n\t\t\t \tboundingBox.union(boundingBox2);\r\n\t\t\t }\r\n\t\t\t }\r\n\t\t\t\tcurrentScene.viewAllWithBoundingBox(boundingBox);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\r\n\t * without any of the metadata. Therefore, extra parameters should be provided. This should be\r\n\t * called from {@link Zinc.Scene}.\r\n\t * \r\n\t * @deprecated\r\n\t */\r\n\tthis.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\r\n\t\tcurrentScene.loadModelsURL(urls, colours, opacities, timeEnabled, morphColour, finishCallback);\r\n\t}\r\n\t\r\n\tconst loadView = viewData => {\r\n\t\tcurrentScene.loadView(viewData);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Load the viewport from an external location provided by the url. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * @param {String} URL - address to the file containing viewport information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadViewURL = url => {\r\n\t\tcurrentScene.loadViewURL(url);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy file format containing the viewport and its model file from an external \r\n\t * location provided by the url. Use the new metadata format with\r\n\t * {@link Zinc.Scene#loadMetadataURL} instead. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * \r\n\t * @param {String} URL - address to the file containing viewport and model information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\r\n\t\tcurrentScene.loadFromViewURL(jsonFilePrefix, finishCallback);\r\n\t}\r\n\t\r\n\tthis.updateDirectionalLight = () => {\r\n\t\tcurrentScene.updateDirectionalLight();\r\n\t}\r\n \r\n let runAnimation = () => {\r\n if (isRendering) {\r\n animated_id = requestAnimationFrame( runAnimation );\r\n this.render();\r\n } else {\r\n cancelAnimationFrame(animated_id);\r\n animated_id = undefined;\r\n }\r\n }\r\n\r\n\t/**\r\n\t * Stop the animation and renderer to get into the render loop.\r\n\t */\r\n\tthis.stopAnimate = () => {\r\n if (isRendering) {\r\n clock.stop();\r\n isRendering = false;\r\n }\r\n\t}\r\n\r\n\t/**\r\n\t * Start the animation and begin the rendering loop.\r\n\t */\r\n\tthis.animate = () => {\r\n if (!isRendering) {\r\n clock.start();\r\n isRendering = true;\r\n runAnimation();\r\n }\r\n\t}\r\n\r\n\tconst prevTime = Date.now();\r\n\t\r\n\t/**\r\n\t * Add a callback function which will be called everytime before the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPreRenderCallbackFunction = callbackFunction => {\r\n\t\tpreRenderCallbackFunctions_id = preRenderCallbackFunctions_id + 1;\r\n\t\tpreRenderCallbackFunctions[preRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn preRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePreRenderCallbackFunction = id => {\r\n\t\tif (id in preRenderCallbackFunctions) {\r\n \t\t\tdelete preRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n \r\n\t/**\r\n\t * Add a callback function which will be called everytime after the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPostRenderCallbackFunction = callbackFunction => {\r\n\t\tpostRenderCallbackFunctions_id = postRenderCallbackFunctions_id + 1;\r\n\t\tpostRenderCallbackFunctions[postRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn postRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePostRenderCallbackFunction = id => {\r\n\t\tif (id in postRenderCallbackFunctions) {\r\n \t\t\tdelete postRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.getPlayRate = () => {\r\n\t\treturn playRate;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current play rate, playrate affects how fast an animated object animates.\r\n\t * @param {Number} PlayRateIn - value to set the playrate to.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setPlayRate = playRateIn => {\r\n\t\tplayRate = playRateIn;\r\n\t}\r\n\t\r\n\tthis.getCurrentTime = () => {\r\n\t\treturn currentScene.getCurrentTime();\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setMorphsTime = time => {\r\n\t\tcurrentScene.setMorphsTime(time);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get {Zinc.Geoemtry} by its id. This should be called from {@link Zinc.Scene};\r\n\t * \r\n\t * @depreacted\r\n\t * @return {Zinc.Geometry}\r\n\t */\r\n\tthis.getZincGeometryByID = id => {\r\n\t\treturn currentScene.getZincGeometryByID(id);\r\n\t}\t\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the current scene.\r\n\t */\r\n\tthis.addToScene = object => {\r\n\t\tcurrentScene.addObject(object)\r\n\t}\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the ortho scene, objects added to the ortho scene are rendered in\r\n\t * normalised coordinates and overlay on top of current scene. \r\n\t * \r\n\t */\r\n\tthis.addToOrthoScene = object => {\r\n\t\tif (sceneOrtho == undefined)\r\n\t\t\tsceneOrtho = new THREE.Scene();\r\n\t\tif (cameraOrtho == undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho = new THREE.OrthographicCamera( -width / 2,\r\n\t\t\t\t\twidth / 2, height/ 2, -height / 2, 1, 10 );\r\n\t\t\tcameraOrtho.position.z = 10;\r\n\t\t}\r\n\t\tsceneOrtho.add(object)\r\n\t}\r\n\t\r\n\tconst createHUDSprites = logoSprite => {\r\n\t\treturn texture => {\r\n\t\t\ttexture.needsUpdate = true;\r\n\t\t\tconst material = new THREE.SpriteMaterial( { map: texture } );\r\n\t\t\tconst imagewidth = material.map.image.width;\r\n\t\t\tconst imageheight = material.map.image.height;\r\n\t\t\tlogoSprite.material = material;\r\n\t\t\tlogoSprite.scale.set( imagewidth, imageheight, 1 );\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tlogoSprite.position.set( (width - imagewidth)/2, (-height + imageheight)/2, 1 );\r\n\t\t\tthis.addToOrthoScene(logoSprite);\r\n\t\t};\r\n\t};\r\n\t\r\n\tthis.addLogo = () => {\r\n\t\tlogoSprite = new THREE.Sprite();\r\n\t\tconst logo = THREE.ImageUtils.loadTexture(\r\n\t\t\t\t\"images/abi_big_logo_transparent_small.png\", undefined, createHUDSprites(logoSprite));\r\n\t}\r\n\t\r\n\t/**\r\n\t * Render the current and all additional scenes. It will first update all geometries and glyphsets\r\n\t * in scenes, clear depth buffer and render the ortho scene, call the preRenderCallbackFunctions stack\r\n\t * , render the scenes then postRenderCallback.\r\n\t */\r\n\tthis.render = () => {\r\n\t\tif (!sensor) {\r\n\t\t\tif (container) {\r\n\t\t\t\tif (container.clientWidth > 0 && container.clientHeight > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(container, this.onWindowResize);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (canvas.width > 0 && canvas.height > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(canvas, this.onWindowResize);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst delta = clock.getDelta();\r\n\t\tcurrentScene.renderGeometries(playRate, delta, this.playAnimation);\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t sceneItem.renderGeometries(playRate, delta, this.playAnimation);\r\n\t }\r\n\t\tif (cameraOrtho != undefined && sceneOrtho != undefined) {\r\n\t\t\trenderer.clearDepth();\r\n\t\t\trenderer.render( sceneOrtho, cameraOrtho );\r\n\t\t}\r\n for (key in preRenderCallbackFunctions) {\r\n if (preRenderCallbackFunctions.hasOwnProperty(key)) {\r\n preRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n currentScene.render(renderer);\r\n for (key in postRenderCallbackFunctions) {\r\n if (postRenderCallbackFunctions.hasOwnProperty(key)) {\r\n postRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the internal {@link Three.Renderer}, to gain access to ThreeJS APIs.\r\n\t */\r\n\tthis.getThreeJSRenderer = () => {\r\n\t\treturn renderer;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Check if a scene is currently active.\r\n\t * @param {Zinc.Scene} sceneIn - Scene to check if it is currently\r\n\t * rendered.\r\n\t */\r\n\tthis.isSceneActive = sceneIn => {\r\n\t\tif (currentScene === sceneIn) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t const sceneItem = additionalActiveScenes[i];\r\n\t\t if (sceneItem === sceneIn)\r\n\t\t \treturn true;\r\n\t\t }\r\n\t\t}\r\n\t return false;\r\n\t} \r\n\t\r\n\t/**\r\n\t * Add additional active scene for rendering, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be added to the rendering.\r\n\t */\r\n\tthis.addActiveScene = additionalScene => {\r\n\t\tif (!this.isSceneActive(additionalScene)) {\r\n\t\t\tadditionalActiveScenes.push(additionalScene);\r\n\t\t\tscenesGroup.add(additionalScene.getThreeJSScene());\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a currenrtly active scene from the renderer, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be removed from rendering.\r\n\t */\r\n\tthis.removeActiveScene = additionalScene => {\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t if (sceneItem === additionalScene) {\r\n\t \tadditionalActiveScenes.splice(i, 1);\r\n\t \tscenesGroup.remove(additionalScene.getThreeJSScene());\r\n\t \treturn;\r\n\t }\r\n\t }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Clear all additional scenes from rendering except for curentScene.\r\n\t */\r\n\tthis.clearAllActiveScene = () => {\r\n\t\tfor (let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\tscenesGroup.remove(additionalActiveScenes[i].getThreeJSScene());\r\n\t\t}\r\n\t\tadditionalActiveScenes.splice(0,additionalActiveScenes.length);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Dispose all memory allocated, this will effetively destroy all scenes.\r\n\t */\r\n\tthis.dispose = () => {\r\n if (isRendering)\r\n cancelAnimationFrame(animated_id);\r\n\t for (const key in sceneMap) {\r\n\t if (sceneMap.hasOwnProperty(key)) {\r\n\t sceneMap[key].clearAll();\r\n\t }\r\n\t }\r\n\t sceneMap = [];\r\n\t additionalActiveScenes = [];\r\n\t scenesGroup = new THREE.Group();\r\n\t this.stopAnimate();\r\n\t preRenderCallbackFunctions = [];\r\n\t preRenderCallbackFunctions_id = 0;\r\n\t cameraOrtho = undefined;\r\n\t sceneOrtho = undefined;\r\n\t logoSprite = undefined;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t sensor = undefined;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Transition from the current viewport to the endingScene's viewport in the specified duration.\r\n\t * \r\n\t * @param {Zinc.Scene} endingScene - Viewport of this scene will be used as the destination.\r\n\t * @param {Number} duration - Amount of time to transition from current viewport to the \r\n\t * endingScene's viewport.\r\n\t */\r\n\tthis.transitionScene = (endingScene, duration) => {\r\n\t\tif (currentScene) {\r\n\t\t\tconst currentCamera = currentScene.getZincCameraControls();\r\n\t\t\tconst boundingBox = endingScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t\tconst radius = boundingBox.min.distanceTo(boundingBox.max)/2.0;\r\n\t\t\t\tconst centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\r\n\t\t\t\tconst centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\r\n\t\t\t\tconst centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\r\n\t\t\t\tconst clip_factor = 4.0;\r\n\t\t\t\tconst endingViewport = currentCamera.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor );\r\n\t\t\t\tconst startingViewport = currentCamera.getCurrentViewport();\r\n\t\t\t\tcurrentCamera.cameraTransition(startingViewport, endingViewport, duration);\r\n\t\t\t\tcurrentCamera.enableCameraTransition();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n","module.exports = require(\"css-element-queries/src/ResizeSensor\");","const THREE = require('three');\nconst SceneLoader = require('./sceneLoader').SceneLoader;\nconst SceneExporter = require('./sceneExporter').SceneExporter;\nconst Viewport = require('./controls').Viewport;\n\nconst defaultMetadata = function() {\n return { \n Duration: \"6 secs\",\n OriginalDuration: \"-\",\n TimeStamps: {}\n }\n};\n\nconst defaultDuration = 6000;\n\n/**\n * A Zinc.Scene contains {@link Zinc.Geometry}, {@link Zinc.Glyphset} and \n * {@link Zinc.CameraControls} which controls the viewport and additional features.\n * It is the main object used for controlling what is and what is not displayed\n * on the renderer.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {Zinc.Scene}\n */\nexports.Scene = function (containerIn, rendererIn) {\n const container = containerIn;\n let videoHandler = undefined;\n let sceneLoader = new SceneLoader(this);\n let minimap = undefined;\n const scene = new THREE.Scene();\n const rootRegion = new (require('./region').Region)();\n scene.add(rootRegion.getGroup());\n /**\n * A {@link THREE.DirectionalLight} object for controlling lighting of this scene.\n */\n this.directionalLight = undefined;\n /**\n * a {@link THREE.AmbientLight} for controlling the ambient lighting of this scene.\n */\n this.ambient = undefined;\n this.camera = undefined;\n let duration = 6000;\n let zincCameraControls = undefined;\n this.sceneName = undefined;\n let stereoEffectFlag = false;\n let stereoEffect = undefined;\n this.autoClearFlag = true;\n this.displayMarkers = false;\n this.displayMinimap = false;\n this.minimapScissor = {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-left\",\n updateRequired: true\n };\n let scissor = {x: 0, y: 0};\n let metadata = defaultMetadata();\n let _markerTarget = new THREE.Vector2();\n\n const getDrawingWidth = () => {\n if (container)\n if (typeof container.clientWidth !== \"undefined\")\n return container.clientWidth;\n else\n return container.width;\n return 0;\n }\n\n const getDrawingHeight = () => {\n if (container)\n if (typeof container.clientHeight !== \"undefined\")\n return container.clientHeight;\n else\n return container.height;\n return 0;\n }\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n return sceneLoader.getDownloadProgress();\n }\n\n //called from Renderer when panel has been resized\n this.onWindowResize = () => {\n this.camera.aspect = getDrawingWidth() / getDrawingHeight();\n this.camera.updateProjectionMatrix();\n this.minimapScissor.updateRequired = true;\n zincCameraControls.onResize();\n }\n\n /**\n * Reset the viewport of this scene to its original state. \n */\n this.resetView = () => {\n this.onWindowResize();\n zincCameraControls.resetView();\n }\n\n /**\n * Set the zoom level by unit scroll rate\n */\n this.changeZoomByScrollRateUnit = unit => {\n zincCameraControls.changeZoomByScrollRateUnit(unit);\n }\n\n //Setup the camera for this scene, it also initialise the lighting\n const setupCamera = () => {\n this.camera = new THREE.PerspectiveCamera(40, getDrawingWidth() / getDrawingHeight(), 0.0, 10.0);\n this.ambient = new THREE.AmbientLight(0xffffff, 0.2);\n scene.add(this.ambient);\n\n this.directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);\n scene.add(this.directionalLight);\n zincCameraControls = new (require('./controls').CameraControls)(this.camera, rendererIn.domElement, rendererIn, this);\n\n zincCameraControls.setDirectionalLight(this.directionalLight);\n zincCameraControls.resetView();\n\n minimap = new (require('./minimap').Minimap)(this);\n };\n\n setupCamera();\n\n /**\n * Load the viewport Data from the argument {@link Zinc.Viewport} and set it as \n * the default viewport of this scene.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.loadView = settings => {\n const viewPort = new Viewport();\n viewPort.setFromObject(settings);\n zincCameraControls.setCurrentCameraSettings(viewPort);\n return true;\n }\n\n /**\n * Set up multiple views.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.setupMultipleViews = (defaultView, entries) => {\n for (const [name, settings] of Object.entries(entries)) {\n const viewport = new Viewport();\n viewport.setFromObject(settings);\n zincCameraControls.addViewport(name, viewport);\n }\n zincCameraControls.setDefaultViewport(defaultView);\n }\n\n /**\n * Get the bounding box of all the object in this scene only.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = () => {\n return rootRegion.getBoundingBox(true);\n }\n\n /**\n * Adjust the viewport to display the desired volume provided by the bounding box.\n * \n * @param {THREE.Box3} boundingBox - The bounding box which describes the volume of\n * which we the viewport should be displaying.\n */\n this.viewAllWithBoundingBox = boundingBox => {\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const radius = boundingBox.min.distanceTo(boundingBox.max) / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = zincCameraControls.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n\n zincCameraControls.setCurrentCameraSettings(viewport);\n }\n }\n\n /**\n * Adjust zoom distance to include all primitives in scene only.\n */\n this.viewAll = () => {\n const boundingBox = this.getBoundingBox();\n this.viewAllWithBoundingBox(boundingBox);\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n */\n this.forEachGeometry = callbackFunction => {\n rootRegion.forEachGeometry(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n */\n this.forEachGlyphset = callbackFunction => {\n rootRegion.forEachGlyphset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n */\n this.forEachPointset = callbackFunction => {\n rootRegion.forEachPointset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n */\n this.forEachLine = callbackFunction => {\n rootRegion.forEachLine(callbackFunction, true);\n }\n\n /** \n * Find and return all geometries in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = GroupName => {\n return rootRegion.findGeometriesWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all pointsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = GroupName => {\n return rootRegion.findPointsetsWithGroupName(GroupName, true);\n }\n /** \n * Find and return all glyphsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = GroupName => {\n return rootRegion.findGlyphsetsWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all lines in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findLinesWithGroupName = GroupName => {\n return rootRegion.findLinesWithGroupName(GroupName, true);\n }\n\n this.findObjectsWithGroupName = GroupName => {\n return rootRegion.findObjectsWithGroupName(GroupName, true);\n }\n\n this.findObjectsWithAnatomicalId = anatomicalId => {\n return rootRegion.findObjectsWithAnatomicalId(anatomicalId, true);\n }\n\n this.getBoundingBoxOfZincObjects = objectsArray => {\n let boundingBox = undefined;\n for (let i = 0; i < objectsArray.length; i++) {\n let box = objectsArray[i].getBoundingBox();\n if (box) {\n if (!boundingBox)\n boundingBox = box;\n else\n boundingBox.union(box);\n }\n }\n return boundingBox;\n }\n\n this.vectorToScreenXY = point => {\n point.project(this.camera);\n let width = getDrawingWidth();\n let height = getDrawingHeight();\n let widthHalf = (width / 2);\n let heightHalf = (height / 2);\n point.x = (point.x * widthHalf) + widthHalf;\n point.y = - (point.y * heightHalf) + heightHalf;\n return point;\n }\n\n this.getObjectsScreenXY = zincObjects => {\n if (zincObjects && zincObjects.length > 0) {\n let boundingBox = this.getBoundingBoxOfZincObjects(zincObjects);\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n return this.vectorToScreenXY(center);\n }\n return undefined;\n }\n\n this.getNamedObjectsScreenXY = name => {\n let zincObjects = this.findObjectsWithGroupName(name);\n return this.getObjectsScreenXY(zincObjects);\n };\n\n this.addZincObject = zincObject => {\n if (zincObject) {\n rootRegion.addZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (metaurl, glyphurl, groupName, finishCallback) => {\n sceneLoader.loadGlyphsetURL(rootRegion, metaurl, glyphurl, groupName, finishCallback);\n }\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadPointsetURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadLinesURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (url, groupName, finishCallback) => {\n sceneLoader.loadSTL(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (url, groupName, finishCallback) => {\n sceneLoader.loadOBJ(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (url, finishCallback, allCompletedCallback) => {\n sceneLoader.loadMetadataURL(rootRegion, url, finishCallback, allCompletedCallback);\n }\n\n /**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n sceneLoader.loadModelsURL(rootRegion. urls, colours, opacities, timeEnabled, morphColour, finishCallback);\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = url => {\n sceneLoader.loadViewURL(url);\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\n sceneLoader.loadFromViewURL(jsonFilePrefix, finishCallback);\n }\n\n /**\n * Load GLTF into this scene object.\n */\n this.loadGLTF = (url, finishCallback, options) => {\n sceneLoader.loadGLTF(rootRegion, url, finishCallback, options);\n }\n \n\n //Update the directional light for this scene.\n this.updateDirectionalLight = () => {\n zincCameraControls.updateDirectionalLight();\n }\n\n /**\n * Add any {THREE.Object} into this scene.\n * @param {THREE.Object} object - to be addded into this scene.\n */\n this.addObject = object => {\n scene.add(object);\n }\n\n /**\n * Remove any {THREE.Object} from this scene.\n * @param {THREE.Object} object - to be removed from this scene.\n */\n this.removeObject = object => {\n scene.remove(object);\n }\n\n /**\n * Get the current time of the scene.\n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (videoHandler != undefined) {\n return videoHandler.getCurrentTime(duration);\n }\n const time = rootRegion.getCurrentTime();\n if (time !== -1) \n return time;\n \n return 0;\n }\n\n /**\n * Set the current time of all the geometries and glyphsets of this scene.\n * @param {Number} time - Value to set the time to.\n */\n this.setMorphsTime = (time) => {\n if (videoHandler != undefined) {\n videoHandler.setMorphTime(time, duration);\n }\n rootRegion.setMorphTime(time, true);\n }\n\n /**\n * Check if any object in this scene is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if (videoHandler && videoHandler.video && !videoHandler.video.error) {\n \treturn true;\n }\n return rootRegion.isTimeVarying();\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation) => {\n // Let video dictates the progress if one is present\n let options = {};\n options.camera = zincCameraControls;\n options.displayMarkers = this.displayMarkers;\n options.markerDepths = [];\n\t if (videoHandler) {\n\t\t if (videoHandler.isReadyToPlay()) {\n\t\t\t if (playAnimation) {\n videoHandler.video.play();\n\t\t\t } else {\n\t\t\t\t videoHandler.video.pause();\n\t\t\t }\n const currentTime = videoHandler.video.currentTime /\n videoHandler.getVideoDuration() * duration;\n\t\t\t if (0 == sceneLoader.toBeDownloaded) {\n\t\t\t\t zincCameraControls.setTime(currentTime);\n\t\t\t\t zincCameraControls.update(0);\n rootRegion.setMorphTime(currentTime, true);\n rootRegion.renderGeometries(0, 0, playAnimation, undefined, true);\n\t\t\t } else {\n\t\t\t\t zincCameraControls.update(0);\n\t\t\t }\n\t\t\t //console.log(videoHandler.video.currentTime / videoHandler.getVideoDuration() * 6000);\n\t\t } else {\n\t\t\t myPlayRate = 0;\n\t\t }\n\t } else {\n\t\t if (0 == sceneLoader.toBeDownloaded) {\n zincCameraControls.update(delta);\n rootRegion.renderGeometries(playRate, delta, playAnimation, options, true);\n\t\t } else {\n\t\t\t zincCameraControls.update(0);\n\t\t }\n }\n }\n\n /**\n * Return the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n this.setVideoHandler = (videoHandlerIn) => {\n if (!videoHandler)\n videoHandler = videoHandlerIn;\n }\n\n /**\n * Set a group of scenes into this parent scene. This group of\n * scenes will also be rendered when this scene is rendered.\n * @private\n */\n this.setAdditionalScenesGroup = scenesGroup => {\n scene.add(scenesGroup);\n }\n\n let getWindowsPosition = (align, x_offset, y_offset, width, height,\n renderer_width, renderer_height) => {\n let x = 0;\n let y = 0;\n if (align.includes(\"top\")) {\n y = renderer_height - height - y_offset;\n } else if (align.includes(\"bottom\")) {\n y = y_offset;\n } else {\n y = Math.floor((renderer_height - height) / 2.0);\n }\n if (align.includes(\"left\")) {\n x = x_offset;\n } else if (align.includes(\"right\")) {\n x = renderer_width - x_offset- width;\n } else {\n x = Math.floor((renderer_width - width) / 2.0);\n }\n return {x: x, y: y};\n }\n\n const renderMinimap = renderer => {\n if (this.displayMinimap === true) {\n renderer.setScissorTest(true);\n renderer.getSize(_markerTarget);\n if (this.minimapScissor.updateRequired) {\n scissor = getWindowsPosition(this.minimapScissor.align,\n this.minimapScissor.x_offset, \n this.minimapScissor.y_offset, \n this.minimapScissor.width,\n this.minimapScissor.height,\n _markerTarget.x, _markerTarget.y);\n this.minimapScissor.updateRequired = false;\n }\n renderer.setScissor(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height);\n renderer.setViewport(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height); \n minimap.updateCamera();\n scene.add(minimap.mask);\n renderer.render(scene, minimap.camera);\n scene.remove(minimap.mask);\n renderer.setScissorTest(false);\n renderer.setViewport(0, 0, _markerTarget.x, _markerTarget.y);\n }\n }\n\n /**\n * Render the scene.\n * @private\n */\n this.render = renderer => {\n if (this.autoClearFlag)\n renderer.clear();\n if (stereoEffectFlag && stereoEffect) {\n stereoEffect.render(scene, this.camera);\n } else {\n renderer.render(scene, this.camera);\n renderMinimap(renderer);\n }\n }\n\n /**\n * Enable or disable interactive control, this is on by default.\n * \n * @param {Boolean} flag - Indicate either interactive control \n * should be enabled or disabled.\n */\n this.setInteractiveControlEnable = flag => {\n if (flag == true)\n zincCameraControls.enable();\n else\n zincCameraControls.disable();\n }\n\n /**\n * Get the camera control of this scene.\n * @return {Zinc.CameraControls}\n */\n this.getZincCameraControls = () => {\n return zincCameraControls;\n }\n\n /**\n * Get the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n /**\n * Set the default duration value for geometries and glyphsets\n * that are to be loaded into this scene.\n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n rootRegion.setDuration(durationIn);\n duration = durationIn;\n zincCameraControls.setPathDuration(durationIn);\n sceneLoader.duration = durationIn;\n }\n\n /**\n * Get the default duration value.\n * returns {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Enable or disable stereo effect of this scene.\n * @param {Boolean} flag - Indicate either stereo effect control \n * should be enabled or disabled.\n */\n this.setStereoEffectEnable = stereoFlag => {\n if (stereoFlag == true) {\n if (!stereoEffect) {\n stereoEffect = new require('./controls').StereoEffect(rendererIn);\n }\n }\n rendererIn.setSize(getDrawingWidth(), getDrawingHeight());\n this.camera.updateProjectionMatrix();\n stereoEffectFlag = stereoFlag;\n }\n\n this.objectIsInScene = zincObject => {\n return rootRegion.objectIsInRegion(zincObject, true);\n }\n\n this.alignBoundingBoxToCameraView = (boundingBox, transitionTime) => {\n if (boundingBox) {\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n const viewport = this.getZincCameraControls().getCurrentViewport();\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const upVector = new THREE.Vector3(viewport.upVector[0],\n viewport.upVector[1], viewport.upVector[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(target, eyePosition).normalize();\n newVec2.subVectors(target, center).normalize();\n const newVec3 = new THREE.Vector3();\n newVec3.crossVectors(newVec1, newVec2);\n const angle = newVec1.angleTo(newVec2);\n if (transitionTime > 0) {\n this.getZincCameraControls().rotateCameraTransition(newVec3,\n angle, transitionTime);\n this.getZincCameraControls().enableCameraTransition();\n } else {\n this.getZincCameraControls().rotateAboutLookAtpoint(newVec3, angle);\n }\n }\n }\n\n this.alignObjectToCameraView = (zincObject, transitionTime) => {\n if (this.objectIsInScene(zincObject)) {\n const boundingBox = zincObject.getBoundingBox();\n this.alignBoundingBoxToCameraView(boundingBox, transitionTime);\n }\n }\n\n this.setCameraTargetToObject = zincObject => {\n if (this.objectIsInScene(zincObject)) {\n const center = new THREE.Vector3();\n const boundingBox = zincObject.getBoundingBox();\n const viewport = this.getZincCameraControls().getCurrentViewport();\n boundingBox.getCenter(center);\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(eyePosition, target);\n newVec2.addVectors(center, newVec1);\n viewport.eyePosition[0] = newVec2.x;\n viewport.eyePosition[1] = newVec2.y;\n viewport.eyePosition[2] = newVec2.z;\n viewport.targetPosition[0] = center.x;\n viewport.targetPosition[1] = center.y;\n viewport.targetPosition[2] = center.z;\n this.getZincCameraControls().setCurrentCameraSettings(viewport);\n }\n }\n\n /**\n * Check if stereo effect is enabled.\n * @returns {Boolean}\n */\n this.isStereoEffectEnable = () => {\n return stereoEffectFlag;\n }\n\n /**\n * Remove a ZincObject from this scene if it presents. This will eventually\n * destroy the object and free up the memory.\n * @param {Zinc.Object} zincObject - object to be removed from this scene.\n */\n this.removeZincObject = zincObject => {\n rootRegion.removeZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = () => {\n let returnedObjects = [];\n rootRegion.getPickableThreeJSObjects(returnedObjects,\n this.displayMarkers, true);\n return returnedObjects;\n }\n\n /**\n * Get the Normalised coordinates on minimap if mouse event is\n * inside the minimap \n */\n this.getNormalisedMinimapCoordinates = (renderer, event) => {\n if (this.displayMinimap) {\n const target = new THREE.Vector2();\n renderer.getSize(target);\n let offsetY = target.y - event.clientY;\n if (((scissor.x + this.minimapScissor.width) > event.clientX) &&\n (event.clientX > scissor.x) && \n ((scissor.y + this.minimapScissor.height) > offsetY) &&\n (offsetY > scissor.y)) {\n let x = ((event.clientX - scissor.x) /\n this.minimapScissor.width) * 2.0 - 1.0;\n let y = ((offsetY - scissor.y) /\n this.minimapScissor.height) * 2.0 - 1.0;\n return {\"x\": x, \"y\": y};\n }\n }\n return undefined;\n }\n\n /**\n * Get the coordinates difference of the current viewing\n * point and projected coordinates.\n */\n this.getMinimapDiffFromNormalised = (x, y) => {\n if (minimap)\n return minimap.getDiffFromNormalised(x, y);\n return undefined;\n }\n\n /**\n * Remove all objects that are created with ZincJS APIs and it will free the memory allocated.\n * This does not remove obejcts that are added using the addObject APIs.\n */\n this.clearAll = () => {\n rootRegion.clear(true);\n sceneLoader.toBeDwonloaded = 0;\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n\n /**\n * All time stamp to the metadata TimeStamps field.\n */\n this.addMetadataTimeStamp = (key, time) => {\n metadata[\"TimeStamps\"][key] = convertDurationObjectTomSec(time);\n }\n \n /**\n * Get a specific metadata field.\n */\n this.getMetadataTag = key => {\n return metadata[key];\n }\n\n /**\n * Get all metadata set for the scene.\n */\n this.getMetadata = () => {\n return metadata;\n }\n\n /**\n * Set a specific metadata field.\n */\n this.setMetadataTag = (key, value) => {\n metadata[key] = value;\n }\n\n /**\n * Remove a specific metadata field.\n */\n this.removeMetadataTag = key => {\n delete metadata[key];\n }\n\n /**\n * Reset all metadata fields to original value.\n */\n this.resetMetadata = () => {\n metadata = defaultMetadata();\n }\n\n /**\n * Reset duration of scene to default value.\n */\n this.resetDuration = () => {\n this.setDuration(defaultDuration);\n }\n\n // Turn the object into a readable string {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectToString = duration => {\n return [\n ...(duration.years ? [`${duration.years}years`] : []),\n ...(duration.months ? [`${duration.months}months`] : []),\n ...(duration.weeks ? [`${duration.weeks}weeks`] : []),\n ...(duration.days ? [`${duration.days}days`] : []),\n ...(duration.hours ? [`${duration.hours}hours`] : []),\n ...(duration.mins ? [`${duration.mins}mins`] : []),\n ...(duration.secs ? [`${duration.secs}secs`] : []),\n ].join(' ');\n }\n\n // Turn the object into a number representing milliesecond {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectTomSec = duration => {\n return duration.years ? duration.years * 31536000000 : 0 +\n duration.months ? duration.months * 2592000000 : 0 +\n duration.weeks ? duration.weeks * 604800000 : 0 +\n duration.days ? duration.days * 86400000 : 0 +\n duration.hours ? duration.hours * 3600000 : 0 +\n duration.mins ? duration.mins * 60000 : 0 +\n duration.secs ? duration.secs * 1000 : 0;\n }\n\n // Set the readable duration and timer using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n const millisec = convertDurationObjectTomSec(duration);\n this.setMetadataTag(\"Duration\", string);\n this.setDuration(millisec);\n }\n\n // Set the readable original duration using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setOriginalDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n this.setMetadataTag(\"OriginalDuration\", string);\n }\n\n this.exportGLTF = (binary) => {\n const exporter = new SceneExporter(this);\n return exporter.exportGLTF(binary);\n }\n\n this.getRootRegion = () => {\n return rootRegion;\n }\n}\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\nconst JSONLoader = require('./loader').JSONLoader;\nconst STLLoader = require('three/examples/jsm/loaders/STLLoader').STLLoader;\nconst OBJLoader = require('three/examples/jsm/loaders/OBJLoader').OBJLoader;\nconst GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader').GLTFLoader;\n\nexports.SceneLoader = function (sceneIn) {\n const scene = sceneIn;\n this.toBeDownloaded = 0;\n this.progressMap = [];\n let viewLoaded = false;\n let errorDownload = false;\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n let totalSize = 0;\n let totalLoaded = 0;\n let unknownFound = false;\n\n for (const key in this.progressMap) {\n const progress = this.progressMap[key];\n\n totalSize += progress[1];\n totalLoaded += progress[0];\n\n if (progress[1] == 0)\n unknownFound = true;\n }\n if (unknownFound) {\n totalSize = 0;\n }\n return [ totalSize, totalLoaded, errorDownload ];\n }\n\n //Stores the current progress of downloads\n this.onProgress = id => {\n return xhr => {\n this.progressMap[id] = [ xhr.loaded, xhr.total ];\n };\n }\n\n this.onError = xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n };\n\n let loadMultipleViews = (referenceURL, views) => {\n const defaultView = views.Default;\n if (views.Inline) {\n scene.addMultipleViews(defaultView, views.Entries);\n } else {\n const promises = [];\n for (const [key, value] of Object.entries(views.Entries)) {\n if (referenceURL) {\n newURL = (new URL(value, referenceURL)).href;\n promises.push(new Promise((resolve, reject) => {\n // Add parameters if we are sent them\n fetch(newURL)\n .then(response => response.json())\n .then(data => resolve({key: key, data: data}))\n .catch(data => reject(data));\n }));\n }\n }\n Promise.all(promises)\n .then(values => {\n const entries = {};\n values.forEach(entry => {\n entries[entry.key] = entry.data;\n });\n scene.setupMultipleViews(defaultView, entries);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.setCurrentViewport(defaultView);\n viewLoaded = true;\n });\n }\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = (url, finishCallback) => {\n this.toBeDownloaded += 1;\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4) {\n if(xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.setupMultipleViews(\"default\", { \"default\" : viewData });\n scene.resetView();\n viewLoaded = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n --this.toBeDownloaded;\n }\n }\n requestURL = resolveURL(url);\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n/**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (region, urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n const number = urls.length;\n this.toBeDownloaded += number;\n for (let i = 0; i < number; i++) {\n const filename = urls[i];\n const loader = new JSONLoader();\n let colour = require('./zinc').defaultMaterialColor;\n let opacity = require('./zinc').defaultOpacity;\n if (colours != undefined && colours[i] != undefined)\n colour = colours[i] ? true : false;\n if (opacities != undefined && opacities[i] != undefined)\n opacity = opacities[i];\n let localTimeEnabled = 0;\n if (timeEnabled != undefined && timeEnabled[i] != undefined)\n localTimeEnabled = timeEnabled[i] ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined && morphColour[i] != undefined)\n localMorphColour = morphColour[i] ? true : false;\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(filename), meshloader(region, colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, finishCallback), this.onProgress(i), this.onError);\n }\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (targetRegion, jsonFilePrefix, finishCallback) => {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.loadView(viewData);\n const urls = [];\n const filename_prefix = jsonFilePrefix + \"_\";\n for (let i = 0; i < viewData.numberOfResources; i++) {\n const filename = filename_prefix + (i + 1) + \".json\";\n urls.push(filename);\n }\n this.loadModelsURL(targetRegion, urls, viewData.colour, viewData.opacity, viewData.timeEnabled, viewData.morphColour, finishCallback);\n }\n }\n requestURL = resolveURL(jsonFilePrefix + \"_view.json\");\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n //Internal loader for a regular zinc geometry.\n const linesloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newLines = new (require('./primitives/lines').Lines)();\n let material = undefined;\n if (materials && materials[0]) {\n material = new THREE.LineBasicMaterial({color:materials[0].color.clone()});\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n\n if (newLines) {\n newLines.createLineSegment(geometry, material, options);\n newLines.setName(groupName);\n newLines.anatomicalId = anatomicalId;\n newLines.setRenderOrder = renderOrder;\n region.addZincObject(newLines);\n newLines.setDuration(scene.getDuration());\n }\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newLines);\n };\n } \n\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n\t let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n\t if (timeEnabled != undefined)\n\t\t localTimeEnabled = timeEnabled ? true : false;\n\t let localMorphColour = 0;\n\t if (morphColour != undefined)\n\t\t localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n if (isInline) {\n var object = loader.parse( url );\n (linesloader(region, localTimeEnabled, localMorphColour, groupName, anatomicalId,\n renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, linesloader(region, localTimeEnabled, localMorphColour, groupName, \n anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError);\n }\n }\n\n const loadGlyphset = (region, glyphsetData, glyphurl, groupName, finishCallback, options) => {\n let isInline = (options && options.isInline) ? options.isInline : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let displayLabels = (options && options.displayLabels) ? options.displayLabels : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n const newGlyphset = new (require('./primitives/glyphset').Glyphset)();\n newGlyphset.setDuration(scene.getDuration());\n newGlyphset.groupName = groupName;\n let myCallback = () => {\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGlyphset);\n }\n ++this.toBeDownloaded;\n if (isInline) {\n newGlyphset.load(glyphsetData, glyphurl, myCallback, isInline, displayLabels);\n }\n else{\n newGlyphset.load(glyphsetData, resolveURL(glyphurl), myCallback, isInline, displayLabels);\n }\n newGlyphset.anatomicalId = anatomicalId;\n newGlyphset.setRenderOrder(renderOrder);\n region.addZincObject(newGlyphset);\n };\n\n //Load a glyphset into this scene.\n const onLoadGlyphsetReady = (region, xmlhttp, glyphurl, groupName, finishCallback, options) => {\n return () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const glyphsetData = JSON.parse(xmlhttp.responseText);\n loadGlyphset(region, glyphsetData, glyphurl, groupName, finishCallback, options);\n }\n };\n };\n\n //Internal loader for a regular zinc geometry.\n const pointsetloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newPointset = new (require('./primitives/pointset').Pointset)();\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 5, sizeAttenuation: false });\n if (materials && materials[0]) {\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.color = materials[0].color;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n if (newPointset) {\n newPointset.createMesh(geometry, material, options);\n newPointset.setName(groupName);\n newPointset.anatomicalId = anatomicalId;\n region.addZincObject(newPointset);\n newPointset.setDuration(scene.getDuration());\n newPointset.setRenderOrder(renderOrder);\n }\n geometry.dispose();\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newPointset);\n };\n }\n\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new STLLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined, finishCallback));\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined,finishCallback));\n }\n\n //Loader for the OBJ format, \n const objloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n finishCallback\n ) => {\n return object => {\n this.toBeDownloaded--;\n object.traverse(child => {\n if (child instanceof THREE.Mesh) {\n const zincGeometry = addMeshToZincGeometry(child, localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n if (zincGeometry.morph)\n zincGeometry.morph.name = groupName;\n zincGeometry.groupName = groupName;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n });\n };\n }\n\n /**\n * Load a geometry into this scene, this is a subsequent called from \n * {@link Zinc.Scene#loadMetadataURL}, although it can be used to read\n * in geometry into the scene externally.\n * \n * @param {String} url - regular json model file providing geometry.\n * @param {Boolean} timeEnabled - Indicate if geometry morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {STRING} fileFormat - name supported formats are STL, OBJ and JSON.\n * @param {Function} finishCallback - Callback function which will be called\n * once the geometry is succssfully loaded in.\n */\n const loadSurfaceURL = (region ,url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n let localTimeEnabled = 0;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let fileFormat = (options && options.fileFormat) ? options.fileFormat : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n if (fileFormat !== undefined) {\n if (fileFormat == \"STL\") {\n loader = new STLLoader();\n } else if (fileFormat == \"OBJ\") {\n loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, objloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback), this.onProgress(i), this.onError);\n return;\n }\n }\n if (isInline) {\n const object = loader.parse( url );\n\t\t\t(meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError);\n }\n };\n\n //Object to keep track of number of items downloaded and when all items are downloaded\n //allCompletedCallback is called\n const metaFinishCallback = function (numberOfDownloaded, finishCallback, allCompletedCallback) {\n let downloadedItem = 0;\n return zincObject => {\n downloadedItem = downloadedItem + 1;\n if (zincObject && (finishCallback != undefined) && (typeof finishCallback == 'function')) {\n finishCallback(zincObject);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(scene);\n }\n if (downloadedItem == numberOfDownloaded) {\n if (viewLoaded === false)\n scene.viewAll();\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n }\n };\n };\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (isInline) {\n const object = loader.parse( url );\n (pointsetloader(region, localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, finishCallback))(object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, pointsetloader(region, localTimeEnabled, localMorphColour,\n groupName, anatomicalId, renderOrder, finishCallback),\n this.onProgress(i), this.onError);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (region, metaurl, glyphurl, groupName, finishCallback, options) => {\n const isInline = (options && options.isInline) ? options.isInline : false;\n if (isInline) {\n loadGlyphset(region, metaurl, glyphurl, groupName, finishCallback, options);\n } else {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = onLoadGlyphsetReady(region, xmlhttp, glyphurl,\n groupName, finishCallback, options);\n xmlhttp.open(\"GET\", resolveURL(metaurl), true);\n xmlhttp.send();\n }\n }\n\n /**\n * Add a user provided {THREE.Geometry} into the scene as zinc geometry.\n * \n * @param {Three.Geometry} geometry - The threejs geometry to be added as {@link Zinc.Geometry}.\n * @param {THREE.Color} color - Colour to be assigned to this geometry, overrided if materialIn is provided.\n * @param {Number} opacity - Opacity to be set for this geometry, overrided if materialIn is provided.\n * @param {Boolean} localTimeEnabled - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Boolean} localMorphColour - Set this to true if morph colour is present, overrided if materialIn is provided.\n * @param {Boolean} external - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Function} finishCallback - Callback once the geometry has been added succssfully.\n * @param {THREE.Material} materialIn - Material to be set for this geometry if it is present.\n * \n * @returns {Zinc.Geometry}\n */\n addZincGeometry = (\n region,\n geometryIn,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n finishCallback,\n materialIn,\n groupName\n ) => {\n let options = {};\n options.colour = colour;\n options.opacity = opacity;\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour\n const newGeometry = new (require('./primitives/geometry').Geometry)();\n newGeometry.createMesh(geometryIn, materialIn, options);\n if (newGeometry.morph) {\n newGeometry.setName(groupName);\n region.addZincObject(newGeometry);\n newGeometry.setDuration(scene.getDuration());\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGeometry);\n if (newGeometry.videoHandler)\n scene.setVideoHandler(newGeometry.videoHandler);\n return newGeometry;\n }\n return undefined;\n }\n\n //Internal loader for a regular zinc geometry.\n const meshloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n anatomicalId,\n renderOrder,\n finishCallback\n ) => {\n return (geometry, materials) => {\n let material = undefined;\n if (materials && materials[0]) {\n material = materials[0];\n }\n const zincGeometry = addZincGeometry(region, geometry, colour, opacity, \n localTimeEnabled, localMorphColour, undefined, material, groupName, renderOrder);\n zincGeometry.anatomicalId = anatomicalId;\n zincGeometry.setRenderOrder(renderOrder);\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n };\n }\n\n //Turn ISO 8601 duration string into an array.\n const parseDuration = (durationString) => {\n const regex = /P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?)?$/;\n const [, years, months, weeks, days, hours, mins, secs] = \n durationString.match(regex);\n return {years: years,months: months, weeks: weeks, days: days,\n hours: hours, mins: mins, secs: secs };\n }\n\n //Load settings from metadata item.\n this.loadSettings = (item) => {\n if (item) {\n //duration uses the ISO 8601 standard - PnYnMnDTnHnMnS\n if (item.Duration) {\n const duration = parseDuration(item.Duration);\n scene.setDurationFromObject(duration);\n }\n if (item.OriginalDuration) {\n const duration = parseDuration(item.OriginalDuration);\n scene.setOriginalDurationFromObject(duration);\n }\n if (item.TimeStamps) {\n for (const key in item.TimeStamps) {\n const time = parseDuration(item.TimeStamps[key]);\n scene.addMetadataTimeStamp(key, time);\n }\n }\n }\n }\n\n //Function to process each of the graphical metadata item except for view and\n //settings.\n const readPrimitivesItem = (region, referenceURL, item, order, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = (new URL(item.URL, referenceURL)).href;\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n let groupName = item.GroupName;\n if (groupName === undefined || groupName === \"\") {\n groupName = \"_Unnamed\";\n }\n\n let options = {\n isInline: isInline,\n fileFormat: item.FileFormat,\n anatomicalId: item.AnatomicalId,\n compression: item.compression,\n renderOrder: order\n };\n \n switch (item.Type) {\n case \"Surfaces\":\n loadSurfaceURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Glyph\":\n let newGeometryURL = undefined;\n if (!isInline) {\n newGeometryURL = item.GlyphGeometriesURL;\n newGeometryURL = (new URL(item.GlyphGeometriesURL, referenceURL)).href;\n } else {\n newGeometryURL = item.Inline.GlyphGeometriesURL;\n }\n if (item.DisplayLabels) {\n options.displayLabels = true;\n }\n this.loadGlyphsetURL(region, newURL, newGeometryURL, groupName, finishCallback, options);\n break;\n case \"Points\":\n this.loadPointsetURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Lines\":\n this.loadLinesURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n default:\n break;\n }\n }\n };\n\n //Function to read the view item first\n const readViewAndSettingsItem = (referenceURL, item, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = (new URL(item.URL, referenceURL)).href;\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n switch (item.Type) {\n case \"View\":\n if (isInline) {\n scene.setupMultipleViews(\"default\", { \"default\" : newURL});\n viewLoaded = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n else\n this.loadViewURL(newURL, finishCallback);\n break;\n case \"Settings\":\n this.loadSettings(item);\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n break;\n default:\n break;\n }\n }\n };\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGLTF = (region, url, finishCallback, options) => {\n const path = url.substring(0, url.lastIndexOf(\"/\") + 1);\n const filename = url.substring(url.lastIndexOf(\"/\") + 1, url.length);\n const loader = new GLTFLoader().setPath(path);\n loader.load( filename, function ( gltf ) {\n gltf.scene.children.forEach(child => {\n let localTimeEnabled = false;\n let localMorphColour = false;\n if (child.geometry && child.geometry.morphAttributes) {\n localTimeEnabled = child.geometry.morphAttributes.position ? true : false;\n localMorphColour = child.geometry.morphAttributes.color ? true : false;\n }\n const zincGeometry = new (require('./primitives/geometry').Geometry)();\n zincGeometry.setMesh(child.clone(), localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n zincGeometry.groupName = zincGeometry.morph.name;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n });\n })\n }\n\n let loadRegions = (currentRegion, referenceURL, regions, callback) => {\n if (regions.Primitives) {\n regions.Primitives.forEach(primitive => {\n let order = 1;\n if (primitive.Order)\n order = primitive.Order;\n readPrimitivesItem(currentRegion, referenceURL, primitive, order, callback);\n });\n }\n if (regions.Transformation) {\n currentRegion.setTransformation(regions.Transformation);\n }\n if (regions.Children) {\n for (const [regionName, value] of Object.entries(regions.Children)) {\n const childRegion = currentRegion.findOrCreateChildFromPath(regionName);\n if (childRegion) {\n loadRegions(childRegion, referenceURL, value, callback);\n }\n }\n }\n }\n\n let getNumberOfObjectsInRegions = (regionJson) => {\n let counts = regionJson.Primitives ? regionJson.Primitives.length : 0;\n if (regionJson.Children) {\n regionJson.Children.forEach(childRegion => {\n counts += getNumberOfObjectsInRegions(childRegion);\n });\n }\n return counts;\n }\n\n let getNumberOfObjects = (metadata) => {\n if (Array.isArray(metadata)) {\n return numberOfObjects = metadata.length;\n } else if (typeof metadata === \"object\" && metadata !== null) {\n if (metadata.version == \"2.0\") {\n return getNumberOfObjectsInRegions(metadata.Regions);\n }\n }\n }\n\n let loadVersionOne = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n // Prioritise the view file and settings before loading anything else\n for (let i = 0; i < metadata.length; i++)\n readViewAndSettingsItem(referenceURL, metadata[i], callback);\n for (let i = 0; i < metadata.length; i++) {\n //Render order is set to i * 2 to account for front and back rendering\n readPrimitivesItem(targetRegion, referenceURL, metadata[i], i * 2, callback);\n }\n }\n\n let loadVersionTwo = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n if (metadata.Settings)\n this.loadSettings(metadata.Settings);\n if (metadata.Views)\n loadMultipleViews(referenceURL, metadata.Views, referenceURL);\n if (metadata.Regions)\n loadRegions(targetRegion, referenceURL, metadata.Regions, callback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (targetRegion, url, finishCallback, allCompletedCallback) => {\n const xmlhttp = new XMLHttpRequest();\n var requestURL = resolveURL(url);\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n scene.resetMetadata();\n scene.resetDuration();\n viewLoaded = false;\n let referenceURL = xmlhttp.responseURL;\n if (referenceURL === undefined)\n referenceURL = (new URL(requestURL)).href;\n const metadata = JSON.parse(xmlhttp.responseText);\n if (Array.isArray(metadata)) {\n loadVersionOne(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n } else if (typeof metadata === \"object\" && metadata !== null) {\n if (metadata.Version == \"2.0\") {\n loadVersionTwo(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n }\n }\n }\n }\n\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n}\n","module.exports = require(\"three/examples/jsm/loaders/STLLoader\");","module.exports = require(\"three/examples/jsm/loaders/OBJLoader\");","module.exports = require(\"three/examples/jsm/loaders/GLTFLoader\");","const GLTFExporter = require('./three/GLTFExporter').GLTFExporter;\n\n/**\n * Provides an object which uses for exporting the scene\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst SceneExporter = function (sceneIn) {\n const scene = sceneIn;\n\n\tthis.exportGLTF = (binary) => {\n const rootRegion = scene.getRootRegion();\n const zincObjects = rootRegion.getAllObjects(true);\n const animations = [];\n zincObjects.forEach(zincObject => {\n if (zincObject.animationClip) {\n animations.push({clip: zincObject.animationClip[0], mesh: zincObject.morph});\n }\n });\n const exporter = new GLTFExporter();\n const options = { binary, animations };\n return new Promise((resolve, reject) => {\n exporter.parse( scene.getThreeJSScene(), function ( gltf ) {\n resolve(gltf);\n }, options );\n });\n\t}\n}\n\nexports.SceneExporter = SceneExporter;\n","import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRGBFormat,\n\tRepeatWrapping,\n\tScene,\n\tVector3\n} from 'three';\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsPBRSpecularGlossiness( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tUNSIGNED_BYTE: 0x1401,\n\tUNSIGNED_SHORT: 0x1403,\n\tFLOAT: 0x1406,\n\tUNSIGNED_INT: 0x1405,\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\tif ( window.TextEncoder !== undefined ) {\n\n\t\treturn new TextEncoder().encode( text ).buffer;\n\n\t}\n\n\tconst array = new Uint8Array( new ArrayBuffer( text.length ) );\n\n\tfor ( let i = 0, il = text.length; i < il; i ++ ) {\n\n\t\tconst value = text.charCodeAt( i );\n\n\t\t// Replacing multi-byte character with space(0x20).\n\t\tarray[ i ] = value > 0xFF ? 0x20 : value;\n\n\t}\n\n\treturn array.buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nlet cachedCanvas = null;\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\t\tthis.extensionsUsed = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter'\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\twrite( input, onDone, options ) {\n\n\t\tthis.options = Object.assign( {}, {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\ttruncateDrawRange: true,\n\t\t\tembedImages: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tconst writer = this;\n\n\t\tPromise.all( this.pending ).then( function () {\n\n\t\t\tconst buffers = writer.buffers;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\t\t// Merge buffers.\n\t\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t\t// Declare extensions.\n\t\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\n\t\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\n\t\t\t// Update bytelength of the single buffer.\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\treader.readAsArrayBuffer( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t// Binary chunk.\n\t\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t\t// JSON chunk.\n\t\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t\t// GLB header.\n\t\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\t\theader,\n\t\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\t\tjsonChunk,\n\t\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\t\tbinaryChunk\n\t\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\t\tconst glbReader = new window.FileReader();\n\t\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\t\tonDone( glbReader.result );\n\n\t\t\t\t\t};\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tif ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\t\tonDone( json );\n\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n if (object.userData && object.userData.isZincObject) return;\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Assign and return a temporal unique id for an object\n\t * especially which doesn't have .uuid\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( object ) {\n\n\t\tif ( ! this.uids.has( object ) ) this.uids.set( object, this.uid ++ );\n\n\t\treturn this.uids.get( object );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tif ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\tcomponentSize = 1;\n\n\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\tcomponentSize = 2;\n\n\t\t} else {\n\n\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * attribute.itemSize * componentSize );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = attribute.itemSize * componentSize;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise<Integer>}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new window.FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst options = this.options;\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array (float, uint or ushort)\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type.' );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined ) count = attribute.count;\n\n\t\t// @TODO Indexed buffer geometry with drawRange not supported yet\n\t\tif ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {\n\n\t\t\tconst end = start + count;\n\t\t\tconst end2 = geometry.drawRange.count === Infinity\n\t\t\t\t? attribute.count\n\t\t\t\t: geometry.drawRange.start + geometry.drawRange.count;\n\n\t\t\tstart = Math.max( start, geometry.drawRange.start );\n\t\t\tcount = Math.min( end, end2 ) - start;\n\n\t\t\tif ( count < 0 ) count = 0;\n\n\t\t}\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (e.g. RGBFormat, RGBAFormat etc)\n\t * @param {Boolean} flipY before writing out the image\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY ) {\n\n\t\tconst writer = this;\n\t\tconst cache = writer.cache;\n\t\tconst json = writer.json;\n\t\tconst options = writer.options;\n\t\tconst pending = writer.pending;\n\n\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\tconst cachedImages = cache.images.get( image );\n\t\tconst mimeType = format === RGBAFormat ? 'image/png' : 'image/jpeg';\n\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\tif ( ! json.images ) json.images = [];\n\n\t\tconst imageDef = { mimeType: mimeType };\n\n\t\tif ( options.embedImages ) {\n\n\t\t\tconst canvas = cachedCanvas = cachedCanvas || document.createElement( 'canvas' );\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d' );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t} else {\n\n\t\t\t\tif ( format !== RGBAFormat && format !== RGBFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGB and RGBA formats are supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tif ( format === RGBAFormat ) {\n\n\t\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, j = 0; i < data.length; i += 4, j += 3 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ j + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ j + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ j + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = 255;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push( new Promise( function ( resolve ) {\n\n\t\t\t\t\tcanvas.toBlob( function ( blob ) {\n\n\t\t\t\t\t\twriter.processBufferViewImage( blob ).then( function ( bufferViewIndex ) {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\t\t\t\t\t\t\tresolve();\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}, mimeType );\n\n\t\t\t\t} ) );\n\n\t\t\t} else {\n\n\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\timageDef.uri = image.src;\n\n\t\t}\n\n\t\tconst index = json.images.push( imageDef ) - 1;\n\t\tcachedImages[ key ] = index;\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tif ( material.metalnessMap === material.roughnessMap ) {\n\n\t\t\t\tconst metalRoughMapDef = { index: this.processTexture( material.metalnessMap ) };\n\t\t\t\tthis.applyTextureTransform( metalRoughMapDef, material.metalnessMap );\n\t\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = { index: this.processTexture( material.map ) };\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\t// note: emissive components are limited to stay within the 0 - 1 range to accommodate glTF spec. see #21849 and #22000.\n\t\t\tconst emissive = material.emissive.clone().multiplyScalar( material.emissiveIntensity );\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 1 ) {\n\n\t\t\t\temissive.multiplyScalar( 1 / maxEmissiveComponent );\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited' );\n\n\t\t\t}\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = { index: this.processTexture( material.normalMap ) };\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== - 1 ) {\n\n\t\t\t\tif ( material.normalScale.x !== material.normalScale.y ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Normal scale components are different, ignoring Y and exporting X.' );\n\n\t\t\t\t}\n\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: 1\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tif ( geometry.isBufferGeometry !== true ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.' );\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv2: 'TEXCOORD_1',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.substr( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n \n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' && attributeName !== 'color' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tlet gltfAttributeName = attributeName.toUpperCase();\n\n if ( nameConversion[ attributeName ] ) {\n\n gltfAttributeName = nameConversion[ attributeName ];\n\n }\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = baseAttribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n if (baseAttribute) {\n \n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n if (baseAttribute.count > j) {\n\n relativeAttribute.setXYZ(\n j,\n attribute.getX( j ) - baseAttribute.getX( j ),\n attribute.getY( j ) - baseAttribute.getY( j ),\n attribute.getZ( j ) - baseAttribute.getZ( j )\n );\n\n }\n\n }\n\n } else {\n\n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n relativeAttribute.setXYZ(\n j,\n 0,\n 0,\n 0\n );\n\n }\n\n }\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array<THREE.Object3D>} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ].clip, options.animations[i].mesh);\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( light.penumbra - 1.0 ) * light.angle * - 1.0;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Specular-Glossiness Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n */\nclass GLTFMaterialsPBRSpecularGlossiness {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_pbrSpecularGlossiness';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isGLTFSpecularGlossinessMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorFactor ) {\n\n\t\t\textensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;\n\n\t\t}\n\n\t\tconst specularFactor = [ 1, 1, 1 ];\n\t\tmaterial.specular.toArray( specularFactor, 0 );\n\t\textensionDef.specularFactor = specularFactor;\n\t\textensionDef.glossinessFactor = material.glossiness;\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorTexture ) {\n\n\t\t\textensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tconst specularMapDef = { index: writer.processTexture( material.specularMap ) };\n\t\t\twriter.applyTextureTransform( specularMapDef, material.specularMap );\n\t\t\textensionDef.specularGlossinessTexture = specularMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\n\nconst Viewport = function () {\n\tthis.nearPlane = 0.168248;\n\tthis.farPlane = 6.82906;\n\tthis.eyePosition = [0.5, -2.86496, 0.5];\n\tthis.targetPosition = [0.5, 0.5, 0.5];\n\tthis.upVector = [ 0.0, 0.0, 1.0];\n\tconst _this = this;\n\n this.setFromObject = ({ nearPlane, farPlane, eyePosition, targetPosition, upVector }) => {\n _this.nearPlane = nearPlane;\n _this.farPlane = farPlane;\n _this.eyePosition = eyePosition;\n _this.targetPosition = targetPosition;\n _this.upVector = upVector;\n }\n\n};\n\nconst CameraControls = function ( object, domElement, renderer, scene ) {\n\tconst MODE = { NONE: -1, DEFAULT: 0, PATH: 1, SMOOTH_CAMERA_TRANSITION: 2, AUTO_TUMBLE: 3, ROTATE_TRANSITION: 4, MINIMAP: 5, SYNC_CONTROL: 6 };\n\tconst STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM: 4, TOUCH_PAN: 5, SCROLL: 6 };\n const ROTATE_DIRECTION = { NONE: -1, FREE: 1, HORIZONTAL: 2, VERTICAL: 3 };\n\tconst CLICK_ACTION = {};\n\tCLICK_ACTION.MAIN = STATE.ROTATE;\n\tCLICK_ACTION.AUXILIARY = STATE.ZOOM;\n\tCLICK_ACTION.SECONDARY = STATE.PAN;\n\tthis.cameraObject = object;\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\tthis.renderer = renderer;\n\tthis.scene = scene ;\n\tthis.tumble_rate = 1.5;\n\tthis.pointer_x = 0;\n\tthis.pointer_y = 0;\n\tthis.pointer_x_start = 0;\n\tthis.pointer_y_start = 0;\n\tthis.previous_pointer_x = 0;\n\tthis.previous_pointer_y = 0;\n\tthis.near_plane_fly_debt = 0.0;\n\tthis.touchZoomDistanceStart = 0;\n\tthis.touchZoomDistanceEnd = 0;\n\tthis.directionalLight = 0;\n\tthis.scrollRate = 50;\n\tlet duration = 6000;\n\tlet inbuildTime = 0;\n\tlet cameraPath = undefined;\n\tlet numberOfCameraPoint = undefined;\n\tlet updateLightWithPathFlag = false;\n\tlet playRate = 500;\n\tlet deviceOrientationControl = undefined;\n\tlet defaultViewport = \"default\";\n\tlet currentMode = MODE.DEFAULT;\n\tlet smoothCameraTransitionObject = undefined;\n\tlet rotateCameraTransitionObject = undefined;\n\tlet cameraAutoTumbleObject = undefined;\n\tlet mouseScroll = 0;\n let rotateMode = ROTATE_DIRECTION.FREE;\n\tthis._state = STATE.NONE;\n\tlet zincRayCaster = undefined;\n\tthis.targetTouchId = -1;\n let rect = undefined;\n const _a = new THREE.Vector3();\n const _b = new THREE.Vector3();\n const _c = new THREE.Vector3();\n const _new_b = new THREE.Vector3();\n const _new_c = new THREE.Vector3();\n const _axis = new THREE.Vector3();\n const _v = new THREE.Vector3();\n const _rel_eye = new THREE.Vector3();\n const sceneSphere = new THREE.Sphere();\n const _tempEye = new THREE.Vector3();\n let ndcControl = undefined;\n let maxDist = 0;\n const viewports = {\n \"default\" : new Viewport()\n };\n viewports.default.nearPlane = 0.1;\n\tviewports.default.farPlane = 2000;\n\tviewports.default.eyePosition = [0, 0, 0];\n\tviewports.default.targetPosition = [0, 0, -1.0];\n\tviewports.default.upVector = [ 0.0, 1.0, 0.0];\n\n //Add the target property\n\tif (this.cameraObject.target === undefined)\n\t\tthis.cameraObject.target = new THREE.Vector3( ...viewports.default.targetPosition );\n\n //Calculate the max distanc allowed, it is the longer\n //of 6 times the radius of the current scene and\n //the current distance between scene centroid and the postion\n //of the camera.\n this.calculateMaxAllowedDistance = (scene) => {\n const box = scene.getBoundingBox();\n if (box) {\n box.getBoundingSphere(sceneSphere);\n maxDist = sceneSphere.radius * 6;\n let currentDist = 0;\n if (this.cameraObject) {\n currentDist = this.cameraObject.position.distanceTo(sceneSphere.center);\n }\n maxDist = currentDist > maxDist ? currentDist : maxDist;\n } else {\n maxDist = 0;\n }\n }\n\n this.addViewport = (viewportName, viewport) => {\n if (viewportName && viewport)\n viewports[viewportName] = viewport;\n }\n\n this.setDefaultViewport = defaultName => {\n\t\tif (defaultName && (defaultName in viewports)) {\n defaultViewport = defaultName;\n }\t\n\t}\n\n this.getDefaultViewport = () => {\n\t\treturn defaultViewport;\n\t}\n\t\n\tthis.getViewportOfName = name => {\n\t\treturn viewports[name];\n\t}\n\n this.setCurrentViewport = name => {\n if (name in viewports) {\n this.setCurrentCameraSettings(viewports[name])\n return true;\n }\n return false;\n\t}\n\n this.setRotationMode = mode => {\n switch (mode) {\n case \"none\":\n rotateMode = ROTATE_DIRECTION.NONE;\n break;\n case \"horizontal\":\n rotateMode = ROTATE_DIRECTION.HORIZONTAL;\n break;\n case \"vertical\":\n rotateMode = ROTATE_DIRECTION.VERTICAL;\n break;\n case \"free\":\n default:\n rotateMode = ROTATE_DIRECTION.FREE;\n }\n }\n\t\n\tthis.onResize = () => {\n\t\tif (rect)\n\t\t\trect = undefined;\n if (ndcControl)\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n\t}\n\t\n\tthis.setMouseButtonAction = (buttonName, actionName) => {\n\t\tCLICK_ACTION[buttonName] = STATE[actionName];\n }\n\n //Make sure the camera does not travel beyond limit\n const checkTravelDistance = () => {\n if (maxDist > 0) {\n const newDist = _tempEye.distanceTo(sceneSphere.center);\n return (maxDist > newDist || \n this.cameraObject.position.distanceTo(sceneSphere.center) > newDist );\n }\n return true;\n }\n \n const translateViewport = translation => {\n _tempEye.copy(this.cameraObject.position).add(translation);\n if (checkTravelDistance()) {\n this.cameraObject.target.add(translation);\n this.cameraObject.position.add(translation);\n this.updateDirectionalLight();\n }\n }\n\t\n\tconst onDocumentMouseDown = event => {\n\t\tif (rect === undefined)\n rect = this.domElement.getBoundingClientRect();\n // Check if mouse event hapens inside the minimap\n let minimapCoordinates = undefined;\n if (currentMode === MODE.DEFAULT)\n minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(\n this.renderer, event);\n if (!minimapCoordinates) {\n if (event.button == 0) {\n if (event.ctrlKey)\n this._state = CLICK_ACTION.AUXILIARY;\n else if (event.shiftKey)\n this._state = CLICK_ACTION.SECONDARY;\n else\n this._state = CLICK_ACTION.MAIN;\n } else if (event.button == 1) {\n event.preventDefault();\n this._state = CLICK_ACTION.AUXILIARY;\n } \n else if (event.button == 2) {\n this._state = CLICK_ACTION.SECONDARY;\n }\n this.pointer_x = event.clientX - rect.left;\n this.pointer_y = event.clientY - rect.top;\n this.pointer_x_start = this.pointer_x;\n this.pointer_y_start = this.pointer_y;\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y= this.pointer_y;\n } else {\n currentMode = MODE.MINIMAP;\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n }\n\n\tconst onDocumentMouseMove = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tthis.pointer_x = event.clientX - rect.left;\n\t\tthis.pointer_y = event.clientY - rect.top;\n if (currentMode === MODE.MINIMAP) {\n let minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(this.renderer, event);\n if (minimapCoordinates) {\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n } else {\n if ((this._state === STATE.NONE) && (zincRayCaster !== undefined)) {\n zincRayCaster.move(this, event.clientX, event.clientY, this.renderer);\n }\n }\n\t}\n\t\n\tconst onDocumentMouseUp = event => {\n this._state = STATE.NONE;\n if (currentMode == MODE.MINIMAP)\n currentMode = MODE.DEFAULT;\n\t\tif (zincRayCaster !== undefined) {\n\t\t\tif (this.pointer_x_start==(event.clientX - rect.left) && this.pointer_y_start==(event.clientY- rect.top)) {\n\t\t\t\tzincRayCaster.pick(this, event.clientX, event.clientY, this.renderer);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentMouseLeave = event => {\n\t\tthis._state = STATE.NONE;\n\t}\n\t\n\tconst onDocumentTouchStart = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis._state = STATE.TOUCH_ROTATE;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.pointer_x_start = this.pointer_x;\n\t\t\tthis.pointer_y_start = this.pointer_y;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\n\t\t} else if (len == 2) {\n\t\t\tthis._state = STATE.TOUCH_ZOOM;\n\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\tthis.touchZoomDistanceEnd = this.touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\t\t} else if (len == 3) {\n\t\t\tthis._state = STATE.TOUCH_PAN;\n\t\t\tthis.targetTouchId = event.touches[0].identifier;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchMove = event => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t} else if (len == 2) {\n\t\t\tif (this._state === STATE.TOUCH_ZOOM) {\n\t\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\t\tthis.touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\t\t\t}\n\t\t} else if (len == 3) {\n\t\t\tif (this._state === STATE.TOUCH_PAN) {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tif (event.touches[i].identifier == this.targetTouchId) {\n\t\t\t\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\t\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchEnd = event => {\n\t\tconst len = event.touches.length;\n\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd = 0;\n\t\tthis.targetTouchId = -1;\n\t\tthis._state = STATE.NONE;\n\t\tif (len == 1) {\n\t\t\tif (zincRayCaster !== undefined) {\n\t\t\t\tif (this.pointer_x_start==(event.touches[0].clientX- rect.left) && this.pointer_y_start==(event.touches[0].clientY- rect.top)) {\n\t\t\t\t\tzincRayCaster.pick(this.cameraObject, event.touches[0].clientX, event.touches[0].clientY, this.renderer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentWheelEvent = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tthis._state = STATE.SCROLL;\n\t\tlet changes = 0;\n\t\tif (event.deltaY > 0)\n\t\t\tchanges = this.scrollRate;\n\t\telse if (event.deltaY < 0)\n\t\t\tchanges = this.scrollRate * -1;\n\t\tmouseScroll = mouseScroll + changes;\n\t\tevent.preventDefault(); \n\t\tevent.stopImmediatePropagation(); \n\t}\t\n\n\tconst translate = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst height = rect.height;\n\t\t\tconst distance = this.cameraObject.position.distanceTo(this.cameraObject.target);\n\t\t\tlet fact = 0.0;\n\t\t\tif ((this.cameraObject.far > this.cameraObject.near) && (distance >= this.cameraObject.near) &&\n\t\t\t\t(distance <= this.cameraObject.far))\n\t\t\t{\n\t\t\t\t fact = (distance-this.cameraObject.near)/(this.cameraObject.far-this.cameraObject.near);\n }\n //_b == old_near, _c = old_far, _new_b = new_near, _new_c = new_far\n\t\t\t_b.set(this.previous_pointer_x,height - this.previous_pointer_y,0.0);\n\t\t\t_c.set(this.previous_pointer_x, height - this.previous_pointer_y,1.0);\n\t\t\t_new_b.set(this.pointer_x,height - this.pointer_y,0.0);\n\t\t\t_new_c.set(this.pointer_x,height - this.pointer_y,1.0);\n\t\t\t_b.unproject(this.cameraObject);\n\t\t\t_c.unproject(this.cameraObject);\n\t\t\t_new_b.unproject(this.cameraObject);\n\t\t\t_new_c.unproject( this.cameraObject);\n const translate_rate = -0.002;\n _new_b.sub(_b).multiplyScalar(1.0-fact);\n _new_c.sub(_c).multiplyScalar(fact);\n _new_b.add(_new_c).multiplyScalar(translate_rate);\n translateViewport(_new_b);\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\n\tthis.getVectorsFromRotateAboutLookAtPoints = (axis, angle) => {\n axis.normalize();\n\t _v.copy(this.cameraObject.position).sub(this.cameraObject.target);\n\t _rel_eye.copy(_v);\n\t _v.normalize()\n\t if (0.8 < Math.abs(_v.dot(axis))) {\n\t _v.copy(this.cameraObject.up);\n }\n _b.crossVectors(axis, _v).normalize();\n _c.crossVectors(axis, _b);\n\t const rel_eyea = axis.dot(_rel_eye);\n\t const rel_eyeb = _b.dot(_rel_eye);\n\t const rel_eyec = _c.dot(_rel_eye);\n\t const upa = axis.dot(this.cameraObject.up); \n\t const upb = _b.dot(this.cameraObject.up);\n\t const upc = _c.dot(this.cameraObject.up);\n\t const cos_angle = Math.cos(angle);\n\t const sin_angle = Math.sin(angle);\n _new_b.set(cos_angle*_b.x+sin_angle*_c.x,\n\t cos_angle*_b.y+sin_angle*_c.y,\n\t cos_angle*_b.z+sin_angle*_c.z);\n\t _new_c.set(cos_angle*_c.x-sin_angle*_b.x,\n\t cos_angle*_c.y-sin_angle*_b.y,\n\t cos_angle*_c.z-sin_angle*_b.z); \n _v.copy(this.cameraObject.target);\n\t _v.x = _v.x + axis.x*rel_eyea + _new_b.x*rel_eyeb+_new_c.x*rel_eyec;\n\t _v.y = _v.y + axis.y*rel_eyea + _new_b.y*rel_eyeb+_new_c.y*rel_eyec;\n\t _v.z = _v.z + axis.z*rel_eyea + _new_b.z*rel_eyeb+_new_c.z*rel_eyec;\n\t _a.set(axis.x*upa+_new_b.x*upb+_new_c.x*upc,\n axis.y*upa+_new_b.y*upb+_new_c.y*upc,\n axis.z*upa+_new_b.z*upb+_new_c.z*upc);\n\t return {position: _v, up: _a};\n\t}\n\t\n\tthis.rotateAboutLookAtpoint = (axis, angle) => {\n\t const returned_values = this.getVectorsFromRotateAboutLookAtPoints(axis, angle);\n\t this.cameraObject.position.copy(returned_values.position);\n\t this.updateDirectionalLight();\n\t this.cameraObject.up.copy(returned_values.up);\n\t}\n\n\tconst tumble = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n\t\t\tconst height = rect.height;\n\t\t\tif ((0<width)&&(0<height))\n\t\t\t{\n\t\t\t\tconst radius=0.25*(width+height);\n\t\t\t\tlet delta_x = 0;\n\t\t\t\tlet delta_y = 0;\n if (rotateMode === ROTATE_DIRECTION.FREE ||\n rotateMode === ROTATE_DIRECTION.HORIZONTAL)\n\t\t\t\t delta_x=this.pointer_x-this.previous_pointer_x;\n if (rotateMode === ROTATE_DIRECTION.FREE ||\n rotateMode === ROTATE_DIRECTION.VERTICAL)\n\t\t\t\t delta_y=this.previous_pointer_y-this.pointer_y;\n\t\t\t\tconst tangent_dist = Math.sqrt(delta_x*delta_x + delta_y*delta_y);\n\t\t\t\tif (tangent_dist > 0)\n\t\t\t\t{\n\t\t\t\t\tconst dx=-delta_y*1.0/tangent_dist;\n\t\t\t\t\tconst dy=delta_x*1.0/tangent_dist;\n let d = 0;\n // Do not allow rotation on other direction around the origin if rotateMode is not free\n if (rotateMode === ROTATE_DIRECTION.FREE) {\n let d=dx*(this.pointer_x-0.5*(width-1))+dy*(0.5*(height-1)-this.pointer_y);\n if (d > radius)\t{\n d = radius;\n }\n else {\n if (d < -radius) {\n d = -radius;\n }\n }\n }\n\t\t\t\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t\t\t\tconst angle=this.tumble_rate*tangent_dist/radius;\n\t\t\t\t\t_a.copy(this.cameraObject.position).sub(this.cameraObject.target).normalize();\n\t\t\t\t\t_b.copy(this.cameraObject.up).normalize();\n _c.copy(_b).cross(_a).normalize().multiplyScalar(dx);\n _b.multiplyScalar(dy);\n _axis.addVectors(_c, _b).multiplyScalar(Math.cos(phi));\n _a.multiplyScalar(Math.sin(phi));\n _axis.add(_a);\n\t\t\t\t\tthis.rotateAboutLookAtpoint(_axis, -angle);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\t\n\tconst calculateZoomDelta = () => {\n\t\tlet delta = 0;\n\t\tif (this._state === STATE.ZOOM)\n\t\t{\n\t\t\tdelta = this.previous_pointer_y-this.pointer_y;\n\t\t} else if (this._state === STATE.SCROLL) {\n\t\t\tdelta = mouseScroll;\n\t\t} else {\n\t\t\tdelta = -1.0 * (this.touchZoomDistanceEnd - this.touchZoomDistanceStart);\n\t\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd;\n\t\t}\n\t\treturn delta;\n }\n\n this.changeZoomByScrollRateUnit = unit => {\n const delta_y = unit * this.scrollRate;\n this.changeZoomByValue(delta_y);\n }\n \n this.changeZoomByValue = delta_y => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n const height = rect.height;\n\n\t\t\tconst a = this.cameraObject.position.clone();\n\t\t\ta.sub(this.cameraObject.target);\n\t\t\tconst dist = a.length();\n\t\t\tconst dy = 1.5 * delta_y/height;\n\t\t\tif ((dist + dy*dist) > 0.01) {\n\t\t\t\ta.normalize()\n _tempEye.copy(this.cameraObject.position);\n\t\t\t\t_tempEye.x += a.x*dy*dist;\n\t\t\t\t_tempEye.y += a.y*dy*dist;\n\t\t\t\t_tempEye.z += a.z*dy*dist;\n if (checkTravelDistance()) {\n this.cameraObject.position.copy(_tempEye);\n this.updateDirectionalLight();\n const near_far_minimum_ratio = 0.00001;\n if ((near_far_minimum_ratio * this.cameraObject.far) <\n (this.cameraObject.near + dy*dist + this.near_plane_fly_debt)) {\n if (this.near_plane_fly_debt != 0.0)\t{\n this.near_plane_fly_debt += dy*dist;\n if (this.near_plane_fly_debt > 0.0) {\n this.cameraObject.near += this.near_plane_fly_debt;\n this.cameraObject.far += this.near_plane_fly_debt;\n this.near_plane_fly_debt = 0.0;\n }\n else {\n this.cameraObject.near += dy*dist;\n this.cameraObject.far += dy*dist;\n }\n }\t\t\t\n }\n else {\n if (this.near_plane_fly_debt == 0.0) {\n const diff = this.cameraObject.near - near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.near = near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.far -= diff;\n this.near_plane_fly_debt -= near_far_minimum_ratio * this.cameraObject.far;\n }\n this.near_plane_fly_debt += dy*dist;\n }\n }\n\t\t\t}\n\t\t}\n }\n\t\n\tconst flyZoom = () => {\n const delta_y = calculateZoomDelta();\n this.changeZoomByValue(delta_y);\n \n\t\tif (this._state === STATE.ZOOM) {\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y = this.pointer_y;\n\t\t}\n\t\tif (this._state === STATE.SCROLL) {\n\t\t\tmouseScroll = 0;\n this._state = STATE.NONE;\n\t\t}\n\t}\n\t\n\tthis.setDirectionalLight = directionalLightIn => {\n\t\tthis.directionalLight = directionalLightIn;\n\t};\n\t\n\tthis.updateDirectionalLight = () => {\n\t\tif (this.directionalLight != 0) {\n\t\t\tthis.directionalLight.position.set(this.cameraObject.position.x,\n\t\t\t\t\tthis.cameraObject.position.y,\n\t\t\t\t\tthis.cameraObject.position.z);\n\t\t}\n\t}\n\t\n\t\n\tthis.enable = function () {\n\t\tenabled = true;\n\t\tif (this.domElement && this.domElement.addEventListener) {\n\t\t\tthis.domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.addEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.addEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.addEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.addEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.addEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.addEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\t\n\tthis.disable = function () {\n\t\tenabled = false;\n\t\tif (this.domElement && this.domElement.removeEventListener) {\n\t\t\tthis.domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.removeEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\n\tthis.loadPath = pathData => {\n\t\tcameraPath = pathData.CameraPath;\n\t\tnumberOfCameraPoint = pathData.NumberOfPoints;\n\t}\n\t\n\tthis.loadPathURL = (path_url, finishCallback) => {\n\t\tconst xmlhttp = new XMLHttpRequest();\n\t\txmlhttp.onreadystatechange = () => {\n\t\t if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n\t\t const pathData = JSON.parse(xmlhttp.responseText);\n\t\t this.loadPath(pathData);\n\t if (finishCallback != undefined && (typeof finishCallback == 'function'))\n\t finishCallback();\n\t\t }\n\t\t}\n\t\trequestURL = resolveURL(path_url);\n\t\txmlhttp.open(\"GET\", requestURL, true);\n\t\txmlhttp.send();\n\t}\n\t\n\tthis.setPathDuration = durationIn => {\n duration = durationIn;\n if (smoothCameraTransitionObject)\n smoothCameraTransitionObject.setDuration(duration);\n if (rotateCameraTransitionObject)\n rotateCameraTransitionObject.setDuration(duration);\n\t}\n\t\n\t this.getPlayRate = () => {\n\t return playRate;\n\t }\n\t\n\tthis.setPlayRate = playRateIn => {\n\t\tplayRate = playRateIn;\n\t}\n\t \n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = targetTime - duration\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\t this.getTime = () => {\n\t return inbuildTime;\n\t }\n\t\n\tthis.setTime = timeIn => {\n\t if (timeIn > duration)\n\t inbuildTime = duration;\n\t else if (timeIn < 0.0)\n\t inbuildTime = 0.0;\n\t else\n\t inbuildTime = timeIn;\n\t}\n\t\n\tthis.getNumberOfTimeFrame = () => {\n\t\treturn numberOfCameraPoint;\n\t}\n\t\n\tthis.getCurrentTimeFrame = () => {\n\t if (numberOfCameraPoint > 2) {\n \t\tconst current_time = inbuildTime/duration * (numberOfCameraPoint - 1);\n \t\tconst bottom_frame = Math.floor(current_time);\n \t\tconst proportion = 1 - (current_time - bottom_frame);\n \t\tconst top_frame = Math.ceil(current_time);\n \t\tif (bottom_frame == top_frame) {\n \t\t\tif (bottom_frame == numberOfCameraPoint - 1) {\n \t\t\t\treturn [bottom_frame - 1, top_frame, 0];\n \t\t\t} else {\n \t\t\t\treturn [bottom_frame, top_frame + 1, 1.0];\n \t\t\t}\n \t\t}\n \t\treturn [bottom_frame, top_frame, proportion];\n\t } else if (numberOfCameraPoint == 1) {\n\t return [0, 0, 0];\n\t }\n\t \n\t return undefined;\n\t}\n\t\n\tthis.setCurrentTimeFrame = targetTimeFrame => {\n\t if (numberOfCameraPoint > 2) {\n \t\tinbuildTime = duration * targetTimeFrame / (numberOfCameraPoint - 1);\n \t\tif (inbuildTime < 0.0)\n \t\t\tinbuildTime = 0.0;\n \t\tif (inbuildTime > duration)\n \t\t\tinbuildTime = duration;\n\t }\n\t}\n\n\tconst updatePath = delta => {\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdateTime(delta);\n\t\t\tif (cameraPath) {\n\t\t\t\tconst time_frame = this.getCurrentTimeFrame();\n\t\t\t\tconst bottom_frame = time_frame[0];\n\t\t\t\tconst top_frame = time_frame[1];\n\t\t\t\tconst proportion = time_frame[2];\n\t\t\t\tconst bot_pos = [cameraPath[bottom_frame*3], cameraPath[bottom_frame*3+1], cameraPath[bottom_frame*3+2]];\n\t\t\t\tconst top_pos = [cameraPath[top_frame*3], cameraPath[top_frame*3+1], cameraPath[top_frame*3+2]];\n\t\t\t\tconst current_positions = [];\n\t\t\t\tfor (let i = 0; i < bot_pos.length; i++) {\n\t\t\t\t\tcurrent_positions.push(proportion * bot_pos[i] + (1.0 - proportion) * top_pos[i]);\n\t\t\t\t}\n\t\t\t\tthis.cameraObject.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\tthis.cameraObject.target.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\tif (deviceOrientationControl)\n\t\t\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t\t\tif (updateLightWithPathFlag) {\n\t\t\t\t\tthis.directionalLight.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\t\tthis.directionalLight.target.position.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t};\n\t\n\tthis.calculatePathNow = () => {\n\t updatePath(0.0);\n\t}\n\n handleSyncControl = () => {\n if ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE)){\n //rotateion does not trigger callback\n tumble();\n } else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN)){\n translate();\n ndcControl.triggerCallback();\n } else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL)){\n ndcControl.zoom(calculateZoomDelta());\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y = this.pointer_y;\n if (this._state === STATE.SCROLL) {\n this._state = STATE.NONE;\n }\n mouseScroll = 0;\n ndcControl.triggerCallback();\n }\n }\n\t\n\tthis.update = timeChanged => {\n\t\tconst delta = timeChanged * playRate;\n\t\tlet controlEnabled = enabled;\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdatePath(delta);\n\t\t} else if (currentMode === MODE.SMOOTH_CAMERA_TRANSITION && smoothCameraTransitionObject) {\n\t\t\tsmoothCameraTransitionObject.update(delta);\n\t\t\tif (smoothCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\tsmoothCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.ROTATE_CAMERA_TRANSITION && rotateCameraTransitionObject) {\n\t\t\trotateCameraTransitionObject.update(delta);\n\t\t\tif (rotateCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\trotateCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject) {\n\t\t\tcameraAutoTumbleObject.update(delta);\n\t\t} else if (currentMode === MODE.SYNC_CONTROL && ndcControl) {\n handleSyncControl();\n controlEnabled = false;\n }\n\t\tif (controlEnabled) {\n\t\t\tif ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE)){\n\t\t\t\ttumble();\n\t\t\t} else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN)){\n\t\t\t\ttranslate();\n\t\t\t} else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL)){\n\t\t\t\tflyZoom();\n\t\t\t}\n\t\t\tif (this._state !== STATE.NONE) {\n\t\t\t\tif (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject &&\n\t\t\t\t\t\tcameraAutoTumbleObject.stopOnCameraInput) {\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._state === STATE.SCROLL)\n\t\t\t\tthis._state = STATE.NONE;\n\t\t}\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.update();\n\t\t\t//this.directionalLight.target.position.set(this.cameraObject.target.x, \n\t\t\t//\tthis.cameraObject.target.y, this.cameraObject.target.z);\n\t\t} else {\n\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t}\n\t};\n\t\n\tthis.playPath = () => {\n\t\tcurrentMode = MODE.PATH;\n\t}\n\t\n\tthis.stopPath = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\t\n\tthis.isPlayingPath = () => {\n\t\treturn (currentMode === MODE.PATH);\n\t}\n\t\n\tthis.enableDirectionalLightUpdateWithPath = flag => {\n\t\tupdateLightWithPathFlag = flag;\n\t}\n\t\n\tthis.enableDeviceOrientation = () => {\n\t\tif (!deviceOrientationControl)\n\t\t\tdeviceOrientationControl = new ModifiedDeviceOrientationControls(this.cameraObject);\n\t}\n\t\n\tthis.disableDeviceOrientation = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.dispose();\n\t\t\tdeviceOrientationControl = undefined;\n\t\t}\n\t}\n\t\n\tthis.isDeviceOrientationEnabled = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tthis.resetView = () => {\n const viewport = viewports[defaultViewport];\n\t\tthis.cameraObject.near = viewport.nearPlane;\n\t\tthis.cameraObject.far = viewport.farPlane;\n\t\tthis.cameraObject.position.set( viewport.eyePosition[0], viewport.eyePosition[1],\n viewport.eyePosition[2]);\n\t\tthis.cameraObject.target.set( viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2] );\n\t\tthis.cameraObject.up.set( viewport.upVector[0], viewport.upVector[1],\n viewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\n\t\n\tthis.setCurrentCameraSettings = newViewport => {\n\t\tif (newViewport.nearPlane)\n\t\t\tthis.cameraObject.near = newViewport.nearPlane;\n\t\tif (newViewport.farPlane)\n\t\t\tthis.cameraObject.far = newViewport.farPlane;\n\t\tif (newViewport.eyePosition)\n\t\t\tthis.cameraObject.position.set( newViewport.eyePosition[0], \n\t\t\t\t\tnewViewport.eyePosition[1], newViewport.eyePosition[2]);\n\t\tif (newViewport.targetPosition)\n\t\t\tthis.cameraObject.target.set( newViewport.targetPosition[0],\n\t\t\t\t\tnewViewport.targetPosition[1], newViewport.targetPosition[2] );\n\t\tif (newViewport.upVector)\n\t\t\tthis.cameraObject.up.set( newViewport.upVector[0], newViewport.upVector[1],\n\t\t\t\t\tnewViewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\t\n\tthis.getViewportFromCentreAndRadius = (centreX, centreY, centreZ, radius, view_angle, clip_distance) => {\n\t\tlet eyex = this.cameraObject.position.x-this.cameraObject.target.x;\n\t\tlet eyey = this.cameraObject.position.y-this.cameraObject.target.y;\n\t\tlet eyez = this.cameraObject.position.z-this.cameraObject.target.z;\n\t\tconst fact = 1.0/Math.sqrt(eyex*eyex+eyey*eyey+eyez*eyez);\n\t\teyex = eyex * fact;\n\t\teyey = eyey * fact;\n\t\teyez = eyez * fact;\n\t\t/* look at the centre of the sphere */\n\t\tconst localTargetPosition = [centreX, centreY, centreZ];\n\t\t/* shift the eye position to achieve the desired view_angle */\n\t\tconst eye_distance = radius/Math.tan(view_angle*Math.PI/360.0);\n\t\tconst localEyePosition = [ centreX + eyex*eye_distance, centreY + eyey*eye_distance,\n\t\t centreZ + eyez*eye_distance];\n\t\tconst localFarPlane = eye_distance+clip_distance;\n\t\tlet localNearPlane = 0.0;\n\t\tconst nearClippingFactor = 0.95;\n\t\tif (clip_distance > nearClippingFactor*eye_distance)\n\t\t{\n\t\t\tlocalNearPlane = (1.0 - nearClippingFactor)*eye_distance;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlocalNearPlane = eye_distance - clip_distance;\n\t\t}\n\t\tconst newViewport = new Viewport();\n\t\tnewViewport.nearPlane = localNearPlane;\n\t\tnewViewport.farPlane = localFarPlane;\n\t\tnewViewport.eyePosition = localEyePosition;\n\t\tnewViewport.targetPosition = localTargetPosition;\n\t\tnewViewport.upVector = [this.cameraObject.up.x, this.cameraObject.up.y,\n\t\t this.cameraObject.up.z];\n\t\t\n\t\treturn newViewport;\n\t}\n\n\tthis.getCurrentViewport = () => {\n\t\tconst currentViewport = new Viewport();\n\t\tcurrentViewport.nearPlane = this.cameraObject.near;\n\t\tcurrentViewport.farPlane = this.cameraObject.far;\n\t\tcurrentViewport.eyePosition[0] = this.cameraObject.position.x;\n\t\tcurrentViewport.eyePosition[1] = this.cameraObject.position.y;\n\t\tcurrentViewport.eyePosition[2] = this.cameraObject.position.z;\n\t\tcurrentViewport.targetPosition[0] = this.cameraObject.target.x;\n\t\tcurrentViewport.targetPosition[1] = this.cameraObject.target.y;\n\t\tcurrentViewport.targetPosition[2] = this.cameraObject.target.z;\n\t\tcurrentViewport.upVector[0] = this.cameraObject.up.x;\n\t\tcurrentViewport.upVector[1] = this.cameraObject.up.y;\n\t\tcurrentViewport.upVector[2] = this.cameraObject.up.z;\n\t\treturn currentViewport;\n\t}\n\t\n\tthis.getDefaultEyePosition = () => {\n\t\treturn eyePosition;\n\t}\n\t\n\tthis.getDefaultTargetPosition = () => {\n\t\treturn targetPosition;\n\t}\n\t\n\tthis.cameraTransition = (startingViewport, endingViewport, durationIn) => {\n\t if (rotateCameraTransitionObject == undefined)\n\t smoothCameraTransitionObject = new SmoothCameraTransition(startingViewport, endingViewport,\n\t this, durationIn);\n\t}\n\t\n\tthis.rotateCameraTransition = (axis, angle, duration) => {\n\t if (smoothCameraTransitionObject == undefined)\n\t rotateCameraTransitionObject = new RotateCameraTransition(axis, angle,\n\t this, duration);\n\t}\n\t\n\tthis.enableCameraTransition = () => {\n\t if (smoothCameraTransitionObject)\n\t currentMode = MODE.SMOOTH_CAMERA_TRANSITION;\n\t if (rotateCameraTransitionObject)\n\t currentMode = MODE.ROTATE_CAMERA_TRANSITION;\n\t}\n\t\n\tthis.pauseCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\t\n\tthis.stopCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tsmoothCameraTransitionObject = undefined;\n\t\trotateCameraTransitionObject = undefined;\n\t}\n\t\n\tthis.isTransitioningCamera = () => {\n\t\treturn (currentMode === MODE.SMOOTH_CAMERA_TRANSITION ||\n\t\t currentMode === MODE.ROTATE_CAMERA_TRANSITION);\n\t}\n \n /* tumble rate is in radians per second */\n\tthis.autoTumble = (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn) => {\n\t\tcameraAutoTumbleObject = new CameraAutoTumble(tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, this);\n\t}\n\t\n\tthis.enableAutoTumble = () => {\n\t\tcurrentMode = MODE.AUTO_TUMBLE;\n\t}\n\t\n\tthis.stopAutoTumble = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tcameraAutoTumbleObject = undefined;\n\t}\n\t\n\tthis.updateAutoTumble = () => {\n\t\tif (cameraAutoTumbleObject)\n\t\t\tcameraAutoTumbleObject.requireUpdate = true;\n\t}\n\t\n\tthis.isAutoTumble = () => {\n\t\treturn (currentMode === MODE.AUTO_TUMBLE);\n\t}\n\t\n this.enableRaycaster = (sceneIn, callbackFunctionIn, hoverCallbackFunctionIn) => {\n if (zincRayCaster == undefined)\n zincRayCaster = new RayCaster(sceneIn, this.scene, callbackFunctionIn, hoverCallbackFunctionIn, this.renderer);\n }\n\n this.disableRaycaster = () => {\n zincRayCaster.disable();\n zincRayCaster = undefined;\n }\n\n this.isSyncControl = () => {\n return currentMpde === MODE.SYNC_CONTROL;\n }\n\n this.enableSyncControl = () => {\n currentMode = MODE.SYNC_CONTROL;\n if (!ndcControl)\n ndcControl = new NDCCameraControl();\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n return ndcControl;\n }\n\n this.disableSyncControl = () => {\n currentMode = MODE.DEFAULT;\n this.cameraObject.zoom = 1;\n this.cameraObject.updateProjectionMatrix();\n }\n\t\n\tthis.enable();\n\n};\n\nconst SmoothCameraTransition = function(startingViewport, endingViewport, targetCameraIn, durationIn) {\n\tconst startingEyePosition = startingViewport.eyePosition;\n\tconst startingTargetPosition = startingViewport.targetPosition;\n\tconst startingUp = startingViewport.upVector;\n\tconst endingEyePosition = endingViewport.eyePosition;\n\tconst endingTargetPosition = endingViewport.targetPosition;\n\tconst endingUp = endingViewport.upVector;\n\tconst targetCamera = targetCameraIn;\n\tlet duration = durationIn;\n\tlet inbuildTime = 0;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tlet completed = false;\n\ttargetCamera.near = Math.min(startingViewport.nearPlane, endingViewport.nearPlane);\n\ttargetCamera.far = Math.max(startingViewport.farPlane, endingViewport.farPlane);\n\ttargetCamera.cameraObject.up.set( endingViewport.upVector[0], endingViewport.upVector[1],\n endingViewport.upVector[2]);\n \n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\t\n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = duration;\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\tconst updateCameraSettings = () => {\n\t\tconst ratio = inbuildTime / duration;\n\t\tconst eyePosition = [startingEyePosition[0] * (1.0 - ratio) + endingEyePosition[0] * ratio,\n\t\t startingEyePosition[1] * (1.0 - ratio) + endingEyePosition[1] * ratio,\n\t\t startingEyePosition[2] * (1.0 - ratio) + endingEyePosition[2] * ratio];\n\t\tconst targetPosition = [startingTargetPosition[0] * (1.0 - ratio) + endingTargetPosition[0] * ratio,\n\t\t startingTargetPosition[1] * (1.0 - ratio) + endingTargetPosition[1] * ratio,\n\t\t startingTargetPosition[2] * (1.0 - ratio) + endingTargetPosition[2] * ratio];\n const upVector = [startingUp[0] * (1.0 - ratio) + endingUp[0] * ratio,\n startingUp[1] * (1.0 - ratio) + endingUp[1] * ratio,\n startingUp[2] * (1.0 - ratio) + endingUp[2] * ratio];\n\t\ttargetCamera.cameraObject.position.set( eyePosition[0], eyePosition[1], eyePosition[2]);\n\t\ttargetCamera.cameraObject.target.set( targetPosition[0], targetPosition[1], targetPosition[2] );\n\t};\n\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tupdateTime(delta);\n\t\t\n\t\tupdateCameraSettings();\n\t\t\n\t\tif (inbuildTime == duration) {\n\t\t\tcompleted = true;\n\t\t}\n\n\t}\n\t\n\tthis.isTransitionCompleted = () => {\n\t\treturn completed;\n\t}\n\t\n};\n\nconst RotateCameraTransition = function(axisIn, angleIn, targetCameraIn, durationIn) {\n const axis = axisIn;\n const angle = angleIn;\n const targetCamera = targetCameraIn;\n let duration = durationIn;\n let inbuildTime = 0;\n const enabled = true;\n const ratio = inbuildTime / duration;\n let completed = false;\n\n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\n const updateCameraSettings = delta => {\n const previousTime = inbuildTime;\n let targetTime = inbuildTime + delta;\n if (targetTime > duration)\n targetTime = duration;\n inbuildTime = targetTime;\n const actualDelta = inbuildTime - previousTime;\n const ratio = actualDelta / duration;\n const alpha = ratio * angle;\n targetCamera.rotateAboutLookAtpoint(axis, alpha);\n };\n \n this.update = delta => {\n\n if ( this.enabled === false ) return;\n \n updateCameraSettings(delta);\n \n if (inbuildTime == duration) {\n completed = true;\n }\n\n }\n \n this.isTransitionCompleted = () => {\n return completed;\n }\n}\n\nconst RayCaster = function (sceneIn, hostSceneIn, callbackFunctionIn, hoverCallbackFunctionIn, rendererIn) {\n const scene = sceneIn;\n const hostScene = hostSceneIn;\n\tconst renderer = rendererIn;\n\tconst callbackFunction = callbackFunctionIn;\n\tconst hoverCallbackFunction = hoverCallbackFunctionIn;\n\tconst enabled = true;\n\tconst raycaster = new THREE.Raycaster();\n\traycaster.params.Line.threshold = 0.1;\n\traycaster.params.Points.threshold = 0.1;\n const mouse = new THREE.Vector2();\n let lastHovered = undefined;\n let cooldown = false;\n\t\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\t\n\tconst getIntersectsObject = (zincCamera, x, y) => {\n\t\tconst rect = zincCamera.domElement.getBoundingClientRect();\n\t\tmouse.x = ((x - rect.left) / rect.width) * 2 - 1;\n mouse.y = -((y - rect.top) / rect.height) * 2 + 1;\n if (hostScene !== scene) {\n const threejsScene = scene.getThreeJSScene();\n renderer.render(threejsScene, zincCamera.cameraObject);\n }\n raycaster.setFromCamera( mouse, zincCamera.cameraObject);\n let objects = scene.getPickableThreeJSObjects();\n\t\treturn raycaster.intersectObjects( objects, true );\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tconst intersects = getIntersectsObject(zincCamera, x, y);\n\t\t\tcallbackFunction(intersects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n const intersects = getIntersectsObject(zincCamera, x, y);\n lastHovered = new Date();\n hoverCallbackFunction(intersects, x, y);\n }\n }\n\t\n\tthis.move = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n if (scene.displayMarkers) {\n hovered(zincCamera, x, y);\n } else {\n if (!cooldown) {\n let now = new Date();\n if (!lastHovered || ( (now.getTime() - lastHovered.getTime()) > 250)) {\n hovered(zincCamera, x, y);\n } else {\n cooldown = true;\n setTimeout(awaitMove(zincCamera, x, y), 250);\n }\n }\n }\n }\n }\n \n let awaitMove = (zincCamera,x,y) => {\n return function() {\n cooldown = false;\n hovered(zincCamera, x, y);\n }\n }\n};\n\nconst CameraAutoTumble = function (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, targetCameraIn) {\n\tconst tumbleAxis = new THREE.Vector3();\n\tconst angle = -tumbleRateIn;\n\tconst targetCamera = targetCameraIn;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tconst tumbleDirection = tumbleDirectionIn;\n\tthis.stopOnCameraInput = stopOnCameraInputIn;\n this.requireUpdate = true;\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n\t\n\tconst computeTumbleAxisAngle = tumbleDirection => {\n\t\tconst tangent_dist = Math.sqrt(tumbleDirection[0]*tumbleDirection[0] +\n\t\t\ttumbleDirection[1]*tumbleDirection[1]);\n\t\tconst width = Math.abs(tumbleDirection[0]) * 4.0;\n\t\tconst height = Math.abs(tumbleDirection[1]) * 4.0;\n\t\tconst radius = 0.25 * (width + height);\n\t\tconst dx = -tumbleDirection[1]/tangent_dist;\n\t\tconst dy = tumbleDirection[0]/tangent_dist;\n\t\tlet d = dx*(tumbleDirection[0])+dy*(-tumbleDirection[1]);\n\t\t\n\t\tif (d > radius)\n\t\t{\n\t\t\td = radius;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (d < -radius)\n\t\t\t{\n\t\t\t\td = -radius;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t/* get axis to rotate about */\n\t\ttumbleAxis.copy(targetCamera.cameraObject.position).sub(\n targetCamera.cameraObject.target).normalize();\n\t\tb.copy(targetCamera.cameraObject.up).normalize();\n c.crossVectors(b, tumbleAxis).normalize().multiplyScalar(dx);\n b.multiplyScalar(dy);\n b.add(c).multiplyScalar(Math.cos(phi));\n tumbleAxis.multiplyScalar(Math.sin(phi)).add(b);\n\t};\n\t\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tif (this.requireUpdate) {\n\t\t\tcomputeTumbleAxisAngle(tumbleDirection);\n\t\t\tthis.requireUpdate = false;\n\t\t}\n\t\ttargetCamera.rotateAboutLookAtpoint(tumbleAxis, angle * delta/1000);\n\n\t}\n\t\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\nStereoCameraZoomFixed = function () {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.cameraL = new THREE.PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new THREE.PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n};\n\nObject.assign( StereoCameraZoomFixed.prototype, {\n\n\tupdate: (() => {\n\n\t\tlet focus, fov, aspect, near, far, zoom;\n\n\t\tconst eyeRight = new THREE.Matrix4();\n\t\tconst eyeLeft = new THREE.Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tconst needsUpdate = focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tconst eyeSep = 0.064 / 2;\n\t\t\t\tconst eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tconst ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ) / camera.zoom;\n\t\t\t\tlet xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t})()\n\n} );\n\n/** the following StereoEffect is written by third party */\n/**\n * @author alteredq / http://alteredqualia.com/\n * @authod mrdoob / http://mrdoob.com/\n * @authod arodic / http://aleksandarrodic.com/\n * @authod fonserbc / http://fonserbc.github.io/\n*/\nconst StereoEffect = function ( renderer ) {\n\n\tconst _stereo = new StereoCameraZoomFixed();\n\t_stereo.aspect = 0.5;\n\n\tthis.setSize = (width, height) => {\n\n\t\trenderer.setSize( width, height );\n\n\t};\n\n\tthis.render = (scene, camera) => {\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t_stereo.update( camera );\n\n\t\tconst size = renderer.getSize();\n\n\t\trenderer.setScissorTest( true );\n\t\trenderer.clear();\n\n\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\trenderer.setScissorTest( false );\n\n\t};\n\n};\n\n\n/**\n * @author richt / http://richt.me\n * @author WestLangley / http://github.com/WestLangley\n *\n * W3C Device Orientation control (http://w3c.github.io/deviceorientation/spec-source-orientation.html)\n */\n\nModifiedDeviceOrientationControls = function ( object ) {\n\n\tconst scope = this;\n\n\tthis.object = object; \n\tthis.object.rotation.reorder( \"YXZ\" );\n\n\tthis.enabled = true;\n\n\tthis.deviceOrientation = {};\n\tthis.screenOrientation = 0;\n\n\tconst onDeviceOrientationChangeEvent = event => {\n\n\t\tscope.deviceOrientation = event;\n\n\t};\n\n\tconst onScreenOrientationChangeEvent = () => {\n\t if (typeof(window) !== 'undefined')\n\t scope.screenOrientation = window.orientation || 0;\n\n\t};\n\n\t// The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n\n\tconst setObjectQuaternion = (() => {\n\n\t\tconst zee = new THREE.Vector3( 0, 0, 1 );\n\n\t\tconst euler = new THREE.Euler();\n\n\t\tconst q0 = new THREE.Quaternion();\n\n\t\tconst q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis\n\n\t\treturn (cameraObject, alpha, beta, gamma, orient) => {\n\t\t\t\n\t\t\tconst vector = new THREE.Vector3(0, 0, 1);\n\t\t\t\n\t\t\tvector.subVectors(cameraObject.target, cameraObject.position);\n\n\t\t\teuler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us\n\n\t\t\tconst quaternion = new THREE.Quaternion();\n\t\t\t\n\t\t\tquaternion.setFromEuler( euler ); // orient the device\n\n\t\t\tquaternion.multiply( q1 ); // camera looks out the back of the device, not the top\n\n\t\t\tquaternion.multiply( q0.setFromAxisAngle( zee, - orient ) ); // adjust for screen orientation\n\t\t\t\n\t\t\tvector.applyQuaternion(quaternion);\n\t\t\t\t\n\t\t\tvector.addVectors(cameraObject.position, vector);\n\t\t\t\n\t\t\tcameraObject.lookAt(vector);\n\n\t\t};\n\n\t})();\n\n\tthis.connect = () => {\n\n\t\tonScreenOrientationChangeEvent(); // run once on load\n\t\tif (typeof(window) !== 'undefined') {\n\t\t window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t\t}\n\t\tscope.enabled = true;\n\n\t};\n\n\tthis.disconnect = () => {\n\t if (typeof(window) !== 'undefined') {\n\t window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t }\n\t\tscope.enabled = false;\n\n\t};\n\n\tthis.update = () => {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tconst alpha = scope.deviceOrientation.alpha ? THREE.Math.degToRad( scope.deviceOrientation.alpha ) : 0; // Z\n\t\tconst beta = scope.deviceOrientation.beta ? THREE.Math.degToRad( scope.deviceOrientation.beta ) : 0; // X'\n\t\tconst gamma = scope.deviceOrientation.gamma ? THREE.Math.degToRad( scope.deviceOrientation.gamma ) : 0; // Y''\n\t\tconst orient = scope.screenOrientation ? THREE.Math.degToRad( scope.screenOrientation ) : 0; // O\n\n\t\tsetObjectQuaternion( scope.object, alpha, beta, gamma, orient );\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tthis.disconnect();\n\n\t};\n\n\tthis.connect();\n\n};\n\nconst NDCCameraControl = function () {\n\tlet camera = undefined;\n let targetCamera = undefined;\n let defaultViewport = undefined;\n const position = new THREE.Vector3();\n const target = new THREE.Vector3();\n const v1 = new THREE.Vector3();\n const v2 = new THREE.Vector3();\n let eventCallback = undefined;\n\n this.setCurrentCameraSettings = (cameraIn, defaultViewportIn) => {\n camera = cameraIn.clone();\n targetCamera = cameraIn;\n defaultViewport = defaultViewportIn;\n camera.near = defaultViewport.nearPlane;\n if (defaultViewport.farPlane)\n camera.far = defaultViewport.farPlane;\n if (defaultViewport.eyePosition)\n camera.position.set(defaultViewport.eyePosition[0],\n defaultViewport.eyePosition[1], defaultViewport.eyePosition[2]);\n if (defaultViewport.upVector)\n camera.up.set(defaultViewport.upVector[0], defaultViewport.upVector[1],\n defaultViewport.upVector[2]);\n if (defaultViewport.targetPosition) {\n camera.target = new THREE.Vector3(defaultViewport.targetPosition[0],\n defaultViewport.targetPosition[1], defaultViewport.targetPosition[2]);\n camera.lookAt(camera.target);\n }\n camera.updateProjectionMatrix();\n position.copy(camera.position).project(camera);\n target.copy(camera.target).project(camera);\n }\n\t\n this.getCurrentPosition = () => {\n target.copy(targetCamera.target).project(camera);\n return [target.x, target.y];\n }\n\n this.zoom = delta => {\n let scaledDelta = delta * 0.002;\n let zoom = Math.max(targetCamera.zoom - scaledDelta, 1.0);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.zoomToBox = (box, zoom) => {\n box.getCenter(v1);\n v1.project(camera);\n this.setCenterZoom([v1.x, v1.y], zoom);\n }\n\t \n //return top left and size\n this.getPanZoom = () => {\n return {target: this.getCurrentPosition(), zoom: targetCamera.zoom };\n }\n\n this.setCenterZoom = (center, zoom) => {\n v1.set(center[0], center[1], target.z).unproject(camera);\n v2.copy(v1).sub(targetCamera.target);\n targetCamera.target.copy(v1);\n targetCamera.lookAt(targetCamera.target);\n targetCamera.position.add(v2);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.setEventCallback = (callback) => {\n if (callback === undefined || (typeof callback == 'function'))\n eventCallback = callback;\n }\n\n this.triggerCallback = () => {\n if (eventCallback !== undefined && (typeof eventCallback == 'function'))\n eventCallback();\n }\n};\n\nexports.Viewport = Viewport\nexports.CameraControls = CameraControls\nexports.SmoothCameraTransition = SmoothCameraTransition\nexports.RotateCameraTransition = RotateCameraTransition\nexports.RayCaster = RayCaster\nexports.CameraAutoTumble = CameraAutoTumble\nexports.StereoEffect = StereoEffect\nexports.NDCCameraControl = NDCCameraControl\n","const { Group, Matrix4 } = require('three');\n\nlet Region = function (parentIn) {\n let parent = parentIn;\n let group = new Group();\n group.matrixAutoUpdate = false;\n group.userData = this;\n let children = [];\n let name = \"\";\n let zincObjects = [];\n const tMatrix = new Matrix4();\n let duration = 3000;\n tMatrix.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 ,0, 1);\n\n this.hideAllChildren = () => {\n children.forEach(child => child.hideAllChildren());\n zincObjects.forEach(zincObject => zincObject.setVisibility(false));\n }\n\n /***\n * Set the visibility and propagate it up and down the hierarchies\n * depending on the flag\n */\n this.setVisibility = (flag) => {\n group.visible = flag;\n }\n\n this.getVisibility = () => {\n return group.visible;\n }\n\n this.getGroup = () => {\n return group;\n }\n\n this.setTransformation = transformation => {\n tMatrix.set(...transformation);\n group.matrix.copy(tMatrix);\n group.updateMatrixWorld();\n }\n\n this.setName = (nameIn) => {\n if (nameIn && nameIn !== \"\") {\n name = nameIn;\n }\n }\n\n this.getName = () => {\n return name;\n }\n\n this.getParent = () => {\n return parent;\n }\n\n //This function returns the full path until it reaches the root\n this.getFullSeparatedPath = () => {\n const paths = [];\n if (name !== \"\") {\n paths.push(name);\n for (let p = parent; p !== undefined;) {\n const parentName = p.getName();\n if (parentName !== \"\") {\n paths.unshift(parentName);\n }\n p = p.getParent();\n }\n }\n return paths;\n }\n\n //This function returns the full path until it reaches the root\n this.getFullPath = () => {\n const paths = this.getFullSeparatedPath();\n if (paths.length > 0) {\n let fullPath = paths.shift();\n paths.forEach(path => {\n fullPath = fullPath.concat(\"/\", path);\n });\n return fullPath;\n }\n return \"\";\n }\n\n this.createChild = (nameIn) => {\n let childRegion = new Region(this);\n childRegion.setName(nameIn);\n children.push(childRegion);\n group.add(childRegion.getGroup());\n return childRegion;\n }\n\n this.getChildWithName = childName => {\n if (childName) {\n for (let i = 0; i < children.length; i++) {\n if (children[i].getName() === childName)\n return children[i];\n }\n }\n return undefined;\n }\n\n this.findChildFromSeparatedPath = pathArray => {\n if (pathArray && pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray && pathArray.length > 0) {\n const childRegion = this.getChildWithName(pathArray[0]);\n if (childRegion) {\n pathArray.shift();\n return childRegion.findChildFromSeparatedPath(pathArray);\n } else {\n return undefined;\n }\n }\n return this;\n }\n\n this.findChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.findChildFromSeparatedPath(pathArray);\n }\n\n this.createChildFromSeparatedPath = pathArray => {\n if (pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray.length > 0) {\n let childRegion = this.getChildWithName(pathArray[0]);\n if (!childRegion) {\n childRegion = this.createChild(pathArray[0]);\n }\n pathArray.shift();\n return childRegion.createChildFromSeparatedPath(pathArray);\n }\n return this;\n }\n\n this.createChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.createChildFromSeparatedPath(pathArray);\n }\n\n this.findOrCreateChildFromPath = (path) => {\n let childRegion = this.findChildFromPath(path);\n if (!childRegion) {\n childRegion = this.createChildFromPath(path);\n }\n return childRegion;\n }\n\n this.addZincObject = zincObject => {\n if (zincObject) {\n zincObject.setRegion(this);\n group.add(zincObject.morph);\n zincObjects.push(zincObject);\n }\n }\n\n /**\n * Remove a ZincObject from this region if it presents. This will eventually\n * destroy the object and free up the memory.\n * @param {Zinc.Object} zincObject - object to be removed from this region.\n */\n this.removeZincObject = zincObject => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n group.remove(zincObject.morph);\n zincObjects.splice(i, 1);\n zincObject.dispose();\n return;\n }\n }\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = (objectsList, pickMarkers, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.morph && (zincObject.morph.visible === true)) {\n if (pickMarkers) {\n let marker = zincObject.marker;\n if (marker && marker.isEnabled()) {\n objectsList.push(marker.morph);\n }\n } else {\n objectsList.push(zincObject.morph);\n }\n }\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.getPickableThreeJSObjects(objectsList, pickMarkers,\n transverse);\n });\n }\n return objectsList;\n }\n\n /**\n * Set the default duration value for all zinc objects\n * that are to be loaded into this region.\n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n duration = durationIn;\n zincObjects.forEach(zincObject => zincObject.setDuration(durationIn));\n children.forEach(childRegion => childRegion.setDuration(durationIn));\n }\n\n /**\n * Get the default duration value.\n * returns {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Get the bounding box of all the object in this and child regions only.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = transverse => {\n let boundingBox1 = undefined, boundingBox2 = undefined;\n zincObjects.forEach(zincObject => {\n boundingBox2 = zincObject.getBoundingBox();\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n if (boundingBox1)\n boundingBox1.applyMatrix4(group.matrixWorld);\n if (transverse) {\n children.forEach(childRegion => {\n boundingBox2 = childRegion.getBoundingBox(transverse);\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n }\n return boundingBox1;\n }\n\n this.clear = transverse => {\n if (transverse) {\n children.forEach(childRegion => childRegion.clear(transverse));\n }\n zincObjects.forEach(zincObject => {\n group.remove(zincObject.morph);\n zincObject.dispose();\n });\n children = [];\n zincObjects = [];\n }\n\n this.objectIsInRegion = (zincObject, transverse) => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n return true;\n }\n }\n if (transverse) {\n for (let i = 0; i < children.length; i++) {\n if (children[i].objectIsInRegion())\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n */\n this.forEachGeometry = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGeometry)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGeometry(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n */\n this.forEachGlyphset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGlyphset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGlyphset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n */\n this.forEachPointset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isPointset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachPointset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n */\n this.forEachLine = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isLines)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachLine(\n callbackFunction, transverse));\n }\n\n this.findObjectsWithAnatomicalId = (anatomicalId, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.anatomicalId === anatomicalId)\n \t objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithAnatomicalId(anatomicalId, transverse);\n objectsArray.push(...childObjects);\n });\n }\n\n return objectsArray;\n }\n\n /** \n * Find and return all zinc objects in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = (groupName, transverse) => {\n const objectsArray = [];\n zincObjects.forEach(zincObject => {\n if (zincObject.groupName === groupName)\n \t objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithGroupName(groupName, transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Find and return all geometries in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const geometriesArray = primitivesArray.filter(primitive => primitive.isGeometry);\n return geometriesArray;\n }\n\n /** \n * Find and return all pointsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const pointsetsArray = primitivesArray.filter(primitive => primitive.isPointset);\n return pointsetsArray;\n }\n\n /** \n * Find and return all glyphsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const glyphsetsArray = primitivesArray.filter(primitive => primitive.isGlyphset);\n return glyphsetsArray;\n }\n\n /** \n * Find and return all lines in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.findLinesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const linesArray = primitivesArray.filter(primitive => primitive.isLines);\n return linesArray;\n }\n\n /** \n * Find and return all lines in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @returns {Array}\n */\n this.getAllObjects = transverse => {\n const objectsArray = [...zincObjects];\n children.forEach(childRegion => {\n let childObjects = childRegion.getAllObjects(transverse);\n objectsArray.push(...childObjects);\n });\n return objectsArray;\n }\n\n /**\n * Get the current time of the region.\n * Return -1 if no graphics in the region.\n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (zincObjects[0] != undefined) {\n return zincObjects[0].getCurrentTime();\n } else {\n for (let i = 0; i < children.length; i++) {\n const time = children[i].getCurrentTime();\n if (time !== -1)\n return time;\n }\n }\n return -1;\n }\n\n /**\n * Set the current time of all the objects of this region.\n * @param {Number} time - Value to set the time to.\n */\n this.setMorphTime = (time, transverse) => {\n zincObjects.forEach(zincObject => {\n zincObject.setMorphTime(time);\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.setMorphTime(time);\n });\n }\n }\n\n /**\n * Check if any object in this region is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isTimeVarying()) {\n return true;\n }\n }\n for (let i = 0; i < children.length; i++) {\n if (children[i].isTimeVarying()) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation, options, transverse) => {\n // Let video dictates the progress if one is present\n const allObjects = this.getAllObjects(transverse);\n allObjects.forEach(zincObject => {\n zincObject.render(playRate * delta, playAnimation, options);\n });\n //process markers visibility and size\n if (options && options.displayMarkers && (playAnimation === false)) {\n if (options.markerDepths.length > 0) {\n const min = Math.min(...options.markerDepths);\n const max = Math.max(...options.markerDepths);\n allObjects.forEach(zincObject => {\n zincObject.processMarkerVisual(min, max, options);\n });\n }\n }\n }\n}\n\nexports.Region = Region;\n","const THREE = require('three');\n\nexports.Minimap = function (sceneIn) {\n let targetScene = sceneIn;\n this.camera = new THREE.OrthographicCamera(\n -0.5, 0.5, 0.5, -0.5, 0.01, 10);\n this.helper = undefined;\n let geometry = new THREE.BufferGeometry();\n var vertices = new Float32Array( [\n -1.0, -1.0, 1.0,\n 1.0, -1.0, 1.0,\n 1.0, 1.0, 1.0,\n 1.0, 1.0, 1.0,\n -1.0, 1.0, 1.0,\n -1.0, -1.0, 1.0\n ] );\n let positionAttributes = new THREE.BufferAttribute( vertices, 3 );\n geometry.setAttribute( 'position', positionAttributes);\n var material = new THREE.MeshBasicMaterial( { color: 0x333333, \n depthTest: false,\n depthWrite: false,\n opacity: 0.5,\n transparent: true } );\n this.mask = new THREE.Mesh( geometry, material );\n let _box = new THREE.Box3();\n let _center = new THREE.Vector3();\n\n this.getDiffFromNormalised = (x, y) => {\n _box.setFromBufferAttribute(positionAttributes).getCenter(_center);\n let coord = _center.clone().project(this.camera);\n let new_coord = new THREE.Vector3(x, y, coord.z).unproject(this.camera);\n return new_coord.sub(_center);\n }\n\n let setCurrentCameraSettings = (diameter, newViewport) => {\n if (targetScene.camera.near)\n this.camera.near = targetScene.camera.near;\n if (newViewport.farPlane)\n this.camera.far = newViewport.farPlane;\n if (newViewport.eyePosition)\n this.camera.position.set(newViewport.eyePosition[0],\n newViewport.eyePosition[1], newViewport.eyePosition[2]);\n if (newViewport.upVector)\n this.camera.up.set(newViewport.upVector[0], newViewport.upVector[1],\n newViewport.upVector[2]);\n if (newViewport.targetPosition)\n this.camera.lookAt(new THREE.Vector3(newViewport.targetPosition[0],\n newViewport.targetPosition[1], newViewport.targetPosition[2]));\n this.camera.zoom = 1 / diameter;\n this.camera.updateProjectionMatrix();\n }\n\n this.getBoundary = () => {\n let target = new THREE.Vector3().copy(\n targetScene.camera.target).project(targetScene.camera);\n let v1 = new THREE.Vector3(-1, -1, target.z).unproject(targetScene.camera);\n let v2 = new THREE.Vector3(1, -1, target.z).unproject(targetScene.camera);\n let v3 = new THREE.Vector3(1, 1, target.z).unproject(targetScene.camera);\n let v4 = new THREE.Vector3(-1, 1, target.z).unproject(targetScene.camera);\n let array = [v1, v2, v3, v3, v4, v1];\n positionAttributes.copyVector3sArray(array);\n positionAttributes.needsUpdate = true;\n }\n\n this.updateCamera = () => {\n this.getBoundary();\n let cameraControl = targetScene.getZincCameraControls();\n let boundingBox = targetScene.getBoundingBox();\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const diameter = boundingBox.min.distanceTo(boundingBox.max);\n const radius = diameter / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = cameraControl.getViewportFromCentreAndRadius(\n centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n setCurrentCameraSettings(diameter, viewport);\n }\n }\n}\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Geometry = require('./primitives/geometry').Geometry;\nconst work = require('webworkify-webpack');\nconst Promise = require('promise-polyfill').default;\n//const work = undefined;\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nconst GeometryCSG = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n\thost = hostIn;\n let core = undefined;\n let worker = undefined;\n let onProgress = false;\n let myResolve = undefined;\n \n var createGeometryFromJSON = json => {\n\t \tconst material = host.morph.material.clone();\n\t \tmaterial.morphTargets = false;\n\t const newGeometry = new Geometry();\n\t\tconst JSONParser = new JSONLoader();\n\t\tconst geometry = JSONParser.parse(json);\n const mesh = new THREE.Mesh(geometry.geometry, material);\n\t newGeometry.geometry = mesh.geometry;\n\t newGeometry.morph = mesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n var workerEventHandler = ev => {\n\t switch (ev.data.action) {\n\t \tcase 'message':\n\t console.log(ev.data.message);\n\t break;\n\t \tcase 'result':\n\t \tconst csg = new GeometryCSG(createGeometryFromJSON(ev.data.object));\n\t \tif (myResolve)\n\t \t\tmyResolve(csg);\n\t \tmyResolve = undefined;\n\t \tonProgress = false;\n\t break;\n\t \tdefault:\n\t \tthrow 'Cannot handle specified action.';\n }\n }\n \n var initialise = hostIn => {\n\t if (work !== undefined) {\n\t\tworker = work(require.resolve('./workers/geometryCSG.worker.js'));\n\t }\n\t if (!worker) {\n\t core = new (require('./workers/geometryCSGInternal').GeometryCSGInternal)(hostIn);\n\t } else {\n\t\tif (hostIn && hostIn.isGeometry) {\n\t\t let mesh = hostIn.morph;\n\t\t let json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t worker.addEventListener('message', function (ev) {\n\t\t\t workerEventHandler(ev);\n\t\t });\n\t\t worker.postMessage({action: \"initialise\", object: json});\n\t\t}\n\t }\n }\n \n this.getHostGeometry = () => {\n\tconst tempCSG = new ThreeBSP(host.morph);\n return new createZincGeometry(tempCSG);\n }\n \n this.getGeometry = () => host;\n \n const createZincGeometry = csgMesh => {\n\t\tconst material = host.morph.material.clone();\n\t\tmaterial.morphTargets = false;\n\t\tconst newMesh = csgMesh.toMesh(material);\n\t const newGeometry = new Geometry();\n\t newGeometry.geometry = newMesh.geometry;\n\t newGeometry.morph = newMesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n this.setCSG = CSG => {\n\t core.setCSG(CSG);\n } \n \n const sendToWork = (guestGeometry, action, resolve, reject) => {\n\t if (!onProgress) {\n\t\t let mesh = guestGeometry.morph;\n\t\t const json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t myResolve = resolve;\n\t\t onProgress = true;\n\t\t worker.postMessage({action: action, object: json});\n\t } else {\n\t\t reject(\"On progress\");\n\t }\n }\n \n this.intersect = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.intersect(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n\t};\n \n this.subtract = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.subtract(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.union = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.union(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.terminateWorker = () => {\n\t if (worker)\n\t\t worker.terminate();\n }\n \n initialise(hostIn);\n};\n\nexports.GeometryCSG = GeometryCSG;\n","'use strict';\n\t\n\tvar ThreeBSP,\n\t\tEPSILON = 1e-5,\n\t\tCOPLANAR = 0,\n\t\tFRONT = 1,\n\t\tBACK = 2,\n\t\tSPANNING = 3;\n\t\n module.exports = function( THREE ) {\n var ThreeBSP = function( geometry ) {\n // Convert THREE.Geometry to ThreeBSP\n var i, _length_i,\n face, vertex, faceVertexUvs, uvs,\n polygon,\n polygons = [],\n tree;\n \n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n if ( geometry instanceof THREE.Geometry ) {\n this.matrix = new THREE.Matrix4;\n } else if ( geometry.isMesh ) {\n // #todo: add hierarchy support\n geometry.updateMatrix();\n this.matrix = geometry.matrix.clone();\n geometry = geometry.geometry;\n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n geometry.mergeVertices();\n geometry.computeVertexNormals(false);\n } else if ( geometry instanceof ThreeBSP.Node ) {\n this.tree = geometry;\n this.matrix = new THREE.Matrix4;\n return this;\n } else {\n throw 'ThreeBSP: Given geometry is unsupported';\n }\n \n for ( i = 0, _length_i = geometry.faces.length; i < _length_i; i++ ) {\n face = geometry.faces[i];\n faceVertexUvs = geometry.faceVertexUvs[0][i];\n polygon = new ThreeBSP.Polygon;\n \n if ( face instanceof THREE.Face3 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else if ( typeof THREE.Face4 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[1], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.d ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[3].x, faceVertexUvs[3].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[3], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else {\n throw 'Invalid face type at index ' + i;\n }\n \n polygon.calculateProperties();\n polygons.push( polygon );\n };\n \n this.tree = new ThreeBSP.Node( polygons );\n };\n ThreeBSP.prototype.subtract = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.union = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.intersect = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n b.clipTo( a );\n b.invert();\n a.clipTo( b );\n b.clipTo( a );\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.toGeometry = function() {\n var i, j,\n matrix = new THREE.Matrix4().getInverse( this.matrix ),\n geometry = new THREE.Geometry(),\n polygons = this.tree.allPolygons(),\n polygon_count = polygons.length,\n polygon, polygon_vertice_count,\n vertice_dict = {},\n vertex_idx_a, vertex_idx_b, vertex_idx_c,\n vertex, face,\n verticeUvs;\n \n for ( i = 0; i < polygon_count; i++ ) {\n polygon = polygons[i];\n polygon_vertice_count = polygon.vertices.length;\n \n for ( j = 2; j < polygon_vertice_count; j++ ) {\n verticeUvs = [];\n \n vertex = polygon.vertices[0];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n \n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j-1];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n face = new THREE.Face3(\n vertex_idx_a,\n vertex_idx_b,\n vertex_idx_c,\n new THREE.Vector3( polygon.normal.x, polygon.normal.y, polygon.normal.z )\n );\n \n geometry.faces.push( face );\n geometry.faceVertexUvs[0].push( verticeUvs );\n }\n \n }\n return geometry;\n };\n ThreeBSP.prototype.toBufferGeometry = function( ) {\n var geometry = this.toGeometry();\n var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);\n\n return bufferGeometry;\n };\n ThreeBSP.prototype.toMesh = function( material ) {\n var geometry = this.toBufferGeometry(),\n mesh = new THREE.Mesh( geometry, material );\n \n mesh.position.setFromMatrixPosition( this.matrix );\n mesh.rotation.setFromRotationMatrix( this.matrix );\n \n return mesh;\n };\n \n \n ThreeBSP.Polygon = function( vertices, normal, w ) {\n if ( !( vertices instanceof Array ) ) {\n vertices = [];\n }\n \n this.vertices = vertices;\n if ( vertices.length > 0 ) {\n this.calculateProperties();\n } else {\n this.normal = this.w = undefined;\n }\n };\n ThreeBSP.Polygon.prototype.calculateProperties = function() {\n var a = this.vertices[0],\n b = this.vertices[1],\n c = this.vertices[2];\n \n this.normal = b.clone().subtract( a ).cross(\n c.clone().subtract( a )\n ).normalize();\n \n this.w = this.normal.clone().dot( a );\n \n return this;\n };\n ThreeBSP.Polygon.prototype.clone = function() {\n var i, vertice_count,\n polygon = new ThreeBSP.Polygon;\n \n for ( i = 0, vertice_count = this.vertices.length; i < vertice_count; i++ ) {\n polygon.vertices.push( this.vertices[i].clone() );\n };\n polygon.calculateProperties();\n \n return polygon;\n };\n \n ThreeBSP.Polygon.prototype.flip = function() {\n var i, vertices = [];\n \n this.normal.multiplyScalar( -1 );\n this.w *= -1;\n \n for ( i = this.vertices.length - 1; i >= 0; i-- ) {\n vertices.push( this.vertices[i] );\n };\n this.vertices = vertices;\n \n return this;\n };\n ThreeBSP.Polygon.prototype.classifyVertex = function( vertex ) { \n var side_value = this.normal.dot( vertex ) - this.w;\n \n if ( side_value < -EPSILON ) {\n return BACK;\n } else if ( side_value > EPSILON ) {\n return FRONT;\n } else {\n return COPLANAR;\n }\n };\n ThreeBSP.Polygon.prototype.classifySide = function( polygon ) {\n var i, vertex, classification,\n num_positive = 0,\n num_negative = 0,\n vertice_count = polygon.vertices.length;\n \n for ( i = 0; i < vertice_count; i++ ) {\n vertex = polygon.vertices[i];\n classification = this.classifyVertex( vertex );\n if ( classification === FRONT ) {\n num_positive++;\n } else if ( classification === BACK ) {\n num_negative++;\n }\n }\n \n if ( num_positive > 0 && num_negative === 0 ) {\n return FRONT;\n } else if ( num_positive === 0 && num_negative > 0 ) {\n return BACK;\n } else if ( num_positive === 0 && num_negative === 0 ) {\n return COPLANAR;\n } else {\n return SPANNING;\n }\n };\n ThreeBSP.Polygon.prototype.splitPolygon = function( polygon, coplanar_front, coplanar_back, front, back ) {\n var classification = this.classifySide( polygon );\n \n if ( classification === COPLANAR ) {\n \n ( this.normal.dot( polygon.normal ) > 0 ? coplanar_front : coplanar_back ).push( polygon );\n \n } else if ( classification === FRONT ) {\n \n front.push( polygon );\n \n } else if ( classification === BACK ) {\n \n back.push( polygon );\n \n } else {\n \n var vertice_count,\n i, j, ti, tj, vi, vj,\n t, v,\n f = [],\n b = [];\n \n for ( i = 0, vertice_count = polygon.vertices.length; i < vertice_count; i++ ) {\n \n j = (i + 1) % vertice_count;\n vi = polygon.vertices[i];\n vj = polygon.vertices[j];\n ti = this.classifyVertex( vi );\n tj = this.classifyVertex( vj );\n \n if ( ti != BACK ) f.push( vi );\n if ( ti != FRONT ) b.push( vi );\n if ( (ti | tj) === SPANNING ) {\n t = ( this.w - this.normal.dot( vi ) ) / this.normal.dot( vj.clone().subtract( vi ) );\n v = vi.interpolate( vj, t );\n f.push( v );\n b.push( v );\n }\n }\n \n \n if ( f.length >= 3 ) front.push( new ThreeBSP.Polygon( f ).calculateProperties() );\n if ( b.length >= 3 ) back.push( new ThreeBSP.Polygon( b ).calculateProperties() );\n }\n };\n \n ThreeBSP.Vertex = function( x, y, z, normal, uv ) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.normal = normal || new THREE.Vector3;\n this.uv = uv || new THREE.Vector2;\n };\n ThreeBSP.Vertex.prototype.clone = function() {\n return new ThreeBSP.Vertex( this.x, this.y, this.z, this.normal.clone(), this.uv.clone() );\n };\n ThreeBSP.Vertex.prototype.add = function( vertex ) {\n this.x += vertex.x;\n this.y += vertex.y;\n this.z += vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.subtract = function( vertex ) {\n this.x -= vertex.x;\n this.y -= vertex.y;\n this.z -= vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.multiplyScalar = function( scalar ) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n };\n ThreeBSP.Vertex.prototype.cross = function( vertex ) {\n var x = this.x,\n y = this.y,\n z = this.z;\n\n this.x = y * vertex.z - z * vertex.y;\n this.y = z * vertex.x - x * vertex.z;\n this.z = x * vertex.y - y * vertex.x;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.normalize = function() {\n var length = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n \n this.x /= length;\n this.y /= length;\n this.z /= length;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.dot = function( vertex ) {\n return this.x * vertex.x + this.y * vertex.y + this.z * vertex.z;\n };\n ThreeBSP.Vertex.prototype.lerp = function( a, t ) {\n this.add(\n a.clone().subtract( this ).multiplyScalar( t )\n );\n \n this.normal.add(\n a.normal.clone().sub( this.normal ).multiplyScalar( t )\n );\n \n this.uv.add(\n a.uv.clone().sub( this.uv ).multiplyScalar( t )\n );\n \n return this;\n };\n ThreeBSP.Vertex.prototype.interpolate = function( other, t ) {\n return this.clone().lerp( other, t );\n };\n ThreeBSP.Vertex.prototype.applyMatrix4 = function ( m ) {\n\n // input: THREE.Matrix4 affine matrix\n\n var x = this.x, y = this.y, z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n\n return this;\n\n };\n \n \n ThreeBSP.Node = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n\n this.polygons = [];\n this.front = this.back = undefined;\n \n if ( !(polygons instanceof Array) || polygons.length === 0 ) return;\n\n this.divider = polygons[0].clone();\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n this.front = new ThreeBSP.Node( front );\n }\n \n if ( back.length > 0 ) {\n this.back = new ThreeBSP.Node( back );\n }\n };\n ThreeBSP.Node.isConvex = function( polygons ) {\n var i, j;\n for ( i = 0; i < polygons.length; i++ ) {\n for ( j = 0; j < polygons.length; j++ ) {\n if ( i !== j && polygons[i].classifySide( polygons[j] ) !== BACK ) {\n return false;\n }\n }\n }\n return true;\n };\n ThreeBSP.Node.prototype.build = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n \n if ( !this.divider ) {\n this.divider = polygons[0].clone();\n }\n\n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n if ( !this.front ) this.front = new ThreeBSP.Node();\n this.front.build( front );\n }\n \n if ( back.length > 0 ) {\n if ( !this.back ) this.back = new ThreeBSP.Node();\n this.back.build( back );\n }\n };\n ThreeBSP.Node.prototype.allPolygons = function() {\n var polygons = this.polygons.slice();\n if ( this.front ) polygons = polygons.concat( this.front.allPolygons() );\n if ( this.back ) polygons = polygons.concat( this.back.allPolygons() );\n return polygons;\n };\n ThreeBSP.Node.prototype.clone = function() {\n var node = new ThreeBSP.Node();\n \n node.divider = this.divider.clone();\n node.polygons = this.polygons.map( function( polygon ) { return polygon.clone(); } );\n node.front = this.front && this.front.clone();\n node.back = this.back && this.back.clone();\n \n return node;\n };\n ThreeBSP.Node.prototype.invert = function() {\n var i, polygon_count, temp;\n \n for ( i = 0, polygon_count = this.polygons.length; i < polygon_count; i++ ) {\n this.polygons[i].flip();\n }\n \n this.divider.flip();\n if ( this.front ) this.front.invert();\n if ( this.back ) this.back.invert();\n \n temp = this.front;\n this.front = this.back;\n this.back = temp;\n \n return this;\n };\n ThreeBSP.Node.prototype.clipPolygons = function( polygons ) {\n var i, polygon_count,\n front, back;\n\n if ( !this.divider ) return polygons.slice();\n \n front = [], back = [];\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], front, back, front, back );\n }\n\n if ( this.front ) front = this.front.clipPolygons( front );\n if ( this.back ) back = this.back.clipPolygons( back );\n else back = [];\n\n return front.concat( back );\n };\n \n ThreeBSP.Node.prototype.clipTo = function( node ) {\n this.polygons = node.clipPolygons( this.polygons );\n if ( this.front ) this.front.clipTo( node );\n if ( this.back ) this.back.clipTo( node );\n };\n \n \n return ThreeBSP;\n }\n","module.exports = require(\"webworkify-webpack\");","module.exports = require(\"promise-polyfill\");","const Geometry = require('../primitives/geometry').Geometry;\nconst THREE = require('three');\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nmodule.exports = function (self) {\n\tlet core = undefined;\n\t\n\tvar geometryFromJSON = function(object) {\n\t\tvar JSONParser = new JSONLoader();\n\t\tvar geometry = JSONParser.parse(object);\n\t\tvar material = new THREE.MeshPhongMaterial();\n var mesh = new THREE.Mesh(geometry.geometry, material);\n var host = new Geometry();\n host.morph = mesh;\n return host;\n\t}\n\n\tvar initialise = function(object) {\n\t\tvar host = geometryFromJSON(object);\n\t\tcore = new (require('./geometryCSGInternal').GeometryCSGInternal)(host);\n\t\tself.postMessage({action:\"message\", message: \"Initialised\"});\n\t}\n\t\n\tvar intersect = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.intersect(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar subtract = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.subtract(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar union = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.union(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tself.addEventListener('message',function (ev){\n\t switch (ev.data.action) {\n \tcase 'initialise':\n initialise(ev.data.object);\n break;\n \tcase 'intersect':\n \t\tintersect(ev.data.object);\n break;\n \tcase 'subtract':\n \t\tsubtract(ev.data.object);\n break;\n \tcase 'union':\n \t\tunion(ev.data.object);\n break;\n \tdefault:\n \t\tthrow 'Cannot handle specified action.';\n\t }\n\t});\n\t\t\n //var test = ev.data;\n //self.postMessage(test, [test]);\n};\n\n","const THREE = require('three');\nconst ThreeBSP = require('../three-js-csg')(THREE);\nconst Geometry = require('../primitives/geometry').Geometry;\nconst GeometryCSG = require('../geometryCSG').GeometryCSG;\n\nconst GeometryCSGInternal = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n host = hostIn;\n let hostCSG = undefined;\n \n this.setGeometry = hostIn => {\n if (hostIn && hostIn.isGeometry)\n\t host = hostIn;\n hostCSG = undefined;\n }\n \n this.setCSG = csg => {\n\t hostCSG = csg;\n }\n \n const prepareCSG = guestGeometry => {\n\t if (host && host.morph && guestGeometry && guestGeometry.morph) {\n\t if (hostCSG === undefined)\n\t hostCSG = new ThreeBSP(host.morph);\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t return hostCSG.intersect(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.subtract = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.subtract(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.union = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.union(guestCSG);\n\t }\n\t return undefined;\n }\n};\n\nexports.GeometryCSGInternal = GeometryCSGInternal;\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Glyphset = require('./primitives/glyphset').Glyphset;\n\n/**\n * Provides an object which takes in a glyphset, convert it into a CSG and further\n * action such as intersect with another geometry may be performed.\n * \n * @class\n * @author Alan Wu\n * @return {GlyphsetCSG}\n */\nconst GlyphsetCSG = function (hostIn) {\n let host = undefined;\n if (hostIn && hostIn.isGlyphset)\n\t host = hostIn;\n const hostCSGs = new Array();\n const currentIntersect = undefined;\n \n this.setGlyphset = hostIn => {\n\t if (hostIn && hostIn.isGlyphset)\n\t\t host = hostIn;\n\t hostCSG = undefined;\n }\n \n this.getGlyphset = () => {\n\t return host;\n }\n \n const prepareCSGForGlyphs = () => {\n\t return glyph => {\n\t\t const mesh = glyph.getMesh();\n\t\t const label = glyph.getLabel();\n\t\t if (mesh) {\n\t\t\t const csg = new ThreeBSP(mesh.geometry.clone().applyMatrix(mesh.matrix));\n\t\t\t const store = [];\n\t\t\t store.csg = csg;\n\t\t\t store.label = label;\n\t\t\t if (mesh.material)\n\t\t\t\t store.material = mesh.material.clone();\n\t\t\t hostCSGs.push(store);\n\t\t }\n\t };\n };\n \n const prepareCSG = guestGeometry => {\n\t if (host && guestGeometry && guestGeometry.morph) {\n\t if (hostCSGs.length == 0) {\n\t \t host.forEachGlyph(prepareCSGForGlyphs());\n\t }\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if ((hostCSGs.length > 0) && guestCSG) {\n\t\tconst glyphset = new (require('./primitives/glyphset').Glyphset)();\n\t\tfor (let i = 0; i < hostCSGs.length; i++) {\n\t\t\tconst hostCSG = hostCSGs[i];\n\t\t const intersect = hostCSG.csg.intersect(guestCSG);\n\t\t const mesh = intersect.toMesh();\n\t\t if (mesh && mesh.geometry && (mesh.geometry.vertices.length > 0)) {\n\t\t \tif (hostCSG.material) {\n\t\t \t\tmesh.material = hostCSG.material;\n\t\t \t\tmesh.material.side = THREE.DoubleSide;\n\t\t \t\tmesh.material.clippingPlanes = null;\n\t\t \t}\n\t\t\t const glyph = glyphset.addMeshAsGlyph(mesh, i+1);\n\t\t\t glyph.setLabel(hostCSG.label);\n\t\t }\n\t\t}\n\t const newCSG = new GlyphsetCSG(glyphset);\t\n\t return newCSG;\n\t }\n\n\t return undefined;\n }\n \n};\n\nexports.GlyphsetCSG = GlyphsetCSG;\n"],"sourceRoot":""}