zincjs 1.0.16 → 1.1.0
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/CHANGELOG.md +26 -1
- package/README.md +9 -8
- package/build/zinc.frontend.js +1 -1
- package/build/zinc.js +675 -115
- package/build/zinc.js.map +1 -1
- package/package.json +4 -2
- package/src/controls.js +347 -32
- package/src/minimap.js +8 -0
- package/src/primitives/augmentShader.js +4 -0
- package/src/primitives/geometry.js +18 -2
- package/src/primitives/glyph.js +129 -104
- package/src/primitives/glyphset.js +91 -74
- package/src/primitives/label.js +59 -14
- package/src/primitives/lines.js +22 -4
- package/src/primitives/marker.js +44 -2
- package/src/primitives/pointset.js +55 -33
- package/src/primitives/texturePrimitive.js +2 -1
- package/src/primitives/textureSlides.js +40 -19
- package/src/primitives/zincObject.js +113 -14
- package/src/region.js +215 -16
- package/src/renderer.js +2 -2
- package/src/scene.js +93 -5
- package/src/sceneExporter.js +1 -1
- package/src/sceneLoader.js +9 -1
- package/src/shaders/volumeTexture.js +1 -0
- package/src/texture/texture.js +56 -12
- package/src/texture/textureArray.js +42 -13
- package/src/videoHandler.js +9 -3
- package/src/shaders/volumeTexture copy.js +0 -64
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/loaders/JSONLoader.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/texture/textureArray.js","webpack://Zinc/./src/texture/texture.js","webpack://Zinc/./src/primitives/textureSlides.js","webpack://Zinc/./src/shaders/textureSlide.js","webpack://Zinc/./src/primitives/texturePrimitive.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/./src/loaders/STLLoader.js","webpack://Zinc/./src/loaders/OBJLoader.js","webpack://Zinc/./src/loaders/primitivesLoader.js","webpack://Zinc/./src/loaders/GLTFToZincJSLoader.js","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","TextureArray","TextureSlides","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","closestVertexIndex","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","pickableUpdateRequired","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","getClosestVertexDOMElementCoords","scene","inView","project","Math","getZincCameraControls","getRelativeCoordsFromNDC","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","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","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","_current_positions","_current_axis1s","_current_axis2s","_current_axis3s","_current_scales","_current_colors","_glyph_axis_array","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","VideoHandler","manager","withCredentials","paramsString","onLoad","onProgress","onError","texturePath","extractUrlBase","params","split","paramsStrings","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","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","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","isTextureArray","loadFromImages","srcArrays","h","isLoading","canvas","dataStacks","imageToUint8Array","height","fullArray","forEach","impl","DataTexture2DArray","depth","getMaterial","vs","fs","ShaderMaterial","uniforms","fragmentShader","glslVersion","isTexture","loadImage","img","Promise","resolve","reject","onload","onerror","ctx","getContext","drawImage","getImageData","isReady","textureIn","TexturePrimitive","isTextureSlides","createSlides","slideSettings","slide","direction","PlaneGeometry","getUniforms","diffuse","getSlides","children","removeSlide","getObjectById","disppose","first","expandByObject","GLSL3","isTexturePrimitive","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","onWindowResize","localRect","getBoundingClientRect","left","top","target","getSize","initialiseVisualisation","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","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","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","isWebGL2","capabilities","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","pickableObjectsList","forcePickableObjectsUpdate","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","updatePickableThreeJSObjects","getPickableThreeJSObjects","checkPickableUpdateRequred","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","PrimitivesLoader","createNewURL","reference","newURL","URL","href","progressMap","viewLoaded","errorDownload","primitivesLoader","totalSize","totalLoaded","unknownFound","progress","xhr","loaded","total","loadMultipleViews","referenceURL","views","Default","Inline","Entries","promises","fetch","then","response","catch","all","values","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","GLTFToZincJSLoader","loadRegions","currentRegion","regions","Primitives","primitive","Order","Transformation","Children","regionName","childRegion","findOrCreateChildFromPath","getNumberOfDownloadsInArray","includeViews","getNumberOfObjectsInRegions","regionJson","counts","getNumberOfObjects","Version","Regions","readVersionOneRegionPath","RegionPath","loadVersionOne","numberOfObjects","loadVersionTwo","Settings","Views","responseURL","setPath","setResponseType","setRequestHeader","requestHeader","e","itemError","matchDataViewAt","query","reader","getUint8","binData","array_buffer","charCodeAt","DataView","n_faces","getUint32","byteLength","solid","off","defaultR","defaultG","defaultB","hasColors","normalX","getFloat32","normalY","normalZ","packedColor","getUint16","vertexstart","componentIdx","patternSolid","patternFace","faceCounter","patternFloat","patternVertex","RegExp","patternNormal","groupCount","startVertex","endVertex","exec","vertexCountPerFace","normalCountPerFace","parseFloat","addGroup","decodeText","_object_pattern","_material_library_pattern","_material_use_pattern","_map_use_pattern","_vA","_vB","_vC","_ab","_cb","ParserState","state","objects","materialLibraries","startObject","fromDeclaration","previousMaterial","currentMaterial","_finalize","hasUVIndices","smooth","startMaterial","libraries","previous","inherited","mtllib","groupStart","groupEnd","cloned","bind","lastMultiMaterial","mi","declared","finalize","parseVertexIndex","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","dst","addVertexPoint","addVertexLine","addNormal","addFaceNormal","addColor","addUV","addDefaultUV","addUVLine","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","nLen","uvLen","addPointGeometry","vi","addLineGeometry","uvi","setMaterials","indexOf","lines","lineFirstChar","lineLength","trimLeft","trim","charAt","lineData","substr","vertexData","faceVertices","vertexParts","lineParts","substring","lineVertices","lineUVs","parts","li","llen","pointData","hasPrimitives","hasVertexColors","createdMaterials","miLen","sourceMaterial","materialHash","materialLine","Material","materialPoints","flatShading","concurrentDownloads","waitingList","onLoadCallback","onFinally","onErrorCallback","loadFromWaitingList","shift","GLTFLoader","parseGLTFObjects","rotation","quaternion","setCamera","cameraControls","lastIndexOf","gltf","log","GLTFExporter","getAllObjects","pluginCallbacks","register","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","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","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","isIdentityMatrix","getMinMax","output","POSITIVE_INFINITY","NEGATIVE_INFINITY","getY","getZ","getW","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","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","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","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","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","HTMLImageElement","HTMLCanvasElement","OffscreenCanvas","ImageBitmap","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","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","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","rect","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","sceneSphere","_tempEye","ndcControl","maxDist","viewports","getBoundingSphere","currentDist","viewportName","defaultName","getDefaultViewport","getViewportOfName","setRotationMode","getNDCFromDocumentCoords","positionIn","updateRect","setMouseButtonAction","buttonName","actionName","checkTravelDistance","newDist","translateViewport","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","touches","dx","dy","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentEnter","forced","observer","IntersectionObserver","boundingClientRect","disconnect","observe","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","awaiting","lastHoveredDate","lastHoveredEmpty","timeDiff","pickedObjects","lastPosition","zincCamera","getIntersectsObject","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","eventCallback","cameraIn","defaultViewportIn","getCurrentPosition","zoomToBox","setCenterZoom","getPanZoom","setEventCallback","parentIn","tMatrix","hideAllPrimitives","showAllPrimitives","transformation","nameIn","getName","getParent","getFullSeparatedPath","paths","parentName","p","unshift","getFullPath","createChild","getChildWithName","childName","lowerChildName","findChildFromSeparatedPath","pathArray","findChildFromPath","createChildFromSeparatedPath","createChildFromPath","transverse","objectsList","pickMarkers","boundingBox1","childObjects","lowerObjectName","lowerGroupName","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","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","vj","t","interpolate","scalar","lerp","other","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 = \"1.0.12\";\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.TextureArray = require('./texture/textureArray').TextureArray;\n this.TextureSlides = require('./primitives/textureSlides').TextureSlides;\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.closestVertexIndex = -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 && targetGeometry.morphAttributes &&\n 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 if (this.morph.visible !== visible) {\n this.morph.visible = visible;\n if (this.region) this.region.pickableUpdateRequired = true;\n }\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 if (this.morph && this.morph.material && this.morph.material.color)\n return this.morph.material.color.getHexString();\n }\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.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 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.closestVertexIndex * 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.closestVertexIndex * 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\nZincObject.prototype.getClosestVertexDOMElementCoords = function(scene) {\n if (scene && scene.camera) {\n let inView = true;\n const position = this.getClosestVertex();\n position.project(scene.camera);\n position.z = Math.min(Math.max(position.z, 0), 1);\n if (position.x > 1 || position.x < -1 || position.y > 1 || position.y < -1) {\n inView = false;\n }\n scene.getZincCameraControls().getRelativeCoordsFromNDC(position.x, position.y, position);\n return {position, inView};\n } else {\n return undefined;\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('../loaders/JSONLoader').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 const _current_positions = [];\n const _current_axis1s = [];\n const _current_axis2s = [];\n const _current_axis3s = [];\n const _current_scales = [];\n const _current_colors = [];\n const _glyph_axis_array = [];\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, 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[0] = [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[1] =[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[k] = [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 _glyph_axis_array.length = numberOfGlyphs;\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, _glyph_axis_array);\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 const current_positions = _current_positions;\n const current_axis1s = _current_axis1s;\n const current_axis2s = _current_axis2s;\n const current_axis3s = _current_axis3s;\n const current_scales = _current_scales;\n const current_colors = _current_colors;\n\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 _current_positions.length = bottom_positions.length;\n _current_axis1s.length = bottom_positions.length;\n _current_axis2s.length = bottom_positions.length;\n _current_axis3s.length = bottom_positions.length;\n _current_scales.length = bottom_positions.length;\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions[i] = proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i];\n current_axis1s[i] = proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i];\n current_axis2s[i] = proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i];\n current_axis3s[i] = proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i];\n current_scales[i] = 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 current_colors.length = bottom_colors.length;\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[i] = _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 };\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.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.closestVertexIndex]) {\n glyphList[this.closestVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.closestVertexIndex, _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;\nvar VideoHandler = require('../videoHandler').VideoHandler;\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 this.paramsString = \"\";\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\n const params = url.split(\"?\");\n\n //There are parameters, add them to the target\n if (url.length === 2) {\n\n this.paramsString = paramsStrings[1];\n\n } else {\n\n this.paramsString = \"\";\n\n }\n\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 if (scope && scope.parse) {\n var object = scope.parse( json, texturePath );\n onLoad( object.geometry, object.materials );\n }\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\n if (this.paramsString) {\n\n fullPath = fullPath + `?${this.paramsString}`;\n \n }\n\n\t\t\t\t\tconst videoHandler = new 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');\n\nconst TextureArray = function() {\n (require('./texture').Texture).call(this);\n this.isTextureArray = true;\n \n this.loadFromImages = async function(srcArrays) {\n let w = 1;\n let h = 1;\n let d = 0;\n if (srcArrays && srcArrays.length) {\n this.isLoading = true;\n const image = new Image();\n image.crossOrigin = \"Anonymous\";\n const canvas = document.createElement(\"canvas\");\n let length = 0;\n const dataStacks = new Array(srcArrays.length);\n for (let i = 0; i < srcArrays.length; i++) {\n const data = await this.imageToUint8Array(image, srcArrays[i], canvas);\n if (data && data.array) {\n w = data.width;\n h = data.height;\n dataStacks[d] = data.array;\n length += dataStacks[d].length;\n d++;\n }\n }\n const fullArray = new Uint8Array(length);\n length = 0;\n dataStacks.forEach(data => {\n fullArray.set(data, length);\n length += data.length;\n });\n \n this.impl = new THREE.DataTexture2DArray( fullArray, w, h, d );\n this.size = {\n width: w,\n height: h,\n depth: d\n };\n this.isLoading = false;\n }\n }\n\n this.getMaterial = function(options) {\n if (this.impl) {\n let material = undefined;\n if (options) {\n if (options.vs && options.fs) {\n let transparent = true;\n if (options.transparent)\n transparent = options.transparent;\n let side = THREE.FrontSide;\n if (options.side)\n side = options.side;\n material = new THREE.ShaderMaterial( {\n transparent,\n uniforms: options.uniforms,\n vertexShader: options.vs,\n fragmentShader: options.fs,\n side\n } ); \n if (options.glslVersion) {\n material.glslVersion = options.glslVersion;\n }\n }\n } else {\n material = new THREE.MeshBasicMaterial({\n color : new THREE.Color(1, 1, 1),\n transparent : false,\n opacity : 1.0,\n map : this.impl,\n side : THREE.DoubleSide\n });\n }\n if (material) {\n material.needsUpdate = true;\n return material;\n }\n }\n }\n}\n\nTextureArray.prototype = Object.create((require('./texture').Texture).prototype);\nexports.TextureArray = TextureArray;\n","const THREE = require('three');\n\nconst Texture = function() {\n this.isTexture = true;\n this.impl = undefined;\n this.isLoading = false;\n this.size = {\n width: 1,\n height: 1,\n depth: 0\n };\n}\n\nTexture.prototype.loadImage = function(img, src) {\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = src;\n })\n}\n\nTexture.prototype.imageToUint8Array = async function(img, src, canvas) {\n await this.loadImage(img, src);\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n return {\n array: new Uint8Array(ctx.getImageData(0, 0, canvas.width, canvas.height).data.buffer),\n width: canvas.width,\n height: canvas.height\n };\n}\n\nTexture.prototype.loadFromImages = async function(srcArrays) {\n return\n}\n\nTexture.prototype.isReady = function() {\n if (this.impl && !this.isLoading)\n return true;\n return false;\n}\n\nTexture.prototype.getMaterial = function() {\n if (this.impl) {\n return new THREE.MeshBasicMaterial({\n color : new THREE.Color(1, 1, 1),\n transparent : false,\n opacity : 1.0,\n map : this.impl,\n side : THREE.DoubleSide\n });\n }\n}\n\nexports.Texture = Texture;\n","const THREE = require('three');\nconst shader = require(\"../shaders/textureSlide.js\");\n/**\n * Provides a base class object which stores textures and rendering object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst TextureSlides = function (textureIn) {\n (require('./texturePrimitive').TexturePrimitive).call(this, textureIn);\n this.isTextureSlides = true;\n \n /*\n * Create slides\n */\n this.createSlides = slideSettings => {\n if (!this.morph) this.morph = new THREE.Group();\n if (this.texture && this.texture.isTextureArray && this.texture.isReady()) {\n slideSettings.forEach(slide => {\n if (slide.direction && slide.value) {\n const geometry = new THREE.PlaneGeometry( 1, 1 );\n geometry.translate(0.5, 0.5, 0);\n const uniforms = shader.getUniforms();\n uniforms.diffuse.value = this.texture.impl;\n uniforms.depth.value = this.texture.size.depth;\n switch(slide.direction) {\n case \"x\":\n uniforms.slide.value.set(slide.value, 0, 0);\n break;\n case \"y\":\n uniforms.slide.value.set(0, slide.value, 0);\n break;\n case \"z\":\n uniforms.slide.value.set(0, 0, slide.value);\n break;\n default:\n break;\n }\n const options = {\n fs: shader.fs,\n vs: shader.vs,\n uniforms: uniforms,\n glslVersion: shader.glslVersion,\n side: THREE.DoubleSide,\n transparent: false\n };\n const material = this.texture.getMaterial(options);\n material.needsUpdate = true;\n const mesh = new THREE.Mesh( geometry, material );\n this.morph.add(mesh);\n }\n });\n }\n }\n\n /*\n * Get all slides, return them in an array\n */\n this.getSlides = () => {\n if (this.morph) return [...this.morph.children];\n return [];\n }\n\n /*\n * Remove a slide, this will dispose the slide and its material.\n */\n this.removeSlide = slide => {\n if (slide && this.morph) {\n if (this.morph.getObjectById(slide.id)) {\n this.morph.remove(slide);\n slide.disppose();\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n }\n }\n }\n\n this.dispose = () => {\n this.morph.children.forEach(slide=> {\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n });\n (require('./texturePrimitive').TexturePrimitive).prototype.dispose.call(this);\n }\n\n /**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\n this.getBoundingBox = function() {\n if (this.morph && this.morph.children && this.morph.visible &&\n this.boundingBoxUpdateRequired) {\n let first = true;\n this.morph.children.forEach( morph => {\n if (first) {\n this.cachedBoundingBox.setFromBufferAttribute(\n morph.geometry.attributes.position);\n first = false;\n } else {\n this.cachedBoundingBox.expandByObject(morph);\n }\n });\n this.boundingBoxUpdateRequired = false;\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n}\n\n\nTextureSlides.prototype = Object.create((require('./texturePrimitive').TexturePrimitive).prototype);\nexports.TextureSlides = TextureSlides;\n","const THREE = require('three');\n\nconst glslVersion = THREE.GLSL3;\n\nconst fs =\n`\nprecision highp float;\nprecision highp int;\nprecision highp sampler2DArray;\n\nuniform sampler2DArray diffuse;\nin vec3 vUw;\n\nout vec4 outColor;\n\nvoid main() {\n\n vec4 color = texture( diffuse, vUw );\n\n // lighten a bit\n outColor = vec4( color.rgb + .2, 1.0 );\n\n}\n`;\n\nconst vs = \n`\nout vec3 vUw;\nuniform float depth;\nuniform vec3 slide;\n\nvoid main() {\n\n vec3 slidePos = position.xyz;\n\n if (slide.x > 0.0)\n slidePos = vec3(slide.x, position.x, position.y);\n if (slide.y > 0.0)\n slidePos = vec3(position.x, slide.y, position.y);\n if (slide.z > 0.0)\n slidePos = vec3(position.x, position.y, slide.z);\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4( slidePos, 1.0 );\n\n vUw.xyz = vec3(slidePos.x, slidePos.y, slidePos.z * depth);\n\n}\n`;\n\nconst getUniforms = function() {\n return {\n diffuse: { value: undefined },\n depth: { value: 1 },\n slide: { value: new THREE.Vector3( 0, 0, 1 ) }\n };\n}\n\nexports.fs = fs;\nexports.vs = vs;\nexports.glslVersion = glslVersion;\nexports.getUniforms = getUniforms;\n","const THREE = require('three');\n/**\n * Provides a base class object which stores textures and rendering object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst TexturePrimitive = function (textureIn) {\n (require('./zincObject').ZincObject).call(this);\n this.isTexturePrimitive = true;\n this.texture = textureIn;\n}\n\nTexturePrimitive.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.TexturePrimitive = TexturePrimitive;\n","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 localRect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\tlocalRect = 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\tlocalRect = 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 (localRect) {\r\n\t\t\t\tcurrentOffset[0] = localRect.left;\r\n\t\t\t\tcurrentOffset[1] = localRect.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 this.isWebGL2 = () => {\r\n if (renderer)\r\n return renderer.capabilities.isWebGL2;\r\n return false;\r\n }\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 let pickableObjectsList = [];\n this.forcePickableObjectsUpdate = false;\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\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 //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 * Update pickable objects list\n */\n this.updatePickableThreeJSObjects = () => {\n pickableObjectsList.splice(0, pickableObjectsList.length);\n rootRegion.getPickableThreeJSObjects(pickableObjectsList,\n this.displayMarkers, true);\n this.forcePickableObjectsUpdate = false;\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = () => {\n //The list will only be updated if changes have been made\n //in region or a flag has been raise\n if (this.forcePickableObjectsUpdate || \n rootRegion.checkPickableUpdateRequred(true)) {\n this.updatePickableThreeJSObjects();\n }\n return pickableObjectsList;\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 this.isWebGL2 = () => {\n return rendererIn.isWebGL2();\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 STLLoader = require('./loaders/STLLoader').STLLoader;\nconst OBJLoader = require('./loaders/OBJLoader').OBJLoader;\nconst PrimitivesLoader = require('./loaders/primitivesLoader').PrimitivesLoader;\n\nconst createNewURL = (target, reference) => {\n let newURL = (new URL(target, reference)).href;\n //Make sure the target url does not contain parameters\n if (target && target.split(\"?\").length < 2) {\n const paramsStrings = reference.split(\"?\");\n //There are parameters, add them to the target\n if (paramsStrings.length === 2) {\n newURL = newURL + \"?\" + paramsStrings[1];\n }\n }\n return newURL;\n}\n\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 const primitivesLoader = new PrimitivesLoader();\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 = finishCallback => {\n return xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n if (finishCallback) {\n finishCallback();\n }\n }\n };\n\n let loadMultipleViews = (referenceURL, views) => {\n const defaultView = views.Default;\n if (views.Inline) {\n scene.setupMultipleViews(defaultView, views.Entries);\n } else {\n const promises = [];\n for (const [key, value] of Object.entries(views.Entries)) {\n if (referenceURL) {\n newURL = createNewURL(value, referenceURL);\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 --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n } else {\n this.onError();\n }\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 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 primitivesLoader.load(resolveURL(filename), meshloader(region, colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, finishCallback), this.onProgress(i), this.onError(finishCallback));\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.SceneLoader.#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 * 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 if (isInline) {\n var object = primitivesLoader.parse( url );\n (linesloader(region, localTimeEnabled, localMorphColour, groupName, anatomicalId,\n renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, linesloader(region, localTimeEnabled, localMorphColour, groupName, \n anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError(finishCallback));\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: 10, 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 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 = primitivesLoader;\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 = primitivesLoader.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 primitivesLoader.load(url, meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError(finishCallback));\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 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 = primitivesLoader.parse( url );\n (pointsetloader(region, localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, finishCallback))(object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, pointsetloader(region, localTimeEnabled, localMorphColour,\n groupName, anatomicalId, renderOrder, finishCallback),\n this.onProgress(i), this.onError(finishCallback));\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 if (region) 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 = createNewURL(item.URL, referenceURL);\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 = createNewURL(item.GlyphGeometriesURL, referenceURL);\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 = createNewURL(item.URL, referenceURL);\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 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 GLTFToZincJSLoader = new (require('./loaders/GLTFToZincJSLoader').GLTFToZincJSLoader)();\n GLTFToZincJSLoader.load(scene, region, url, finishCallback, options);\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 getNumberOfDownloadsInArray = (array, includeViews) => {\n if (Array.isArray(array)) {\n let count = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i].Type && (\n (includeViews && array[i].Type === \"View\") ||\n array[i].Type === \"Surfaces\" ||\n array[i].Type === \"Glyph\" ||\n array[i].Type === \"Points\" ||\n array[i].Type === \"Lines\"))\n {\n count++;\n }\n }\n return count;\n }\n return 0;\n }\n\n let getNumberOfObjectsInRegions = (regionJson) => {\n let counts = regionJson.Primitives ? \n getNumberOfDownloadsInArray(regionJson.Primitives, false) : 0;\n if (regionJson.Children) {\n Object.values(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 getNumberOfDownloadsInArray(metadata, true);\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 readVersionOneRegionPath = (region, referenceURL, item, order, callback) => {\n let targetRegion = region;\n if (item.RegionPath && item.RegionPath !== \"\") {\n targetRegion = region.findOrCreateChildFromPath(item.RegionPath);\n }\n //Render order is set to i * 2 to account for front and back rendering\n readPrimitivesItem(targetRegion, referenceURL, item, order * 2, callback);\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 readVersionOneRegionPath(targetRegion, referenceURL, metadata[i], i, 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","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils,\n\tVector3\n} from 'three';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nclass STLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tconst n_faces = reader.getUint32( 80, true );\n\t\t\tconst expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful. So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tconst solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( let off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( let i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i, false ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst faces = reader.getUint32( 80, true );\n\n\t\t\tlet r, g, b, hasColors = false, colors;\n\t\t\tlet defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( let index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst dataOffset = 84;\n\t\t\tconst faceLength = 12 * 4 + 2;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tconst normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\t\tconst start = dataOffset + face * faceLength;\n\t\t\t\tconst normalX = reader.getFloat32( start, true );\n\t\t\t\tconst normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tconst normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tconst packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tconst vertexstart = start + i * 12;\n\t\t\t\t\tconst componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolors[ componentIdx ] = r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tconst patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tlet faceCounter = 0;\n\n\t\t\tconst patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tconst patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tconst patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tlet result;\n\n\t\t\tlet groupCount = 0;\n\t\t\tlet startVertex = 0;\n\t\t\tlet endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tconst solid = result[ 0 ];\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tlet vertexCountPerFace = 0;\n\t\t\t\t\tlet normalCountPerFace = 0;\n\n\t\t\t\t\tconst text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst start = startVertex;\n\t\t\t\tconst count = endVertex - startVertex;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn LoaderUtils.decodeText( new Uint8Array( buffer ) );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tconst array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( let i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tconst binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n}\n\nexport { STLLoader };\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\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\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet line = '', lineFirstChar = '';\n\t\tlet lineLength = 0;\n\t\tlet result = [];\n\n\t\t// Faster to just trim left side of the line. Use if available.\n\t\tconst trimLeft = ( typeof ''.trimLeft === 'function' );\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tline = lines[ i ];\n\n\t\t\tline = trimLeft ? line.trimLeft() : line.trim();\n\n\t\t\tlineLength = line.length;\n\n\t\t\tif ( lineLength === 0 ) continue;\n\n\t\t\tlineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue;\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( /\\s+/ );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\tstate.colors.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\n\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( /\\s+/ );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].substr( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].substr( 1 ).trim() ).substr( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t * or\n\t\t\t\t\t * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n","const JSONLoader = require('./JSONLoader').JSONLoader;\n\nexports.PrimitivesLoader = function () {\n let concurrentDownloads = 0;\n const MAX_DOWNLOAD = 20;\n this.crossOrigin = \"Anonymous\";\n const loader = new JSONLoader();\n const waitingList = [];\n\n this.load = (url, onLoad, onProgress, onError) => {\n if (MAX_DOWNLOAD > concurrentDownloads) {\n ++concurrentDownloads;\n loader.crossOrigin = this.crossOrigin;\n const onLoadCallback = new onFinally(onLoad, this);\n const onErrorCallback = new onFinally(onError, this);\n loader.load(url, onLoadCallback, onProgress, onErrorCallback);\n } else {\n waitingList.push({\n url,\n onLoad,\n onProgress,\n onError\n });\n }\n }\n\n this.loadFromWaitingList = () => {\n const item = waitingList.shift();\n if (item)\n this.load(item.url, item.onLoad, item.onProgress, item.onError);\n }\n\n const onFinally = function(callback, loader) {\n return (...args) => {\n --concurrentDownloads;\n callback(...args);\n loader.loadFromWaitingList();\n }\n }\n\n\n this.parse = data => {\n return loader.parse(data);\n }\n\n}\n","const THREE = require('three');\n\nconst GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader').GLTFLoader;\n\nconst GLTFToZincJSLoader = function () {\n\n const _this = this;\n\n this.parseGLTFObjects = (object, region, depth, finishCallback) => {\n let childRegion = region;\n if (depth !== 0) {\n if (object.type === \"Object3D\") {\n if (object.name !== \"\") {\n if (region)\n childRegion = region.findOrCreateChildFromPath(object.name);\n if (childRegion) {\n const group = childRegion.getGroup();\n group.position.copy(object.position);\n group.rotation.copy(object.rotation);\n group.quaternion.copy(object.quaternion);\n group.matrixAutoUpdate = true;\n }\n }\n } else {\n let zincGeometry = undefined;\n if (object.type === \"Mesh\") {\n zincGeometry = new (require('../primitives/geometry').Geometry)();\n } else if (object.type === \"LineSegments\") {\n zincGeometry = new (require('../primitives/lines').Lines)();\n } else if (object.type === \"Points\") {\n zincGeometry = new (require('../primitives/pointset').Pointset)();\n }\n if (zincGeometry) {\n let localTimeEnabled = false;\n let localMorphColour = false;\n if (object.geometry && object.geometry.morphAttributes) {\n localTimeEnabled = object.geometry.morphAttributes.position ? true : false;\n localMorphColour = object.geometry.morphAttributes.color ? true : false;\n }\n zincGeometry.setMesh(object.clone(), localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n zincGeometry.groupName = zincGeometry.morph.name;\n zincGeometry.morph.matrixAutoUpdate = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n }\n }\n depth++;\n object.children.forEach( child => {\n _this.parseGLTFObjects(child, childRegion, depth, finishCallback);\n });\n }\n\n this.setCamera = scene => {\n scene.viewAll();\n const cameraControls = scene.getZincCameraControls();\n const viewport = cameraControls.getCurrentViewport();\n cameraControls.addViewport('default', viewport);\n cameraControls.setDefaultViewport('default');\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.load = (scene, region, url, finishCallback, allCompletedCallback, 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 \n loader.load( filename, function ( gltf ) {\n console.log(gltf)\n _this.parseGLTFObjects(gltf.scene, region, 0, finishCallback);\n _this.setCamera(scene);\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n });\n }\n}\n\nexports.GLTFToZincJSLoader = GLTFToZincJSLoader;\n","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\n //Get the NDC coordinates from the given dom coordiantes\n this.getNDCFromDocumentCoords = (x, y, positionIn) => {\n\n const position = positionIn ? positionIn : new THREE.Vector2();\n position.x = ((x - rect.left) / rect.width) * 2 - 1;\n position.y = -((y - rect.top) / rect.height) * 2 + 1;\n return position;\n }\n\n this.getRelativeCoordsFromNDC = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n position.x = (x + 1) * rect.width / 2.0;\n position.y = (1 - y) * rect.height / 2.0;\n return position;\n }\n\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 updateRect(false);\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 updateRect(false);\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 updateRect(false);\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\n const onDocumentEnter = () => {\n\t\tupdateRect(true);\n\t}\n\n const updateRect = forced => {\n //Use intersectionObserver to reset the rect for ray tracing.\n if (forced || rect === undefined) {\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n rect = entry.boundingClientRect;\n }\n observer.disconnect();\n });\n \n observer.observe(this.domElement);\n }\n }\n\t\n\tconst onDocumentWheelEvent = event => {\n updateRect(false);\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 this.domElement.addEventListener( 'mouseenter', onDocumentEnter, 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 this.domElement.removeEventListener( 'mouseenter', onDocumentEnter, 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 awaiting = false;\n let lastHoveredDate = new Date();\n let lastHoveredEmpty = false;\n let timeDiff = 0;\n let pickedObjects = new Array();\n let lastPosition = { zincCamera: undefined, x: -1 ,y: -1};\n\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\n\tconst getIntersectsObject = (zincCamera, x, y) => {\n zincCamera.getNDCFromDocumentCoords(x, y, mouse);\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 //Reset pickedObjects array \n pickedObjects.length = 0;\n\t\treturn raycaster.intersectObjects( objects, true, pickedObjects );\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tgetIntersectsObject(zincCamera, x, y);\n\t\t\tcallbackFunction(pickedObjects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n getIntersectsObject(zincCamera, x, y);\n lastHoveredDate.setTime(Date.now());\n if (pickedObjects.length === 0) {\n //skip hovered callback if the previous one is empty\n if (lastHoveredEmpty)\n return\n lastHoveredEmpty = true;\n } else {\n lastHoveredEmpty = false;\n }\n hoverCallbackFunction(pickedObjects, 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 lastPosition.zincCamera = zincCamera;\n lastPosition.x = x;\n lastPosition.y = y;\n if (!awaiting) {\n timeDiff = lastHoveredDate ? Date.now() - lastHoveredDate.getTime() : 250;\n if (timeDiff >= 250) {\n hovered(zincCamera, x, y);\n } else {\n awaiting = true;\n setTimeout(awaitMove(lastPosition), timeDiff);\n }\n }\n }\n }\n }\n \n let awaitMove = (lastPosition) => {\n return function() {\n awaiting = false;\n hovered(lastPosition.zincCamera, lastPosition.x, lastPosition.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 this.pickableUpdateRequired = true;\n\n this.hideAllPrimitives = () => {\n children.forEach(child => child.hideAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(false));\n }\n\n this.showAllPrimitives = () => {\n children.forEach(child => child.showAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(true));\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 const lowerChildName = childName.toLowerCase();\n for (let i = 0; i < children.length; i++) {\n if (children[i].getName().toLowerCase() === lowerChildName)\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 this.pickableUpdateRequired = true;\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 this.checkPickableUpdateRequred = (transverse) => {\n if (this.pickableUpdateRequired) return true;\n if (transverse) {\n let flag = false;\n for (let i = 0; i < children.length; i++) {\n flag = children[i].checkPickableUpdateRequred(transverse);\n if (flag) return true;\n }\n }\n return false;\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) {\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 this.pickableUpdateRequired = false;\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(zincObject, transverse))\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 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 const lowerObjectName = zincObject.groupName ? zincObject.groupName.toLowerCase() : zincObject.groupName;\n const lowerGroupName = groupName ? groupName.toLowerCase() : groupName;\n if (lowerObjectName === lowerGroupName)\n 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/loaders/JSONLoader.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/texture/textureArray.js","webpack://Zinc/./src/texture/texture.js","webpack://Zinc/./src/primitives/textureSlides.js","webpack://Zinc/./src/shaders/textureSlide.js","webpack://Zinc/./src/primitives/texturePrimitive.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/./src/loaders/STLLoader.js","webpack://Zinc/./src/loaders/OBJLoader.js","webpack://Zinc/./src/loaders/primitivesLoader.js","webpack://Zinc/./src/loaders/GLTFToZincJSLoader.js","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","TextureArray","TextureSlides","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","uniqueiId","getUniqueId","isZincObject","secondaryMesh","groupName","timeEnabled","morphColour","inbuildTime","mixer","animationGroup","duration","clipAction","userData","marker","markerUpdateRequired","closestVertexIndex","boundingBoxUpdateRequired","cachedBoundingBox","Box3","_vertex","Vector3","anatomicalId","region","animationClip","uuid","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","pickableUpdateRequired","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","applyMatrixWorld","found","multiplyScalar","applyMatrix4","matrixWorld","getBoundingBox","box","setFromArray","set","updateWorldMatrix","updateMarker","playAnimation","displayMarkers","isEnabled","disable","Marker","setPosition","z","camera","markerDepths","updateNDC","cameraObject","enable","processMarkerVisual","updateVisual","initiateMorphColor","setRenderOrder","getClosestVertexDOMElementCoords","scene","inView","project","Math","getZincCameraControls","getRelativeCoordsFromNDC","render","delta","targetTime","_m1","Matrix4","_obj","Object3D","_offset","MathUtils","generateUUID","type","colors","normals","uvs","skinWeights","skinIndices","lineDistances","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","normalsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","assign","EventDispatcher","constructor","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","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","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","_current_positions","_current_axis1s","_current_axis2s","_current_axis3s","_current_scales","_current_colors","_glyph_axis_array","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","union","Loader","LoaderUtils","Vector4","FileLoader","DefaultLoadingManager","VideoHandler","manager","withCredentials","paramsString","onLoad","onProgress","onError","texturePath","extractUrlBase","params","split","paramsStrings","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","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","threshold","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","isTextureArray","loadFromImages","srcArrays","h","isLoading","canvas","dataStacks","imageToUint8Array","height","fullArray","forEach","impl","DataTexture2DArray","depth","getMaterial","vs","fs","ShaderMaterial","uniforms","fragmentShader","glslVersion","isTexture","loadImage","img","Promise","resolve","reject","onload","onerror","ctx","getContext","drawImage","getImageData","isReady","textureIn","TexturePrimitive","isTextureSlides","createSlides","slideSettings","slide","direction","PlaneGeometry","getUniforms","diffuse","getSlides","children","removeSlide","getObjectById","disppose","expandByPoint","GLSL3","isTexturePrimitive","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","onWindowResize","localRect","getBoundingClientRect","left","top","target","getSize","initialiseVisualisation","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","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","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","isWebGL2","capabilities","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","pickableObjectsList","forcePickableObjectsUpdate","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","updatePickableThreeJSObjects","getPickableThreeJSObjects","checkPickableUpdateRequred","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","PrimitivesLoader","createNewURL","reference","newURL","URL","href","progressMap","viewLoaded","errorDownload","primitivesLoader","totalSize","totalLoaded","unknownFound","progress","xhr","loaded","total","loadMultipleViews","referenceURL","views","Default","Inline","Entries","promises","fetch","then","response","catch","all","values","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","GLTFToZincJSLoader","loadRegions","currentRegion","regions","Primitives","primitive","Order","Transformation","Children","regionName","childRegion","findOrCreateChildFromPath","getNumberOfDownloadsInArray","includeViews","getNumberOfObjectsInRegions","regionJson","counts","getNumberOfObjects","Version","Regions","readVersionOneRegionPath","RegionPath","loadVersionOne","numberOfObjects","loadVersionTwo","Settings","Views","responseURL","setPath","setResponseType","setRequestHeader","requestHeader","e","itemError","matchDataViewAt","query","reader","getUint8","binData","array_buffer","charCodeAt","DataView","n_faces","getUint32","byteLength","solid","off","defaultR","defaultG","defaultB","hasColors","normalX","getFloat32","normalY","normalZ","packedColor","getUint16","vertexstart","componentIdx","patternSolid","patternFace","faceCounter","patternFloat","patternVertex","RegExp","patternNormal","groupCount","startVertex","endVertex","exec","vertexCountPerFace","normalCountPerFace","parseFloat","addGroup","decodeText","_object_pattern","_material_library_pattern","_material_use_pattern","_map_use_pattern","_vA","_vB","_vC","_ab","_cb","ParserState","state","objects","materialLibraries","startObject","fromDeclaration","previousMaterial","currentMaterial","_finalize","hasUVIndices","smooth","startMaterial","libraries","previous","inherited","mtllib","groupStart","groupEnd","cloned","bind","lastMultiMaterial","mi","declared","finalize","parseVertexIndex","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","dst","addVertexPoint","addVertexLine","addNormal","addFaceNormal","addColor","addUV","addDefaultUV","addUVLine","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","nLen","uvLen","addPointGeometry","vi","addLineGeometry","uvi","setMaterials","indexOf","lines","lineFirstChar","lineLength","trimLeft","trim","charAt","lineData","substr","vertexData","faceVertices","vertexParts","lineParts","substring","lineVertices","lineUVs","parts","li","llen","pointData","hasPrimitives","hasVertexColors","createdMaterials","miLen","sourceMaterial","materialHash","materialLine","Material","materialPoints","flatShading","concurrentDownloads","waitingList","onLoadCallback","onFinally","onErrorCallback","loadFromWaitingList","shift","GLTFLoader","parseGLTFObjects","rotation","quaternion","setCamera","cameraControls","lastIndexOf","gltf","log","GLTFExporter","getAllObjects","pluginCallbacks","register","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","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","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","isIdentityMatrix","getMinMax","output","POSITIVE_INFINITY","NEGATIVE_INFINITY","getY","getZ","getW","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","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","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","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","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","HTMLImageElement","HTMLCanvasElement","OffscreenCanvas","ImageBitmap","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","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","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","rect","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","sceneSphere","_tempEye","ndcControl","maxDist","viewports","getBoundingSphere","currentDist","viewportName","defaultName","getDefaultViewport","getViewportOfName","setRotationMode","getNDCFromDocumentCoords","positionIn","updateRect","out_x","out_y","setMouseButtonAction","buttonName","actionName","checkTravelDistance","newDist","translateViewport","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","touches","dx","dy","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentEnter","forced","observer","IntersectionObserver","boundingClientRect","disconnect","observe","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","awaiting","lastHoveredDate","lastHoveredEmpty","timeDiff","pickedObjects","lastPosition","zincCamera","getIntersectsObject","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","eventCallback","cameraIn","defaultViewportIn","getCurrentPosition","zoomToBox","setCenterZoom","getPanZoom","setEventCallback","parentIn","tMatrix","isRegion","hideAllPrimitives","showAllPrimitives","transformation","nameIn","getName","getParent","getFullSeparatedPath","paths","parentName","p","unshift","getFullPath","createChild","getChildWithName","childName","lowerChildName","findChildFromSeparatedPath","pathArray","findChildFromPath","createChildFromSeparatedPath","createChildFromPath","transverse","objectsList","pickMarkers","boundingBox1","childObjects","lowerObjectName","lowerGroupName","primitivesArray","geometriesArray","filter","pointsetsArray","glyphsetsArray","linesArray","getChildRegions","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","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","vj","t","interpolate","scalar","lerp","other","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 = \"1.0.12\";\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.TextureArray = require('./texture/textureArray').TextureArray;\n this.TextureSlides = require('./primitives/textureSlides').TextureSlides;\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 {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 /**\n * Create the mesh for rendering\n * \n * @param {THREE.Geomtry} geometryIn - Geometry to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the geometry.\n * @param {Object} options - Provide various options\n * @param {THREE.Color} options.colour - colour to be set for the geometry\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the geometry is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n * @param {Number} options.opacity - Opacity to be set for the geometry\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\n /**\n * Calculate the UV for texture rendering.\n */\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\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"pr\" + uniqueiId++;\n}\n\n/**\n * Provides the base object for other primitive types.\n * This class contains multiple base methods.\n * \n * @class\n * @author Alan Wu\n * @return {ZincObject}\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 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.closestVertexIndex = -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 this.uuid = getUniqueId();\n}\n\n/**\n * Set the duration of the animation of this object.\n * \n * @param {Number} durationIn - Duration of the animation.\n */\nZincObject.prototype.setDuration = function(durationIn) {\n this.duration = durationIn;\n if (this.clipAction) {\n this.clipAction.setDuration(this.duration);\n }\n}\n\n/**\n * Get the duration of the animation of this object.\n * \n * @return {Number}\n */\nZincObject.prototype.getDuration = function() {\n return this.duration;\n}\n\n/**\n * Set the region this object belongs to.\n * \n * @param {Region} region\n */\nZincObject.prototype.setRegion = function(region) {\n this.region = region;\n}\n\n/**\n * Get the region this object belongs to.\n * \n * @return {Region}\n */\nZincObject.prototype.getRegion = function() {\n return this.region;\n}\n\n/**\n * Convert a {THREE.Geometry} into a {THREE.BufferGeometry}.\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\n/**\n * Handle transparent mesh, create a clone for backside rendering if it is\n * transparent.\n */\nZincObject.prototype.checkAndCreateTransparentMesh = function() {\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\n/**\n * Handle transparent mesh, remove a clone for backside rendering if it is\n * transparent.\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\n/**\n * Set the mesh function for zincObject.\n * \n * @param {THREE.Mesh} mesh - Mesh to be set for this zinc object.\n * @param {Boolean} localTimeEnabled - A flag to indicate either the mesh is\n * time dependent.\n * @param {Boolean} localMorphColour - A flag to indicate either the colour is\n * time dependent.\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\n/**\n * Set the name for this ZincObject.\n * \n * @param {String} groupNameIn - Name to be set.\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 && targetGeometry.morphAttributes &&\n 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 if (this.morph.visible !== visible) {\n this.morph.visible = visible;\n if (this.region) this.region.pickableUpdateRequired = true;\n }\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\n/**\n * The rendering will be culled if it is outside of the frustrum\n * when this flag is set to true, it should be set to false if\n * morphing is enabled.\n * \n * @param {Boolean} flag - Set frustrum culling on/off based on this flag.\n */\nZincObject.prototype.setFrustumCulled = function(flag) {\n if (this.morph) {\n this.morph.frustumCulled = flag;\n }\n}\n\n/**\n * Set rather a zinc object should be displayed using per vertex colour or\n * not.\n * \n * @param {Boolean} vertexColors - Set display with vertex color on/off.\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 * Get the colour of the mesh.\n * \n * @return {THREE.Color}\n */\nZincObject.prototype.getColour = function() {\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 mesh.\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\n/**\n * Get the colour of the mesh in hex string form.\n * \n * @return {String}\n */\nZincObject.prototype.getColourHex = function() {\n if (!this.morphColour) {\n if (this.morph && this.morph.material && this.morph.material.color)\n return this.morph.material.color.getHexString();\n }\n return undefined;\n}\n\n/**\n * Set the colour of the mesh using hex in string form.\n * \n * @param {String} hex - The colour value in hex form.\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 * \n * @return {Number} - integer index in the array\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 * \n * @return {THREE.Vector3}\n */\nZincObject.prototype.getClosestVertex = function(applyMatrixWorld) {\n let position = new THREE.Vector3();\n if (this.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 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.closestVertexIndex * 3);\n position.add(this._vertex.multiplyScalar(influences[i]));\n }\n }\n if (found) {\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n }\n } else {\n position.fromArray(this.morph.geometry.attributes.position.array,\n this.closestVertexIndex * 3);\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n }\n }\n this.getBoundingBox().getCenter(position);\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : 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 }\n this.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\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\n/**\n * Update the marker's position and size based on current viewport. \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(false);\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 * Get the windows coordinates.\n * \n * @return {Object} - position and rather the closest vertex is on screen.\n */\nZincObject.prototype.getClosestVertexDOMElementCoords = function(scene) {\n if (scene && scene.camera) {\n let inView = true;\n const position = this.getClosestVertex(true);\n position.project(scene.camera);\n position.z = Math.min(Math.max(position.z, 0), 1);\n if (position.x > 1 || position.x < -1 || position.y > 1 || position.y < -1) {\n inView = false;\n }\n scene.getZincCameraControls().getRelativeCoordsFromNDC(position.x, position.y, position);\n return {position, inView};\n } else {\n return undefined;\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/**\n * A special graphics type with a tear drop shape.\n * It is currently used to mark the location of a\n * {@link zincObject}.\n * \n * @class\n * @author Alan Wu\n * @return {Marker}\n */\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\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 /**\n * Set the position of the marker.\n * \n * @param {Number} x - x coordinate to be set.\n * @param {Number} y - y coordinate to be set.\n * @param {Number} z - z coordinate to be set.\n */\n this.setPosition = (x, y, z) => {\n this.morph.position.set(x, y, z);\n }\n\n /**\n * Set the size of the marker.\n * \n * @param {Number} size - size to be set.\n */ \n this.setSpriteSize = size => {\n sprite.scale.set(0.015, 0.02, 1);\n sprite.scale.multiplyScalar(size);\n }\n\n /**\n * Clean up this object,\n */ \n this.dispose = () => {\n if (this.morph) {\n this.morph.dispose();\n }\n if (spriteMaterial) {\n spriteMaterial.dispose();\n }\n if (sprite) {\n sprite.dispose();\n }\n }\n\n this.isEnabled = () => {\n return enabled;\n }\n\n /**\n * Enable and visualise the marker.\n */ \n this.enable = () => {\n enabled = true;\n this.morph.visible = true;\n }\n\n /**\n * Disable and hide the marker.\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==\"","\n/**\n * Provide additional shaders to render time dependent color.\n */\nexports.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 {Glyph}\n */\nconst Glyph = function (geometry, materialIn, idIn, glyphsetIn) {\n (require('./zincObject').ZincObject).call(this);\n let material = undefined;\n if (materialIn) {\n material = materialIn.clone();\n material.vertexColors = THREE.FaceColors;\n }\n const parent = glyphsetIn;\n this.id = idIn;\n let label = undefined;\n let labelString = undefined;\n const group = new THREE.Group();\n this.isGlyph = true;\n\n /**\n * Create a glyph using mesh\n * @param {THREE.Mesh} meshIn - Mesh to create the glyph from\n *\n * @returns {Boolean} true if successful\n */\n this.fromMesh = meshIn => {\n if (meshIn && meshIn.isMesh) {\n this.morph = meshIn.clone();\n this.morph.userData = this;\n group.add(this.morph);\n return true;\n }\n return false;\n }\n\n if (geometry && material) {\n this.fromMesh(new THREE.Mesh(geometry, material));\n }\n\n /**\n * Get the {Glyphset} containing this glyph.\n *\n * @returns {Boolean} true if successful\n */\n this.getGlyphset = function () {\n return parent;\n }\n\n /**\n * Set and update the text containing this glyph.\n * @param {String} text - Label to be set for this instance\n */\n this.setLabel = text => {\n if (text && (typeof text === 'string' || text instanceof String)) {\n labelString = text;\n if (this.morph)\n this.morph.name = text;\n }\n if (label)\n this.showLabel();\n }\n\n /**\n * Display label with the choosen colour. It will replace the current\n * label.\n * @param {THREE.Color} colour - Colour for the label.\n */\n this.showLabel = (colour) => {\n if (label) {\n position = label.getPosition();\n group.remove(label.getSprite());\n label.dispose();\n label = undefined;\n }\n if (labelString && (typeof labelString === 'string' || labelString instanceof String)) {\n let position = [0, 0, 0];\n label = new (require('./label').Label)(labelString, colour);\n label.setPosition(position[0], position[1], position[2]);\n group.add(label.getSprite());\n }\n }\n\n /**\n * Get the group containing the label and mesh.\n * @return {THREE.Group}\n */\n this.getGroup = () => {\n return group;\n }\n\n /**\n * Get the label of this glyph\n * @return {Label}\n */\n this.getLabel = () => {\n return labelString;\n }\n\n /**\n * Get the mesh of this glyph.\n * @return {THREE.Mesh}\n */\n this.getMesh = () => {\n return this.morph;\n }\n\n /**\n * Set the transformation of this glyph.\n * @param {Array} position - Three components vectors containing position of the\n * transformation.\n * @param {Array} axis1 - Three components vectors containing axis1 rotation of the\n * transformation.\n * @param {Array} axis2 - Three components vectors containing axis2 rotation of the\n * transformation.\n * @param {Array} position - Three components vectors containing axis3 rotation of the\n * transformation.\n */\n this.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 if (label)\n label.setPosition(position[0], position[1], position[2]);\n }\n\n /**\n * Set the color of the glyph and its label.\n * \n * @param {THREE.Color} color - Colour to be set.\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 /**\n * Clear and free its memory.\n */\n this.dispose = () => {\n if (this.material)\n this.material.dispose();\n this.morph = undefined;\n }\n}\n\nGlyph.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyph = Glyph;\n","const SpriteText = require('three-spritetext').default;\n\n/**\n * Bitmap labels, this is used with {@link Glyph} to \n * provide labels.\n * \n * @param {String} textIn - Text to be displayed dwith the label.\n * @param {THREE.Color} colour - Colour to be set for the label.\n * \n * @class\n * @author Alan Wu\n * @return {Label}\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 /**\n * Get the current position in an array containing the x, y and z\n * coordinates.\n * \n * @return {Array}\n */\n this.getPosition = () => {\n if (sprite)\n return [sprite.position.x, sprite.position.y, sprite.position.z];\n return [0, 0, 0];\n }\n\n /**\n * Set the position of the label in 3D coordinates.\n * \n * @param {Number} x - x coordinate to be set.\n * @param {Number} y - y coordinate to be set.\n * @param {Number} z - z coordinate to be set.\n */\n this.setPosition = (x, y, z) => {\n if (sprite)\n sprite.position.set(x, y, z);\n }\n\n /**\n * Set the colour of the label\n * \n * @param {THREE.Color} colour - colour to be set\n */\n this.setColour = colour => {\n sprite.color = colour.getStyle();\n }\n\n /**\n * Scale the label.\n * \n * @param {Number} scaling - Scale to be set.\n */\n this.setScale = scaling => {\n if (sprite && scaling > 0.0)\n sprite.scale.set(scaling, scaling, 1.0);\n }\n\n /**\n * Free up the memory\n */\n this.dispose = () => {\n sprite.dispose();\n }\n\n /**\n * Get the intrnal sprite.\n * \n * @return {THREE.Sprite}\n */\n this.getSprite = () => {\n return sprite;\n }\n\n /**\n * Get the text.\n * \n * @return {String}\n */\n this.getString = () => {\n return text;\n }\n\n};\n\n\n\n","module.exports = require(\"three-spritetext\");","const THREE = require('three');\nconst JSONLoader = require('../loaders/JSONLoader').JSONLoader;\n\n/**\n * This is a container of {@link 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 {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 const _current_positions = [];\n const _current_axis1s = [];\n const _current_axis2s = [];\n const _current_axis3s = [];\n const _current_scales = [];\n const _current_colors = [];\n const _glyph_axis_array = [];\n for (let i = 0; i < 8; i++) {\n _points[i] = new THREE.Vector3();\n }\n\n /**\n * Get the {@link Three.Group} containing all of the glyphs' meshes.\n * @returns {Three.Group}\n */\n this.getGroup = () => {\n return this.morph;\n }\n\n /**\n * Copy glyphset data into this glyphset then load the glyph's geoemtry \n * with the provided glyphURL. FinishCallback will be called once\n * glyph is loaded.\n * \n * @param {Array} glyphsetData - contains the informations about the glyphs.\n * @param {String} glyphURL - URL to the geometry which will be applied to all\n * all the glyphs in the glyphset once loaded.\n * @param {Function} finishCallback - User's function to be called once glyph's\n * geometry is loaded.\n */\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 /**\n * Calculate the actual transformation value that can be applied \n * to the transformation matrix.\n * \n * @returns {Array}\n */\n const resolve_glyph_axes = (point, axis1, axis2, axis3, scale, 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[0] = [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[1] = [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[k] = [final_point, final_axis1, final_axis2, final_axis3];\n }\n }\n return return_arrays;\n };\n\n /**\n * Update transformation for each of the glyph in this glyphset.\n */\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 _glyph_axis_array.length = numberOfGlyphs;\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, _glyph_axis_array);\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 /**\n * Update colour for each of the glyph in this glyphset.\n */\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 /**\n * Update the current states of the glyphs in this glyphset, this includes transformation and\n * colour for each of them. This is called when glyphset and glyphs are initialised and whenever\n * the internal time has been updated.\n */\n const updateMorphGlyphsets = () => {\n const current_positions = _current_positions;\n const current_axis1s = _current_axis1s;\n const current_axis2s = _current_axis2s;\n const current_axis3s = _current_axis3s;\n const current_scales = _current_scales;\n const current_colors = _current_colors;\n\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 _current_positions.length = bottom_positions.length;\n _current_axis1s.length = bottom_positions.length;\n _current_axis2s.length = bottom_positions.length;\n _current_axis3s.length = bottom_positions.length;\n _current_scales.length = bottom_positions.length;\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions[i] = proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i];\n current_axis1s[i] = proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i];\n current_axis2s[i] = proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i];\n current_axis3s[i] = proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i];\n current_scales[i] = 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 current_colors.length = bottom_colors.length;\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[i] = _bot_colour.getHex();\n }\n /*\n for (var i = 0; i < bottom_colors.length; i++) {\n current_colors.push(proportion * bottom_colors[i] + (1.0 - proportion) * top_colors[i]);\n }\n */\n } else {\n current_colors = colors[\"0\"];\n }\n updateGlyphsetHexColors(current_colors);\n }\n };\n\n /**\n * Display the label of the glyphs in the glyphset.\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 /**\n * Create the glyphs in the glyphset.\n * \n * @param {Boolean} displayLabels -Flag to determine either the labels should be display or not.\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 /**\n * Add a custom {@link Glyph} to this {@link Glyphset}.\n * \n * @param {Glyph} Glyph to be added.\n */\n this.addCustomGlyph = glyph => {\n if (glyph.isGlyph)\n glyphList.push(glyph);\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Add a THREE.Mesh object to be displayed as glyph in this {@link Glyphset}.\n * \n * @param {THREE.Mesh} Mesh to be added.\n * @param {Number} id of the mesh.\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 /**\n * A function which iterates through the list of glyphs and call the callback\n * function with the glyph as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the glyph\n * as an argument.\n */\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.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.closestVertexIndex]) {\n glyphList[this.closestVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.closestVertexIndex, _transformMatrix);\n position.setFromMatrixPosition(_transformMatrix);\n return position;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get the bounding box for the whole set of glyphs.\n * \n * @return {Three.Box3};\n */\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 _boundingBox2.copy(_boundingBox1).applyMatrix4(_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.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n } else\n return undefined;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n\n /**\n * Set the local time of this glyphset.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\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 /**\n * Get the current inbuild time of the \n * \n * @return {Number}\n */\n this.getCurrentTime = () => {\n return this.inbuildTime;\n }\n\n\n /**\n * Clear this glyphset and its list of glyphs which will release them from the memory.\n */\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 /**\n * Update the glyphsets if required the render.\n */\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;\nvar VideoHandler = require('../videoHandler').VideoHandler;\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 this.paramsString = \"\";\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\n const params = url.split(\"?\");\n\n //There are parameters, add them to the target\n if (url.length === 2) {\n\n this.paramsString = paramsStrings[1];\n\n } else {\n\n this.paramsString = \"\";\n\n }\n\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 if (scope && scope.parse) {\n var object = scope.parse( json, texturePath );\n onLoad( object.geometry, object.materials );\n }\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\n if (this.paramsString) {\n\n fullPath = fullPath + `?${this.paramsString}`;\n \n }\n\n\t\t\t\t\tconst videoHandler = new 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 * Provide basic functionality to display video as texture.\n * VideoTexture is used for creating and updating a video projected onto a Three.js texture\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {VideoHandler}\n */\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 {Pointset}\n */\nconst Pointset = function () {\n (require('./zincObject').ZincObject).call(this);\n this.isPointset = true;\n\n /** Shape of the points is created using the function below */\n const getCircularTexture = () => {\n var image = new Image();\n image.src = require(\"../assets/disc.png\");\n const texture = new THREE.Texture();\n texture.image = image;\n texture.needsUpdate = true;\n return texture;\n }\n\n /**\n * Create the pointsets using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of points to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n this.createMesh = (geometryIn, materialIn, options) => {\n if (geometryIn && materialIn) {\n let geometry = this.toBufferGeometry(geometryIn, options);\n const texture = getCircularTexture();\n materialIn.map = texture;\n let point = new Points(geometry, materialIn);\n this.setMesh(point, options.localTimeEnabled, options.localMorphColour);\n }\n }\n\n /**\n * Set the size of the points.\n * \n * @param {Number} size - size to be set.\n */\n this.setSize = size => {\n if (this.morph && this.morph.material) {\n this.morph.material.size = size;\n this.morph.material.needsUpdate = true;\n }\n }\n\n /**\n * Turn size attenuation on/off based on the flag.\n * \n * @param {Boolean} flag - Determin either size attenuation\n * should be on or off.\n */\n this.setSizeAttenuation = flag => {\n if (this.morph && this.morph.material) {\n this.morph.material.sizeAttenuation = flag;\n this.morph.material.needsUpdate = true;\n }\n }\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/**\n * Provides an object which stores lines.\n * This is created when a valid json file containing lines is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Lines}\n */\nconst Lines = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isLines = true;\n\n /**\n * Create the line segements using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of lines to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\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}\n\t}\n\n\n /**\n * Set the width for the lines.\n * \n * @param {Number} width - Width of the lines.\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');\n\n/**\n * Texture array object for holding array of images into\n * texures unit that can be used by other texture primitives.\n * \n * @class\n * @author Alan Wu\n * @return {TextureArray}\n */\nconst TextureArray = function () {\n (require('./texture').Texture).call(this);\n this.isTextureArray = true;\n\n\n /**\n * Read images from an array containg src locations.\n * \n * @async\n * @param {Array} srcArrays - List of source location of the images.\n */\n this.loadFromImages = async function (srcArrays) {\n let w = 1;\n let h = 1;\n let d = 0;\n if (srcArrays && srcArrays.length) {\n this.isLoading = true;\n const image = new Image();\n image.crossOrigin = \"Anonymous\";\n const canvas = document.createElement(\"canvas\");\n let length = 0;\n const dataStacks = new Array(srcArrays.length);\n for (let i = 0; i < srcArrays.length; i++) {\n const data = await this.imageToUint8Array(image, srcArrays[i], canvas);\n if (data && data.array) {\n w = data.width;\n h = data.height;\n dataStacks[d] = data.array;\n length += dataStacks[d].length;\n d++;\n }\n }\n const fullArray = new Uint8Array(length);\n length = 0;\n dataStacks.forEach(data => {\n fullArray.set(data, length);\n length += data.length;\n });\n\n this.impl = new THREE.DataTexture2DArray(fullArray, w, h, d);\n this.size = {\n width: w,\n height: h,\n depth: d\n };\n this.isLoading = false;\n }\n }\n\n /**\n * Get and create the material containing shaders and the textures.\n * The texture must be read and ready before calling this function.\n * \n *\n * @param {Object} options - Customise the material with the options object.\n * @param {String} options.fs - string of the fragment shader used for \n * visualisation.\n * @param {String} options.vs - string of the vertex shader used for \n * visualisation.\n * @param {Object} options.uniforms - Containing the data to be passed into the shaders.\n * @param {String} options.glslVersion - Version of glsl used for compile this shader.\n * \n */\n this.getMaterial = function (options) {\n if (this.impl) {\n let material = undefined;\n if (options) {\n if (options.vs && options.fs) {\n let transparent = true;\n if (options.transparent)\n transparent = options.transparent;\n let side = THREE.FrontSide;\n if (options.side)\n side = options.side;\n material = new THREE.ShaderMaterial({\n transparent,\n uniforms: options.uniforms,\n vertexShader: options.vs,\n fragmentShader: options.fs,\n side\n });\n if (options.glslVersion) {\n material.glslVersion = options.glslVersion;\n }\n }\n } else {\n material = new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 1, 1),\n transparent: false,\n opacity: 1.0,\n map: this.impl,\n side: THREE.DoubleSide\n });\n }\n if (material) {\n material.needsUpdate = true;\n return material;\n }\n }\n }\n}\n\nTextureArray.prototype = Object.create((require('./texture').Texture).prototype);\nexports.TextureArray = TextureArray;\n","const THREE = require('three');\n\n/**\n * Base texture object for importing images and turning them into\n * texures unit that can be used by other texture primitives.\n * \n * @class\n * @author Alan Wu\n * @return {Texture}\n */\nconst Texture = function () {\n this.isTexture = true;\n this.impl = undefined;\n this.isLoading = false;\n this.size = {\n width: 1,\n height: 1,\n depth: 0\n };\n}\n\n/**\n * Read an image from src.\n * \n * @async\n * @param {Image} img - An image object.\n * @param {String} src - Source location of the image.\n * \n * @return {Promise} img on resolve.\n */\nTexture.prototype.loadImage = function (img, src) {\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = src;\n })\n}\n\n/**\n @typedef IMAGE_UINT8_RETURN\n @type {Set}\n @property {Uint8Array} array - Array containing the uint8 image value.\n @property {Number} width - Phyiscal image width.\n @property {Number} height - Phyiscal image height.\n */\n/**\n * Read an image from src and turn it into Uint8Array.\n * \n * @async\n * @param {Image} img - An image object.\n * @param {String} src - Source location of the image.\n * @param {Canvas} canvas - Canvas html element used for the conversion.\n * \n * @return {IMAGE_UNIT8_RETURN}\n */\nTexture.prototype.imageToUint8Array = async function (img, src, canvas) {\n await this.loadImage(img, src);\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n return {\n array: new Uint8Array(ctx.getImageData(0, 0, canvas.width, canvas.height).data.buffer),\n width: canvas.width,\n height: canvas.height\n };\n}\n\nTexture.prototype.loadFromImages = async function (srcArrays) {\n return\n}\n\n/**\n * Return true if the texture is ready for consumption.\n * \n * @return {Boolean}\n */\nTexture.prototype.isReady = function () {\n if (this.impl && !this.isLoading)\n return true;\n return false;\n}\n\n/**\n * Return true if the texture is ready for consumption, otherwise false.\n * \n * @return {Boolean}\n */\nTexture.prototype.getMaterial = function () {\n if (this.impl) {\n return new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 1, 1),\n transparent: false,\n opacity: 1.0,\n map: this.impl,\n side: THREE.DoubleSide\n });\n }\n}\n\nexports.Texture = Texture;\n","const THREE = require('three');\nconst shader = require(\"../shaders/textureSlide.js\");\n/**\n * Provides a class which create a texture stacks in a block\n * with shaders allowing slices of texture to be displayed.\n * \n * @param {TextureArray} textureIn - An object of texture array\n * holding texture information.\n * \n * @class\n * @author Alan Wu\n * @return {TextureSlides}\n */\nconst TextureSlides = function (textureIn) {\n (require('./texturePrimitive').TexturePrimitive).call(this, textureIn);\n this.isTextureSlides = true;\n \n /**\n @typedef SLIDE_SETTINGS\n @type {Set}\n @property {String} direction - the value must be x, y or z, specify the\n direction the slide should be facing.\n @property {Number} value - Normalised value of the location on direction.\n */\n /**\n * Create the slides required for visualisation based on the slide settings.\n * The slides itself is an {THREE.PlanGeometry} object.\n * \n * @param {SLIDE_SETTINGS} slideSettings - An array to each slide settings.\n */\n this.createSlides = slideSettings => {\n if (!this.morph) this.morph = new THREE.Group();\n if (this.texture && this.texture.isTextureArray && this.texture.isReady()) {\n slideSettings.forEach(slide => {\n if (slide.direction && slide.value) {\n const geometry = new THREE.PlaneGeometry( 1, 1 );\n geometry.translate(0.5, 0.5, 0);\n const uniforms = shader.getUniforms();\n uniforms.diffuse.value = this.texture.impl;\n uniforms.depth.value = this.texture.size.depth;\n switch(slide.direction) {\n case \"x\":\n uniforms.slide.value.set(slide.value, 0, 0);\n break;\n case \"y\":\n uniforms.slide.value.set(0, slide.value, 0);\n break;\n case \"z\":\n uniforms.slide.value.set(0, 0, slide.value);\n break;\n default:\n break;\n }\n const options = {\n fs: shader.fs,\n vs: shader.vs,\n uniforms: uniforms,\n glslVersion: shader.glslVersion,\n side: THREE.DoubleSide,\n transparent: false\n };\n const material = this.texture.getMaterial(options);\n material.needsUpdate = true;\n const mesh = new THREE.Mesh( geometry, material );\n this.morph.add(mesh);\n }\n });\n this.boundingBoxUpdateRequired = true;\n }\n }\n\n /**\n * Get the array of slides, return them in an array\n *\n * @return {Array} - Return an array of {@link THREE.Object)\n */\n this.getSlides = () => {\n if (this.morph) return [...this.morph.children];\n return [];\n }\n\n /**\n * Remove a slide, this will dispose the slide and its material.\n *\n * @param {Slide} slide - An array to each slide settings.\n */\n this.removeSlide = slide => {\n if (slide && this.morph) {\n if (this.morph.getObjectById(slide.id)) {\n this.morph.remove(slide);\n slide.disppose();\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n this.boundingBoxUpdateRequired = true;\n }\n }\n }\n\n /**\n * Clean up all internal objects.\n */\n this.dispose = () => {\n this.morph.children.forEach(slide=> {\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n });\n (require('./texturePrimitive').TexturePrimitive).prototype.dispose.call(this);\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Get the bounding box of this slides.\n * It uses the max and min of the slides position and the\n * transformation to calculate the position of the box.\n * \n * @return {THREE.Box3}.\n */\n this.getBoundingBox = function() {\n if (this.morph && this.morph.children && this.morph.visible &&\n this.boundingBoxUpdateRequired) {\n this.morph.children.forEach(slide=> {\n const value = slide.material.uniforms.slide.value;\n this.cachedBoundingBox.expandByPoint(value);\n });\n this.morph.updateWorldMatrix();\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n}\n\n\nTextureSlides.prototype = Object.create((require('./texturePrimitive').TexturePrimitive).prototype);\nexports.TextureSlides = TextureSlides;\n","const THREE = require('three');\n\nconst glslVersion = THREE.GLSL3;\n\nconst fs =\n`\nprecision highp float;\nprecision highp int;\nprecision highp sampler2DArray;\n\nuniform sampler2DArray diffuse;\nin vec3 vUw;\n\nout vec4 outColor;\n\nvoid main() {\n\n vec4 color = texture( diffuse, vUw );\n\n // lighten a bit\n outColor = vec4( color.rgb + .2, 1.0 );\n\n}\n`;\n\nconst vs = \n`\nout vec3 vUw;\nuniform float depth;\nuniform vec3 slide;\n\nvoid main() {\n\n vec3 slidePos = position.xyz;\n\n if (slide.x > 0.0)\n slidePos = vec3(slide.x, position.x, position.y);\n if (slide.y > 0.0)\n slidePos = vec3(position.x, slide.y, position.y);\n if (slide.z > 0.0)\n slidePos = vec3(position.x, position.y, slide.z);\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4( slidePos, 1.0 );\n\n vUw.xyz = vec3(slidePos.x, slidePos.y, slidePos.z * depth);\n\n}\n`;\n\nconst getUniforms = function() {\n return {\n diffuse: { value: undefined },\n depth: { value: 1 },\n slide: { value: new THREE.Vector3( 0, 0, 1 ) }\n };\n}\n\nexports.fs = fs;\nexports.vs = vs;\nexports.glslVersion = glslVersion;\nexports.getUniforms = getUniforms;\n","const THREE = require('three');\n\n/**\n * Provides a base class object which stores textures and rendering object.\n * \n * @class\n * @author Alan Wu\n * @return {TexturePrimitive}\n */\nconst TexturePrimitive = function (textureIn) {\n (require('./zincObject').ZincObject).call(this);\n this.isTexturePrimitive = true;\n this.texture = textureIn;\n}\n\nTexturePrimitive.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.TexturePrimitive = TexturePrimitive;\n","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 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 {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 localRect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\tlocalRect = 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\tlocalRect = 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 (localRect) {\r\n\t\t\t\tcurrentOffset[0] = localRect.left;\r\n\t\t\t\tcurrentOffset[1] = localRect.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 this.isWebGL2 = () => {\r\n if (renderer)\r\n return renderer.capabilities.isWebGL2;\r\n return false;\r\n }\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\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"sc\" + uniqueiId++;\n}\n\nconst defaultMetadata = function() {\n return { \n Duration: \"6 secs\",\n OriginalDuration: \"-\",\n TimeStamps: {}\n }\n};\n\nconst defaultDuration = 6000;\n\n/**\n * A Scene contains {@link Region},and \n * {@link 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 {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 let pickableObjectsList = [];\n this.forcePickableObjectsUpdate = false;\n this.uuid = getUniqueId();\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\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 /** \n * Find a list of objects with the specified name, this will\n * tranverse through the region tree to find all child objects\n * with matching name.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\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 /** \n * Get the bounding box of all zinc objects in list.\n * \n * @param {Array} objectsArray - Groupname to match with.\n * @returns {THREE.Box3}\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 /** \n * Convert the vector3 into screen coordinates.\n * \n * @param {THREE.Vector3} point - Vector 3 containing the point to convert,\n * this vector will be overwritten with the returned value.\n * @param {Array} objectsArray - Groupname to match with.\n * @returns {THREE.Vector3}\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 /** \n * Get the screen coordinate of the centroid of provided list of objects.\n * \n * @param {Array} zincObjects - List of {@link ZincObject}.\n * @returns {THREE.Vector3}\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 /** \n * Get the screen coordinate of the centroid of all objects \n * in scene with the provided name.\n * \n * @param {String} name - List of {@link ZincObject}.\n * @returns {THREE.Vector3}\n */\n this.getNamedObjectsScreenXY = name => {\n let zincObjects = this.findObjectsWithGroupName(name);\n return this.getObjectsScreenXY(zincObjects);\n };\n\n /** \n * Add zinc object into the root {@link Region} of sfcene.\n * \n * @param {ZincObject} - zinc object ot be added.\n * @returns {THREE.Vector3}\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 //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 * @return {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Enable or disable stereo effect of this scene.\n * @param {Boolean} stereoFlag - 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\n /**\n * Check rather object is in scene.\n * \n * @return {Boolean}\n */\n this.objectIsInScene = zincObject => {\n return rootRegion.objectIsInRegion(zincObject, true);\n }\n\n /**\n * Transition the camera view to view the entirety of the \n * bounding box with a smooth transition within the providied\n * transitionTime.\n * \n * @param {THREE.Box3} boundingBox - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\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 /**\n * Transition the camera into viewing the zinc object with a \n * smooth transition within the providied transitionTime.\n * \n * @param {ZincObject} zincObject - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\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 /**\n * Set the camera to point to the centroid of the zinc object.\n * \n * @param {ZincObject} zincObject - the bounding box to target\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 * Update pickable objects list\n */\n this.updatePickableThreeJSObjects = () => {\n pickableObjectsList.splice(0, pickableObjectsList.length);\n rootRegion.getPickableThreeJSObjects(pickableObjectsList,\n this.displayMarkers, true);\n this.forcePickableObjectsUpdate = false;\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = () => {\n //The list will only be updated if changes have been made\n //in region or a flag has been raise\n if (this.forcePickableObjectsUpdate || \n rootRegion.checkPickableUpdateRequred(true)) {\n this.updatePickableThreeJSObjects();\n }\n return pickableObjectsList;\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 this.isWebGL2 = () => {\n return rendererIn.isWebGL2();\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 /**\n * Export the scene in GLTF format, it can either return it in\n * string or binary form.\n * \n * @param {Boolean} binary - Indicate it should be exported as binary or\n * text.\n * \n * @return {Promise} The exported data if the promise resolve successfully\n */\n this.exportGLTF = (binary) => {\n const exporter = new SceneExporter(this);\n return exporter.exportGLTF(binary);\n }\n\n /**\n * Get the root region of the scene.\n * \n * @return {Region} Return the root region of the scene\n */\n this.getRootRegion = () => {\n return rootRegion;\n }\n}\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\nconst STLLoader = require('./loaders/STLLoader').STLLoader;\nconst OBJLoader = require('./loaders/OBJLoader').OBJLoader;\nconst PrimitivesLoader = require('./loaders/primitivesLoader').PrimitivesLoader;\n\nconst createNewURL = (target, reference) => {\n let newURL = (new URL(target, reference)).href;\n //Make sure the target url does not contain parameters\n if (target && target.split(\"?\").length < 2) {\n const paramsStrings = reference.split(\"?\");\n //There are parameters, add them to the target\n if (paramsStrings.length === 2) {\n newURL = newURL + \"?\" + paramsStrings[1];\n }\n }\n return newURL;\n}\n\n/**\n * A helper class to help with reading / importing primitives and\n * settings into a {@link Scene}.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {SceneLoader}\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 const primitivesLoader = new PrimitivesLoader();\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 = finishCallback => {\n return xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n if (finishCallback) {\n finishCallback();\n }\n }\n };\n\n let loadMultipleViews = (referenceURL, views) => {\n const defaultView = views.Default;\n if (views.Inline) {\n scene.setupMultipleViews(defaultView, views.Entries);\n } else {\n const promises = [];\n for (const [key, value] of Object.entries(views.Entries)) {\n if (referenceURL) {\n newURL = createNewURL(value, referenceURL);\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 --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n } else {\n this.onError();\n }\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 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 primitivesLoader.load(resolveURL(filename), meshloader(region, colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, finishCallback), this.onProgress(i), this.onError(finishCallback));\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.SceneLoader.#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 * 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 if (isInline) {\n var object = primitivesLoader.parse( url );\n (linesloader(region, localTimeEnabled, localMorphColour, groupName, anatomicalId,\n renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, linesloader(region, localTimeEnabled, localMorphColour, groupName, \n anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError(finishCallback));\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: 10, 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 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 = primitivesLoader;\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 = primitivesLoader.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 primitivesLoader.load(url, meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError(finishCallback));\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 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 = primitivesLoader.parse( url );\n (pointsetloader(region, localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, finishCallback))(object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, pointsetloader(region, localTimeEnabled, localMorphColour,\n groupName, anatomicalId, renderOrder, finishCallback),\n this.onProgress(i), this.onError(finishCallback));\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 if (region) 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 = createNewURL(item.URL, referenceURL);\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 = createNewURL(item.GlyphGeometriesURL, referenceURL);\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 = createNewURL(item.URL, referenceURL);\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 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 GLTFToZincJSLoader = new (require('./loaders/GLTFToZincJSLoader').GLTFToZincJSLoader)();\n GLTFToZincJSLoader.load(scene, region, url, finishCallback, options);\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 getNumberOfDownloadsInArray = (array, includeViews) => {\n if (Array.isArray(array)) {\n let count = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i].Type && (\n (includeViews && array[i].Type === \"View\") ||\n array[i].Type === \"Surfaces\" ||\n array[i].Type === \"Glyph\" ||\n array[i].Type === \"Points\" ||\n array[i].Type === \"Lines\"))\n {\n count++;\n }\n }\n return count;\n }\n return 0;\n }\n\n let getNumberOfObjectsInRegions = (regionJson) => {\n let counts = regionJson.Primitives ? \n getNumberOfDownloadsInArray(regionJson.Primitives, false) : 0;\n if (regionJson.Children) {\n Object.values(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 getNumberOfDownloadsInArray(metadata, true);\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 readVersionOneRegionPath = (region, referenceURL, item, order, callback) => {\n let targetRegion = region;\n if (item.RegionPath && item.RegionPath !== \"\") {\n targetRegion = region.findOrCreateChildFromPath(item.RegionPath);\n }\n //Render order is set to i * 2 to account for front and back rendering\n readPrimitivesItem(targetRegion, referenceURL, item, order * 2, callback);\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 readVersionOneRegionPath(targetRegion, referenceURL, metadata[i], i, 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","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils,\n\tVector3\n} from 'three';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nclass STLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tconst n_faces = reader.getUint32( 80, true );\n\t\t\tconst expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful. So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tconst solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( let off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( let i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i, false ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst faces = reader.getUint32( 80, true );\n\n\t\t\tlet r, g, b, hasColors = false, colors;\n\t\t\tlet defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( let index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst dataOffset = 84;\n\t\t\tconst faceLength = 12 * 4 + 2;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tconst normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\t\tconst start = dataOffset + face * faceLength;\n\t\t\t\tconst normalX = reader.getFloat32( start, true );\n\t\t\t\tconst normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tconst normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tconst packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tconst vertexstart = start + i * 12;\n\t\t\t\t\tconst componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolors[ componentIdx ] = r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tconst patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tlet faceCounter = 0;\n\n\t\t\tconst patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tconst patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tconst patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tlet result;\n\n\t\t\tlet groupCount = 0;\n\t\t\tlet startVertex = 0;\n\t\t\tlet endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tconst solid = result[ 0 ];\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tlet vertexCountPerFace = 0;\n\t\t\t\t\tlet normalCountPerFace = 0;\n\n\t\t\t\t\tconst text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst start = startVertex;\n\t\t\t\tconst count = endVertex - startVertex;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn LoaderUtils.decodeText( new Uint8Array( buffer ) );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tconst array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( let i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tconst binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n}\n\nexport { STLLoader };\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\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\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet line = '', lineFirstChar = '';\n\t\tlet lineLength = 0;\n\t\tlet result = [];\n\n\t\t// Faster to just trim left side of the line. Use if available.\n\t\tconst trimLeft = ( typeof ''.trimLeft === 'function' );\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tline = lines[ i ];\n\n\t\t\tline = trimLeft ? line.trimLeft() : line.trim();\n\n\t\t\tlineLength = line.length;\n\n\t\t\tif ( lineLength === 0 ) continue;\n\n\t\t\tlineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue;\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( /\\s+/ );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\tstate.colors.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\n\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( /\\s+/ );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].substr( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].substr( 1 ).trim() ).substr( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t * or\n\t\t\t\t\t * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n","const JSONLoader = require('./JSONLoader').JSONLoader;\n\nexports.PrimitivesLoader = function () {\n let concurrentDownloads = 0;\n const MAX_DOWNLOAD = 20;\n this.crossOrigin = \"Anonymous\";\n const loader = new JSONLoader();\n const waitingList = [];\n\n this.load = (url, onLoad, onProgress, onError) => {\n if (MAX_DOWNLOAD > concurrentDownloads) {\n ++concurrentDownloads;\n loader.crossOrigin = this.crossOrigin;\n const onLoadCallback = new onFinally(onLoad, this);\n const onErrorCallback = new onFinally(onError, this);\n loader.load(url, onLoadCallback, onProgress, onErrorCallback);\n } else {\n waitingList.push({\n url,\n onLoad,\n onProgress,\n onError\n });\n }\n }\n\n this.loadFromWaitingList = () => {\n const item = waitingList.shift();\n if (item)\n this.load(item.url, item.onLoad, item.onProgress, item.onError);\n }\n\n const onFinally = function(callback, loader) {\n return (...args) => {\n --concurrentDownloads;\n callback(...args);\n loader.loadFromWaitingList();\n }\n }\n\n\n this.parse = data => {\n return loader.parse(data);\n }\n\n}\n","const THREE = require('three');\n\nconst GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader').GLTFLoader;\n\nconst GLTFToZincJSLoader = function () {\n\n const _this = this;\n\n this.parseGLTFObjects = (object, region, depth, finishCallback) => {\n let childRegion = region;\n if (depth !== 0) {\n if (object.type === \"Object3D\") {\n if (object.name !== \"\") {\n if (region)\n childRegion = region.findOrCreateChildFromPath(object.name);\n if (childRegion) {\n const group = childRegion.getGroup();\n group.position.copy(object.position);\n group.rotation.copy(object.rotation);\n group.quaternion.copy(object.quaternion);\n group.matrixAutoUpdate = true;\n }\n }\n } else {\n let zincGeometry = undefined;\n if (object.type === \"Mesh\") {\n zincGeometry = new (require('../primitives/geometry').Geometry)();\n } else if (object.type === \"LineSegments\") {\n zincGeometry = new (require('../primitives/lines').Lines)();\n } else if (object.type === \"Points\") {\n zincGeometry = new (require('../primitives/pointset').Pointset)();\n }\n if (zincGeometry) {\n let localTimeEnabled = false;\n let localMorphColour = false;\n if (object.geometry && object.geometry.morphAttributes) {\n localTimeEnabled = object.geometry.morphAttributes.position ? true : false;\n localMorphColour = object.geometry.morphAttributes.color ? true : false;\n }\n zincGeometry.setMesh(object.clone(), localTimeEnabled, localMorphColour);\n region.addZincObject(zincGeometry);\n zincGeometry.groupName = zincGeometry.morph.name;\n zincGeometry.morph.matrixAutoUpdate = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n }\n }\n depth++;\n object.children.forEach( child => {\n _this.parseGLTFObjects(child, childRegion, depth, finishCallback);\n });\n }\n\n this.setCamera = scene => {\n scene.viewAll();\n const cameraControls = scene.getZincCameraControls();\n const viewport = cameraControls.getCurrentViewport();\n cameraControls.addViewport('default', viewport);\n cameraControls.setDefaultViewport('default');\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.load = (scene, region, url, finishCallback, allCompletedCallback, 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 \n loader.load( filename, function ( gltf ) {\n console.log(gltf)\n _this.parseGLTFObjects(gltf.scene, region, 0, finishCallback);\n _this.setCamera(scene);\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n });\n }\n}\n\nexports.GLTFToZincJSLoader = GLTFToZincJSLoader;\n","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 {SceneExporter}\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\n/**\n * Object with containg viewport information used in ZincJS.\n * \n * @class\n * @author Alan Wu\n * @return {Viewport}\n */\nconst Viewport = function () {\n /** @property {Number} */\n\tthis.nearPlane = 0.168248;\n /** @property {Number} */\n\tthis.farPlane = 6.82906;\n /**@property {Array} */\n\tthis.eyePosition = [0.5, -2.86496, 0.5];\n /** @property {Array} */\n\tthis.targetPosition = [0.5, 0.5, 0.5];\n /** @property {Array} */\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/**\n * Provides the basic controls for a scene.\n * \n * @class\n * @author Alan Wu\n * @return {CameraControls}\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 /** \n * Actions states.\n * Available states are NONE, ROTATE, ZOOM, PAN, TOUCH_ROTATE, TOUCH_ZOOM, TOUCH_PAN and SCROLL.\n * @property {Object} \n */\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 /** \n * Available click actions are MAIN, AUXILIARY and SECONARY.\n * @property {Object} \n */\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 /**\n * Add a viewport to the list of available named viewports.\n * \n * @param {String} name - Name of the viewport\n * @param {Viewport} viewportName - Viewport to be added\n */\n this.addViewport = (viewportName, viewport) => {\n if (viewportName && viewport)\n viewports[viewportName] = viewport;\n }\n\n /**\n * Set the default viewport for this {@link CameraControls}.\n * \n * @param {String} defaultName - Name of the viewport\n * \n * @return {Boolean} true if set successfully, false otherwise.\n */\n this.setDefaultViewport = defaultName => {\n\t\tif (defaultName && (defaultName in viewports)) {\n defaultViewport = defaultName;\n return true;\n }\n return false\n\t}\n\n /**\n * Get the name of the default viewport.\n * \n * \n * @return {String}\n */\n this.getDefaultViewport = () => {\n\t\treturn defaultViewport;\n\t}\n\t\n /**\n * Get the viewport with the provied name stored in this object.\n * @param {String} name - Name of the viewport\n * \n * @return {Viewport}\n */\n\tthis.getViewportOfName = name => {\n\t\treturn viewports[name];\n\t}\n\n /**\n * Set the viewport with a name if it is found in the list.\n * @param {String} name - Name of the viewport\n * \n * @return {Boolean} if viewport is found and set, otherwise false.\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 /**\n * Set the direction of rotation allowed with this control.\n * \n * @param {String} mode - available options are none, horizontal,\n * vertical and free.\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\n /**\n * Get normalised coordinates from windows coordinates.\n * \n * @param {String} x\n * @param {String} y\n * @param {THREE.Vector2} positionIn - Optional, write the value into\n * this object if it is provided, otherwise a new object will \n * be created and returned.\n * \n * @return {THREE.Vector2} containing the normalised x and y coordinates.\n */\n this.getNDCFromDocumentCoords = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n const out_x = ((x - rect.left) / rect.width) * 2 - 1;\n const out_y = -((y - rect.top) / rect.height) * 2 + 1;\n return position.set(out_x, out_y);\n }\n\n /**\n * Get the relative windows coordinates from normalised coordiantes.\n * \n * @param {String} x \n * @param {String} y\n * @param {THREE.Vector2} positionIn - Optional, write the value into\n * this object if it is provided, otherwise a new object will \n * be created and returned.\n * \n * @return {THREE.Vector2} containing the relative x and y coordinates.\n */\n this.getRelativeCoordsFromNDC = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n position.x = (x + 1) * rect.width / 2.0;\n position.y = (1 - y) * rect.height / 2.0;\n return position;\n }\n\n /**\n * Map a mouse click to the specified action.\n * \n * @param {String} buttonName - please see {@link CLICK_ACTION}\n * @param {String} actionName - please see {@link STATE}\n */\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 updateRect(false);\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 updateRect(false);\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 updateRect(false);\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\n const onDocumentEnter = () => {\n\t\tupdateRect(true);\n\t}\n\n const updateRect = forced => {\n //Use intersectionObserver to reset the rect for ray tracing.\n if (forced || rect === undefined) {\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n rect = entry.boundingClientRect;\n }\n observer.disconnect();\n });\n \n observer.observe(this.domElement);\n }\n }\n\t\n\tconst onDocumentWheelEvent = event => {\n updateRect(false);\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 /**\n * Rotate around the axis with the amount specified by angle.\n * \n * @param {THREE.Vector3} axis - The rotational axis.\n * @param {Number} Angle - Specify how much the camera shoudl rotate by.\n */\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\n /**\n * Force an update to the position of the directional light.\n */\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 * Enable the camera control.\n */\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 this.domElement.addEventListener( 'mouseenter', onDocumentEnter, false );\n\t }\n\t}\n\n /**\n * Disable the camera control.\n */\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 this.domElement.removeEventListener( 'mouseenter', onDocumentEnter, 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 /**\n * This is an experimental feature. It loads a path - point to point which\n * the camera will travel.\n * \n * @param {String} path_url - The path.\n * @param {requestCallback} finishCallback - The callback once the path is load.\n */\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\n /**\n * Set the duration for the camera to travel along the path.\n * \n * @param {Number} durationIn - the duration for the path.\n */\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 /**\n * Get the playRate - this determines how fast it takes to \n * finish one duration.\n * \n * @return {Number}\n */\n\t this.getPlayRate = () => {\n\t return playRate;\n\t }\n\t\n /**\n * Set the playRate - this determines how fast it takes to \n * finish one duration.\n * \n * @param {Number} playRateIn - The play rate speed.\n */\n\tthis.setPlayRate = playRateIn => {\n\t\tplayRate = playRateIn;\n\t}\n\n /**\n * Update the internal timer by the set amount, this can\n * be used to force a time update by setting delta to zero.\n * \n * @param {Number} delta - The amount of time to increment\n * the time by.\n */\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 /**\n * Get the current inbuild time,\n * \n * @return {Number}\n */\n\t this.getTime = () => {\n\t return inbuildTime;\n\t }\n\t\n /**\n * Set the current inbuild time,\n * \n * @param {Number} timeIn - this will be used as the current time,\n * it should be between the range of zero and the set duration.\n */\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 /**\n * Get the number of frame which is determine by number of points\n * in the camera path.\n * \n * @return {Number}\n */\n\tthis.getNumberOfTimeFrame = () => {\n\t\treturn numberOfCameraPoint;\n\t}\n\n /**\n * Get the current time frame and it will return three values in\n * an array.\n * \n * @return {Array} - bottom frame, top frame and the proportion.\n */\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 /**\n * Set the current time frame.\n * \n * @param {Number} targetTimeFrame - bottom frame, top frame and the proportion.\n */\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 /**\n * Update the progress on the path by the specified amount - delta.\n * \n * @param {Number} delta - The amount of time to increment\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 /**\n * Force recalculation of the current path.\n */\n\tthis.calculatePathNow = () => {\n\t updatePath(0.0);\n\t}\n\n // handle synchronised control based on information in the idc\n const 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 /**\n * Update all controls related changes - including calculation of the viewport.\n * \n * @param {Number} timeChanged - Time eclipse since last called.\n */\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 /**\n * Switch to path mode and begin traveling through the camera path.\n */\n\tthis.playPath = () => {\n\t\tcurrentMode = MODE.PATH;\n\t}\n\n /**\n * Stop playing path and switch back to normal control.\n */\n\tthis.stopPath = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\t\n /**\n * Check rather the control is currently in path mode.\n * \n * @return {Boolean}\n */\n\tthis.isPlayingPath = () => {\n\t\treturn (currentMode === MODE.PATH);\n\t}\n\t\n /**\n * Enable directional light update as the camera\n * is traveling through path.\n * \n * @param {Boolean} flag\n */\n\tthis.enableDirectionalLightUpdateWithPath = flag => {\n\t\tupdateLightWithPathFlag = flag;\n\t}\n\t\n /**\n * Enable rotation using the devices's accelerometer.\n */\n\tthis.enableDeviceOrientation = () => {\n\t\tif (!deviceOrientationControl)\n\t\t\tdeviceOrientationControl = new ModifiedDeviceOrientationControls(this.cameraObject);\n\t}\n\n /**\n * Disable rotation using the devices's accelerometer.\n */\n\tthis.disableDeviceOrientation = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.dispose();\n\t\t\tdeviceOrientationControl = undefined;\n\t\t}\n\t}\n\n /**\n * Check rather device orientation based on accelerometer is on.\n */\n\tthis.isDeviceOrientationEnabled = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n /**\n * Reset the viewport settings to the one provided by default viewport.\n */\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 /**\n * Set the current camera settings with the provided viewport.\n * \n * @param {Viewport} newViewport - viewport settings.\n */\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\n /**\n * Get the viewport based on centre, radius, view_angle and clip distance.\n * \n * @param {Number} centreX - x coordinate of the centre.\n * @param {Number} centreY - y coordinate of the centre.\n * @param {Number} centreZ - z coordinate of the centre.\n * @param {Number} radius - radius if the viewport.\n * @param {Number} view_angle - view angle.\n * @param {Number} clip_distance - clip_distance between the near and far plane.\n * \n * @return {Viewport}\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 /**\n * Get the current camera viewport.\n * \n * @return {Viewport}\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\n /**\n * Setup a smooth transition object which transition the camera from one \n * viewport to the other in the specified duration. This will not work if \n * {@link rotateCameraTransition} is active.\n * To use this object, the transition must be enabled using\n * {@link enableCameraTransition}.\n * \n * @param {Viewport} startingViewport - the starting viewport\n * @param {Viewport} endingViewport - the viewport ti end the transistion with.\n * @param {Number} durationIn - duration of the smooth transition.\n */\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\n /**\n * Setup a rotate camera transition object which rotate the \n * camera by the specified the angle in the specified \n * duration. This will not work if {@link cameraTransition}\n * is active.\n * To use this object, the transition must be enabled using\n * {@link enableCameraTransition}.\n * \n * @param {THREE.Vector3} axis - the starting viewport\n * @param {Number} angle - the viewport ti end the transistion with.\n * @param {Number} duration - duration of the smooth transition.\n */\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\n /**\n * Enable camera transition, {@link rotateCameraTransition} amd\n * {@link cameraTransition} must be called before camera transition can\n * be enabled.\n */\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\n /**\n * Pause the camera transition.\n */\n\tthis.pauseCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\n /**\n * Stop the camera transition and remove camera transition\n * and rotate camera transition.\n */\n\tthis.stopCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tsmoothCameraTransitionObject = undefined;\n\t\trotateCameraTransitionObject = undefined;\n\t}\n\n /**\n * Check if camera transition is active.\n */\n\tthis.isTransitioningCamera = () => {\n\t\treturn (currentMode === MODE.SMOOTH_CAMERA_TRANSITION ||\n\t\t currentMode === MODE.ROTATE_CAMERA_TRANSITION);\n\t}\n \n /**\n * Setup auto tumble object of the camera which will rotate the camera\n * around the target as if the user is rotating the camera by mouse/touch\n * interaction.\n * The tumbling will only be enabled with {@link enabelAutoTumble}. \n * \n * @param {Array} tumbleDirectionIn - direction of the mouse/touch.\n * @param {Number} tumbleRateIn - Speed of the tumbling.\n * @param {Boolean} stopOnCameraInputIn - Disable the tumbling once the user\n * start interacting with the scene.\n */\n\tthis.autoTumble = (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn) => {\n\t\tcameraAutoTumbleObject = new CameraAutoTumble(tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, this);\n\t}\n\n /**\n * Enable autotumble.\n */\n\tthis.enableAutoTumble = () => {\n\t\tcurrentMode = MODE.AUTO_TUMBLE;\n\t}\n\n /**\n * Disable the autotumble.\n */\n\tthis.stopAutoTumble = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tcameraAutoTumbleObject = undefined;\n\t}\n\n /**\n * Update the autotumble object.\n */\n\tthis.updateAutoTumble = () => {\n\t\tif (cameraAutoTumbleObject)\n\t\t\tcameraAutoTumbleObject.requireUpdate = true;\n\t}\n\n /**\n * Check rather autotumble is active.\n * \n * @return {Boolean}\n */\n\tthis.isAutoTumble = () => {\n\t\treturn (currentMode === MODE.AUTO_TUMBLE);\n\t}\n\t\n /**\n * Create an internal raycaster object and enable it for picking.\n * \n * @param {Scene} sceneIn - The scene to pick from, it can be different from the\n * camera's scene.\n * @param {requestCallback} callbackFunctionIn - The callback for pick event.\n * @param {requestCallback} hoverCallbackFunctionIn - The callback for hover\n * over event.\n */\n this.enableRaycaster = (sceneIn, callbackFunctionIn, hoverCallbackFunctionIn) => {\n if (zincRayCaster == undefined)\n zincRayCaster = new RayCaster(sceneIn, this.scene, callbackFunctionIn, hoverCallbackFunctionIn, this.renderer);\n }\n\n /**\n * Disable raycaster and remove the internal ray caster object.\n */\n this.disableRaycaster = () => {\n zincRayCaster.disable();\n zincRayCaster = undefined;\n }\n\n /**\n * Check rather the camera is in syncControl mode.\n * \n * @return {Boolean}\n */\n this.isSyncControl = () => {\n return currentMpde === MODE.SYNC_CONTROL;\n }\n\n /**\n * Enable syncControl.\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 /**\n * Disable syncControl.\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 awaiting = false;\n let lastHoveredDate = new Date();\n let lastHoveredEmpty = false;\n let timeDiff = 0;\n let pickedObjects = new Array();\n let lastPosition = { zincCamera: undefined, x: -1 ,y: -1};\n\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\n\tconst getIntersectsObject = (zincCamera, x, y) => {\n zincCamera.getNDCFromDocumentCoords(x, y, mouse);\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 //Reset pickedObjects array \n pickedObjects.length = 0;\n\t\treturn raycaster.intersectObjects( objects, true, pickedObjects );\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tgetIntersectsObject(zincCamera, x, y);\n\t\t\tcallbackFunction(pickedObjects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n getIntersectsObject(zincCamera, x, y);\n lastHoveredDate.setTime(Date.now());\n if (pickedObjects.length === 0) {\n //skip hovered callback if the previous one is empty\n if (lastHoveredEmpty)\n return\n lastHoveredEmpty = true;\n } else {\n lastHoveredEmpty = false;\n }\n hoverCallbackFunction(pickedObjects, 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 lastPosition.zincCamera = zincCamera;\n lastPosition.x = x;\n lastPosition.y = y;\n if (!awaiting) {\n timeDiff = lastHoveredDate ? Date.now() - lastHoveredDate.getTime() : 250;\n if (timeDiff >= 250) {\n hovered(zincCamera, x, y);\n } else {\n awaiting = true;\n setTimeout(awaitMove(lastPosition), timeDiff);\n }\n }\n }\n }\n }\n \n let awaitMove = (lastPosition) => {\n return function() {\n awaiting = false;\n hovered(lastPosition.zincCamera, lastPosition.x, lastPosition.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 uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"re\" + uniqueiId++;\n}\n\n/**\n * Provides a hierachical structure to objects, Each region\n * may contain multiple child regions and {@link ZincObject}.\n * \n * @class\n * @author Alan Wu\n * @return {Region}\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 this.pickableUpdateRequired = true;\n this.isRegion = true;\n this.uuid = getUniqueId();\n \n\n /**\n * Hide all primitives belong to this region.\n */\n this.hideAllPrimitives = () => {\n children.forEach(child => child.hideAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(false));\n }\n\n /**\n * Show all primitives belong to this region.\n */\n this.showAllPrimitives = () => {\n children.forEach(child => child.showAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(true));\n }\n\n /**\n * Set the visibility and propagate it down the hierarchies\n * depending on the flag.\n * \n * @param {Boolean} flag - A flag indicating either the visibilty to be on/off.\n */\n this.setVisibility = (flag) => {\n group.visible = flag;\n }\n\n /**\n * Get the visibility of the region and its children.\n * \n * @return {Boolean}\n */\n this.getVisibility = () => {\n return group.visible;\n }\n\n /**\n * Get the {THREE.Group} containing all child regions and their\n * primitives.\n * \n * @return {THREE.Group}\n */\n this.getGroup = () => {\n return group;\n }\n\n /**\n * Set the transformation with a {THREE.Matrix4} matrix, this will affect\n * all primitives in this and its child regions\n * \n * @param {THREE.Matrix4} transformation - The transformation matrix\n * used for the transformation.\n */\n this.setTransformation = transformation => {\n tMatrix.set(...transformation);\n group.matrix.copy(tMatrix);\n group.updateMatrixWorld();\n }\n\n /**\n * Set the name of this region.\n * \n * @param {String} nameIn - Name to be set for this region. It must be defined\n * and non-empty.\n */\n this.setName = (nameIn) => {\n if (nameIn && nameIn !== \"\") {\n name = nameIn;\n }\n }\n\n /**\n * Get the name of this region.\n * \n * @return {String}\n */\n this.getName = () => {\n return name;\n }\n\n /**\n * Get the parent region.\n * \n * @return {Region}\n */\n this.getParent = () => {\n return parent;\n }\n\n /**\n * Get the array of each hierarachy from the root region to this region.\n * \n * @return {Array}\n */\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 /**\n * Get the full paths from the root region to this region.\n * \n * @return {String}\n */\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 /**\n * Create a new child region with the provided name.\n * @param {String} nameIn - Name to be set for the new child region.\n * \n * @return {Region}\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 /**\n * Get the child region with matching childName.\n * @param {String} childName - Name to be matched.\n * \n * @return {Region}\n */\n this.getChildWithName = childName => {\n if (childName) {\n const lowerChildName = childName.toLowerCase();\n for (let i = 0; i < children.length; i++) {\n if (children[i].getName().toLowerCase() === lowerChildName)\n return children[i];\n }\n }\n return undefined;\n }\n\n /**\n * Find a child region using the path array.\n * @param {Array} pathArray - Array containing regions' name at each\n * hierarchy to match.\n * \n * @return {Region}\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 /**\n * Find the region using the provided relative path.\n * \n * @param {String} path - Relative paths from this region\n * to the child region.\n * \n * @return {Region}\n */\n this.findChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.findChildFromSeparatedPath(pathArray);\n }\n\n /**\n * Create a new child using the path array. All required new regions\n * down the path will be created.\n * \n * @param {Array} pathArray - Array containing regions' name, new regions\n * will be created along the path if not found.\n * \n * @return {Region}\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 /**\n * Create a new child using the path. All required new regions\n * down the path will be created.\n * \n * @param {String} path - Relative paths from the region\n * to the child region.\n * \n * @return {Region}\n */\n this.createChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.createChildFromSeparatedPath(pathArray);\n }\n\n\n /**\n * Return existing region if it exists, otherwise, create a new\n * region with the provided path.\n * \n * @param {String} path - Relative paths from the region\n * to the child region.\n * \n * @return {Region}\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 /**\n * Add a zinc object into this region, the morph will be added\n * to the group.\n * \n * @param {ZincObject} zincObject - Zinc object to be added into\n * this region.\n */\n this.addZincObject = zincObject => {\n if (zincObject) {\n zincObject.setRegion(this);\n group.add(zincObject.morph);\n zincObjects.push(zincObject);\n this.pickableUpdateRequired = true;\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 * \n * @param {ZincObject} 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 * Return true if pickable objects require an update.\n * \n * @param {Boolean} transverse - Check child regions as well\n * if this is set to true.\n * \n * @return {Boolean}\n */\n this.checkPickableUpdateRequred = (transverse) => {\n if (this.pickableUpdateRequired) return true;\n if (transverse) {\n let flag = false;\n for (let i = 0; i < children.length; i++) {\n flag = children[i].checkPickableUpdateRequred(transverse);\n if (flag) return true;\n }\n }\n return false;\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) {\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 this.pickableUpdateRequired = false;\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 * \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 * Do not include the matrix transformation here, it is done at the primitives\n * level.\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 (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 /**\n * Clear and dispose all objects belong to this region.\n * \n * @param {Boolean} transverse - Clear and dispose child regions as well\n * if this is set to true.\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 /**\n * Check if a zincObject is a member of this region.\n * \n * @param {ZincObject} zincObject - The ZincObject to be checked.\n * @param {Boolean} transverse - Also check the child regions.\n * \n * @return {Boolean}\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(zincObject, transverse))\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 * \n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\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 * \n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\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 * \n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\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 * \n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\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 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 * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = (groupName, transverse) => {\n const objectsArray = [];\n zincObjects.forEach(zincObject => {\n const lowerObjectName = zincObject.groupName ? zincObject.groupName.toLowerCase() : zincObject.groupName;\n const lowerGroupName = groupName ? groupName.toLowerCase() : groupName;\n if (lowerObjectName === lowerGroupName)\n 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 * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\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 * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\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 * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\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 * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\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 * Get all zinc objects in this region.\n * \n * @param {Boolean} transverse - Include zinc objects in child regions if this is\n * set to true.\n * @returns {Array}\n */\n this.getAllObjects = transverse => {\n const objectsArray = [...zincObjects];\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.getAllObjects(transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Get all child regions.\n * \n * @param {Boolean} transverse - Include all regions which are descendants of \n * this reigon when this is set to true.\n * @returns {Array}\n */\n this.getChildRegions = transverse => {\n const objectsArray = [...children];\n if (transverse) {\n children.forEach(childRegion => {\n const childObjects = childRegion.getChildRegions(transverse);\n objectsArray.push(...childObjects);\n });\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 * \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 * \n * @param {Number} time - Value to set the time to.\n * @param {Boolean} transverse - Set the time for chidl regions if\n * this is set to true.\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\n/**\n * This provide a full scale minimap. It will always\n * display the whole map.\n * \n * @class\n * @author Alan Wu\n * @return {Minimap}\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":""}
|