zincjs 0.40.0 → 0.41.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/zinc.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://Zinc/webpack/universalModuleDefinition","webpack://Zinc/webpack/bootstrap","webpack://Zinc/./src/zinc.js","webpack://Zinc/external \"url-polyfill\"","webpack://Zinc/./src/primitives/geometry.js","webpack://Zinc/external \"three\"","webpack://Zinc/./src/primitives/zincObject.js","webpack://Zinc/./src/three/Geometry.js","webpack://Zinc/./src/utilities.js","webpack://Zinc/./src/primitives/marker.js","webpack://Zinc/./src/assets/mapMarker.svg","webpack://Zinc/./src/primitives/augmentShader.js","webpack://Zinc/./src/primitives/glyph.js","webpack://Zinc/./src/primitives/label.js","webpack://Zinc/external \"three-spritetext\"","webpack://Zinc/./src/primitives/glyphset.js","webpack://Zinc/./src/loader.js","webpack://Zinc/./src/three/Loader.js","webpack://Zinc/./src/videoHandler.js","webpack://Zinc/./src/primitives/pointset.js","webpack://Zinc/./src/three/Points.js","webpack://Zinc/./src/assets/disc.png","webpack://Zinc/./src/primitives/lines.js","webpack://Zinc/./src/three/line/LineSegments.js","webpack://Zinc/./src/three/line/Line.js","webpack://Zinc/./src/renderer.js","webpack://Zinc/external \"css-element-queries/src/ResizeSensor\"","webpack://Zinc/./src/scene.js","webpack://Zinc/./src/sceneLoader.js","webpack://Zinc/./src/STLLoader.js","webpack://Zinc/./src/OBJLoader.js","webpack://Zinc/./src/controls.js","webpack://Zinc/./src/minimap.js","webpack://Zinc/./src/geometryCSG.js","webpack://Zinc/./src/three-js-csg.js","webpack://Zinc/external \"webworkify-webpack\"","webpack://Zinc/external \"promise-polyfill\"","webpack://Zinc/./src/workers/geometryCSG.worker.js","webpack://Zinc/./src/workers/geometryCSGInternal.js","webpack://Zinc/./src/glyphsetCSG.js"],"names":["require","Zinc","Revision","defaultMaterialColor","defaultOpacity","modelPrefix","Geometry","Glyph","Glyphset","Pointset","Lines","Renderer","Scene","GeometryCSG","GlyphsetCSG","Viewport","CameraControls","SmoothCameraTransition","RayCaster","CameraAutoTumble","StereoEffect","loadExternalFile","loadExternalFiles","THREE","module","exports","ZincObject","call","videoHandler","isGeometry","createMesh","geometryIn","materialIn","options","geometry","morph","toBufferGeometry","isTransparent","opacity","material","_video","morphTargets","localTimeEnabled","morphNormals","BufferGeometry","attributes","color","MeshPhongMaterial","colour","transparent","side","DoubleSide","vertexColors","VertexColors","localMorphColour","morphAttributes","onBeforeCompile","augmentMorphColor","videoTexture","createCanvasVideoTexture","MeshBasicMaterial","Color","map","mesh","Mesh","setMesh","calculateUVs","computeBoundingBox","max","boundingBox","min","offset","Vector2","x","y","range","faceVertexUvs","i","faces","length","v1","vertices","a","v2","b","v3","c","push","uvsNeedUpdate","setWireframe","wireframe","prototype","Object","create","THREEGeometry","isZincObject","secondaryMesh","groupName","timeEnabled","morphColour","inbuildTime","mixer","animationGroup","duration","clipAction","userData","marker","markerUpdateRequired","markerVertexIndex","boundingBoxUpdateRequired","cachedBoundingBox","Box3","_vertex","Vector3","anatomicalId","setDuration","durationIn","getDuration","computeMorphNormals","copyMorphColorsToBufferGeometry","clone","colorsNeedUpdate","computeBoundingSphere","checkAndCreateTransparentMesh","secondaryMaterial","FrontSide","renderOrder","name","BackSide","needsUpdate","add","checkAndRemoveTransparentMesh","remove","uncache","AnimationObjectGroup","AnimationMixer","position","animationClip","AnimationClip","CreateClipsFromMorphTargetSequences","loop","loopOnce","clampWhenFinished","play","matrixAutoUpdate","setFrustumCulled","setName","groupNameIn","getCurrentTime","ratio","time","_clip","updateMorphColorAttribute","targetGeometry","morphColors","influences","morphTargetInfluences","deleteAttribute","bound","morphArray","setAttribute","setMorphTime","timeChanged","actualDuration","newTime","update","isTimeVarying","getVisibility","visible","setVisibility","setAlpha","alpha","transparentChanged","flag","frustumCulled","setVertexColors","getColour","setColour","getColourHex","getHexString","setColourHex","hex","setHex","setMaterial","dispose","getClosestVertexIndex","closestIndex","setFromBufferAttribute","center","getCenter","distance","currentDistance","current","count","fromArray","array","distanceTo","getClosestVertex","found","multiplyScalar","getBoundingBox","box","setFromArray","set","updateMarker","playAnimation","displayMarkers","isEnabled","disable","Marker","setPosition","z","camera","markerDepths","updateNDC","cameraObject","enable","processMarkerVisual","updateVisual","initiateMorphColor","render","delta","targetTime","_m1","Matrix4","_obj","Object3D","_offset","uuid","MathUtils","generateUUID","type","colors","skinWeights","skinIndices","lineDistances","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","normalsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","assign","EventDispatcher","constructor","applyMatrix4","matrix","vertex","normalMatrix","Matrix3","getNormalMatrix","il","face","normal","applyMatrix3","normalize","j","jl","vertexNormals","rotateX","angle","makeRotationX","rotateY","makeRotationY","rotateZ","makeRotationZ","translate","makeTranslation","scale","makeScale","lookAt","vector","updateMatrix","fromBufferGeometry","addFace","materialIndex","scope","fromBufferAttribute","Face3","uv","uv2","index","console","error","groups","group","start","getX","computeFaceNormals","negate","radius","s","cb","ab","f","fl","vA","vB","vC","subVectors","cross","copy","computeVertexNormals","areaWeighted","Array","v","vl","computeFlatVertexNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","setFromPoints","Sphere","merge","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","colors1","colors2","vertexCopy","faceVertexNormals","faceVertexColors","faceCopy","faceVertexUvs2","uvs2","uvsCopy","k","kl","mergeMesh","isMesh","mergeVertices","precisionPoints","verticesMap","unique","changes","precision","Math","pow","key","round","faceIndicesToRemove","indices","n","idx","splice","diff","points","point","l","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","uvs1","id","toJSON","setBit","value","enabled","getNormalIndex","hash","toString","normalsHash","normals","getColorIndex","r","g","colorsHash","getHex","getUvIndex","uvsHash","uvs","data","metadata","version","generator","parameters","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","source","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","DirectGeometry","fromGeometry","buffergeometry","positions","Float32Array","BufferAttribute","copyVector3sArray","copyColorsArray","copyVector2sArray","attribute","Float32BufferAttribute","copyVector4sArray","computeTangents","computeLineDistances","applyMatrix","warn","dispatchEvent","createBufferGeometryFromObject","object","isPoints","isLine","copyArray","computeGroups","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","bufferGeometry","morphColor","colorArray","tolerance","Number","EPSILON","hashToIndex","getIndex","getAttribute","vertexCount","nextIndex","attributeNames","keys","attrArrays","morphAttrsArrays","newIndices","getters","morphAttr","fill","decimalShift","log10","shiftMultiplier","itemSize","getterFunc","newarray","newMorphArrays","m","ml","oldAttribute","buffer","isInterleavedBufferAttribute","setArray","morphAttribute","cons","Uint8Array","Uint16Array","Uint32Array","newIndexBuffer","setIndex","PhongToToon","isMeshPhongMaterial","MeshToonMaterial","markerImage","Image","src","texture","Texture","image","size","zincObject","spriteMaterial","sprite","Group","parent","isMarker","initialise","SpriteMaterial","alphaTest","depthTest","depthWrite","sizeAttenuation","Sprite","porportion","setSpriteSize","project","shader","vertexShader","replace","join","idIn","glyphsetIn","FaceColors","label","labelString","isGlyph","fromMesh","meshIn","getGlyphset","setLabel","String","showLabel","getPosition","getSprite","Label","getGroup","getLabel","getMesh","setFromObject","setTransformation","axis1","axis2","axis3","elements","SpriteText","default","textIn","getStyle","setScale","scaling","getString","JSONLoader","glyphList","axis1s","axis2s","axis3s","scales","labels","numberOfTimeSteps","numberOfVertices","baseSize","scaleFactors","repeat_mode","ready","morphColours","morphVertices","isGlyphset","_transformMatrix","_bot_colour","_top_colour","_boundingBox1","_boundingBox2","_boundingBox3","_points","load","glyphsetData","glyphURL","finishCallback","isInline","displayLabels","MorphColours","MorphVertices","number_of_time_steps","number_of_vertices","base_size","scale_factors","loader","InstancedMesh","parse","meshloader","materials","crossOrigin","resolve_glyph_axes","return_arrays","sign","axis_scale","final_axis1","final_axis2","final_axis3","final_point","mirrored_axis1","mirrored_axis2","mirrored_axis3","mirrored_point","number_of_glyphs","glyph_repeat_mode","use_axis1","use_axis2","use_scale","final_scale1","magnitude","sqrt","updateGlyphsetTransformation","current_positions","current_axis1s","current_axis2s","current_axis3s","current_scales","numberOfGlyphs","numberOfPositions","current_glyph_index","current_index","current_position","current_axis1","current_axis2","current_axis3","current_scale","arrays","setMatrixAt","glyph","instanceMatrix","updateGlyphsetHexColors","current_colors","hex_values","numberOfColours","setColorAt","instanceColor","updateMorphGlyphsets","current_time","bottom_frame","proportion","top_frame","ceil","bottom_positions","top_positions","bottom_axis1","top_axis1","bottom_axis2","top_axis2","bottom_axis3","top_axis3","bottom_scale","top_scale","bottom_colors","top_colors","setRGB","createGlyphs","addCustomGlyph","addMeshAsGlyph","forEachGlyph","callbackFunction","getMatrixAt","setFromMatrixPosition","applyMatrix4ToBox","box1","box2","union","Loader","LoaderUtils","Vector4","FileLoader","DefaultLoadingManager","manager","withCredentials","onLoad","onProgress","onError","texturePath","extractUrlBase","setWithCredentials","json","JSON","toLowerCase","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","u","nUvLayers","parseSkin","influencesPerVertex","w","d","bones","parseMorphing","dstVertices","srcVertices","cl","dstColors","srcColors","parseAnimations","outputAnimations","animations","animation","concat","clip","parseAnimation","morphAnimationClips","initMaterials","video","fullPath","VideoHandler","singleSided","flipSided","specularCoef","shininess","Handlers","handlers","regex","get","file","onLoadStart","onLoadProgress","onLoadComplete","createMaterial","BlendingMode","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","textureLoader","TextureLoader","materialLoader","MaterialLoader","loadTexture","path","repeat","wrap","anisotropy","setCrossOrigin","wrapS","RepeatWrapping","wrapT","MirroredRepeatWrapping","textures","blending","specular","emissive","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","emissiveMap","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","lightMap","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","aoMap","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","bumpMap","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","bumpScale","normalMap","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","normalScale","specularMap","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","metalnessMap","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","roughnessMap","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","alphaMap","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","setTextures","srcIn","_this","lastPlayPos","currentPlayPos","bufferingDetected","actualTime","currentTime","getVideoDuration","VideoTexture","minFilter","LinearFilter","magFilter","format","RGBFormat","isReadyToPlay","document","createElement","Points","isPointset","getCircularTexture","setSize","setSizeAttenuation","_inverseMatrix","_ray","Ray","_sphere","_position","_morphA","_tempA","PointsMaterial","updateMorphTargets","raycast","raycaster","intersects","matrixWorld","threshold","params","drawRange","ray","intersectsSphere","invert","localThreshold","localThresholdSq","isBufferGeometry","positionAttribute","morphPosition","end","calculatePosition","testPoint","morphTargetDictionary","rayPointDistanceSq","distanceSqToPoint","intersectPoint","closestPointToPoint","origin","near","far","distanceToRay","morphInfluences","influence","addScaledVector","sub","isLines","createLineSegment","line","LineSegments","setWidth","width","linewidth","_start","_end","Line","isLineSegments","_morphB","_tempB","LineBasicMaterial","vStart","vEnd","interSegment","interRay","step","distSq","distanceSqToSegment","faceIndex","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","canvas","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","height","onWindowResize","rect","getBoundingClientRect","left","top","target","getSize","initialiseVisualisation","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","scene","createScene","setCurrentScene","getCurrentScene","sceneIn","removeActiveScene","oldScene","setInteractiveControlEnable","setAdditionalScenesGroup","getSceneByName","new_scene","sceneName","resetView","viewAll","boundingBox2","viewAllWithBoundingBox","loadModelsURL","colours","opacities","loadViewURL","loadFromViewURL","jsonFilePrefix","updateDirectionalLight","runAnimation","requestAnimationFrame","cancelAnimationFrame","stopAnimate","stop","animate","Date","now","addPreRenderCallbackFunction","removePreRenderCallbackFunction","addPostRenderCallbackFunction","removePostRenderCallbackFunction","getPlayRate","setPlayRate","playRateIn","setMorphsTime","getZincGeometryByID","addToScene","addObject","addToOrthoScene","OrthographicCamera","createHUDSprites","imagewidth","imageheight","addLogo","ImageUtils","getDelta","renderGeometries","sceneItem","clearDepth","hasOwnProperty","getThreeJSRenderer","isSceneActive","addActiveScene","additionalScene","getThreeJSScene","clearAllActiveScene","clearAll","transitionScene","endingScene","currentCamera","getZincCameraControls","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","SceneLoader","defaultMetadata","Duration","OriginalDuration","TimeStamps","defaultDuration","rendererIn","zincObjects","sceneLoader","minimap","directionalLight","ambient","zincCameraControls","stereoEffectFlag","stereoEffect","autoClearFlag","displayMinimap","minimapScissor","x_offset","y_offset","align","updateRequired","scissor","_markerTarget","getDownloadProgress","onResize","aspect","updateProjectionMatrix","changeZoomByScrollRateUnit","unit","setupCamera","PerspectiveCamera","AmbientLight","DirectionalLight","setDirectionalLight","Minimap","loadView","nearPlane","farPlane","eyePosition","targetPosition","upVector","viewPort","setDefaultCameraSettings","boundingBox1","viewport","setCurrentCameraSettings","forEachGeometry","forEachGlyphset","forEachPointset","forEachLine","findGeometriesWithGroupName","GroupName","geometriesArray","findPointsetsWithGroupName","pointsetsArray","findGlyphsetsWithGroupName","glyphsetsArray","findLinesWithGroupName","linesArray","findObjectsWithGroupName","objectsArray","findObjectsWithAnatomicalId","getBoundingBoxOfZincObjects","vectorToScreenXY","widthHalf","heightHalf","getObjectsScreenXY","getNamedObjectsScreenXY","addZincObject","loadGlyphsetURL","metaurl","glyphurl","loadPointsetURL","loadLinesURL","loadSTL","loadOBJ","loadMetadataURL","allCompletedCallback","addZincGeometry","newGeometry","removeObject","pause","toBeDownloaded","setTime","myPlayRate","getWindowsPosition","renderer_width","renderer_height","includes","renderMinimap","setScissorTest","setScissor","setViewport","updateCamera","mask","clear","setPathDuration","setStereoEffectEnable","stereoFlag","objectIsInScene","alignBoundingBoxToCameraView","transitionTime","newVec1","newVec2","newVec3","crossVectors","angleTo","rotateCameraTransition","rotateAboutLookAtpoint","alignObjectToCameraView","setCameraTargetToObject","addVectors","isStereoEffectEnable","removeZincObject","getPickableThreeJSObjects","returnedObjects","getNormalisedMinimapCoordinates","event","offsetY","clientY","clientX","getMinimapDiffFromNormalised","getDiffFromNormalised","toBeDwonloaded","addMetadataTimeStamp","convertDurationObjectTomSec","getMetadataTag","getMetadata","setMetadataTag","removeMetadataTag","resetMetadata","resetDuration","convertDurationObjectToString","years","months","weeks","days","hours","mins","secs","setDurationFromObject","string","millisec","setOriginalDurationFromObject","STLLoader","OBJLoader","progressMap","viewLoaded","errorDownload","totalSize","totalLoaded","unknownFound","progress","xhr","loaded","total","xmlhttp","viewData","requestURL","number","filename","numberOfResources","linesloader","newLines","loadGlyphset","newGlyphset","myCallback","onLoadGlyphsetReady","pointsetloader","newPointset","objloader","traverse","child","zincGeometry","addMeshToZincGeometry","loadSurfaceURL","fileFormat","metaFinishCallback","numberOfDownloaded","downloadedItem","parseDuration","durationString","match","loadSettings","item","readPrimitivesItem","referenceURL","newURL","URL","href","Inline","FileFormat","AnatomicalId","Type","newGeometryURL","GlyphGeometriesURL","DisplayLabels","readViewAndSettingsItem","responseURL","numberOfObjects","setResponseType","exception","binData","array_buffer","charCodeAt","expect","face_size","n_faces","reader","DataView","getUint32","byteLength","solid","getUint8","defaultR","defaultG","defaultB","hasColors","normalX","getFloat32","normalY","normalZ","packedColor","getUint16","vertexstart","patternFace","faceCounter","patternFloat","patternVertex","RegExp","patternNormal","exec","vertexCountPerFace","normalCountPerFace","parseFloat","decodeText","ParserState","state","objects","materialLibraries","startObject","fromDeclaration","previousMaterial","currentMaterial","_finalize","smooth","startMaterial","libraries","previous","inherited","groupCount","mtllib","groupStart","groupEnd","cloned","bind","lastMultiMaterial","mi","declared","finalize","parseVertexIndex","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","dst","addVertexPoint","addVertexLine","addNormal","addColor","addUV","addUVLine","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","uvLen","nLen","addPointGeometry","vi","addLineGeometry","uvi","object_pattern","material_library_pattern","material_use_pattern","setPath","setMaterials","indexOf","lines","split","lineFirstChar","lineLength","trimLeft","trim","charAt","lineData","substr","vertexData","faceVertices","vertexParts","lineParts","substring","lineVertices","lineUVs","parts","li","llen","pointData","Error","hasVertexColors","createdMaterials","miLen","sourceMaterial","materialLine","lights","materialPoints","flatShading","NoColors","addGroup","timeEnd","MODE","NONE","DEFAULT","PATH","SMOOTH_CAMERA_TRANSITION","AUTO_TUMBLE","ROTATE_TRANSITION","MINIMAP","STATE","ROTATE","ZOOM","PAN","TOUCH_ROTATE","TOUCH_ZOOM","TOUCH_PAN","SCROLL","CLICK_ACTION","MAIN","AUXILIARY","SECONDARY","tumble_rate","pointer_x","pointer_y","pointer_x_start","pointer_y_start","previous_pointer_x","previous_pointer_y","near_plane_fly_debt","touchZoomDistanceStart","touchZoomDistanceEnd","scrollRate","cameraPath","numberOfCameraPoint","updateLightWithPathFlag","deviceOrientationControl","defaultViewport","currentMode","smoothCameraTransitionObject","rotateCameraTransitionObject","cameraAutoTumbleObject","mouseScroll","_state","zincRayCaster","targetTouchId","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","setMouseButtonAction","buttonName","actionName","translateViewport","translation","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","touches","dx","dy","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentWheelEvent","deltaY","stopImmediatePropagation","fact","unproject","getVectorsFromRotateAboutLookAtPoints","axis","abs","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","eye_position","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","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","getDefaultViewport","currentViewport","getDefaultEyePosition","getDefaultTargetPosition","RotateCameraTransition","pauseCameraTransition","stopCameraTransition","isTransitioningCamera","autoTumble","tumbleDirectionIn","tumbleRateIn","stopOnCameraInputIn","enableAutoTumble","stopAutoTumble","updateAutoTumble","requireUpdate","isAutoTumble","enableRaycaster","callbackFunctionIn","hoverCallbackFunctionIn","disableRaycaster","targetCameraIn","startingEyePosition","startingTargetPosition","startingUp","endingEyePosition","endingTargetPosition","endingUp","targetCamera","completed","newDuration","updateCameraSettings","axisIn","angleIn","previousTime","actualDelta","hostSceneIn","hoverCallbackFunction","Raycaster","mouse","lastHovered","cooldown","getIntersectsObject","zincCamera","threejsScene","setFromCamera","intersectObjects","hovered","setTimeout","awaitMove","tumbleAxis","computeTumbleAxisAngle","tumbleDirection","StereoCameraZoomFixed","cameraL","layers","cameraR","focus","fov","zoom","eyeRight","eyeLeft","xmin","xmax","projectionMatrix","eyeSep","eyeSepOnProjection","ymax","DEG2RAD","multiply","_stereo","updateMatrixWorld","rotation","reorder","deviceOrientation","screenOrientation","onDeviceOrientationChangeEvent","onScreenOrientationChangeEvent","window","orientation","setObjectQuaternion","zee","euler","Euler","q0","Quaternion","q1","beta","gamma","orient","quaternion","setFromEuler","setFromAxisAngle","applyQuaternion","connect","disconnect","degToRad","targetScene","helper","positionAttributes","centre","coord","new_coord","diameter","getBoundary","v4","cameraControl","ThreeBSP","work","Promise","BufferGeometryLoader","hostIn","host","core","worker","myResolve","createGeometryFromJSON","JSONParser","workerEventHandler","ev","action","log","message","csg","GeometryCSGInternal","postMessage","getHostGeometry","tempCSG","createZincGeometry","getGeometry","csgMesh","newMesh","toMesh","setCSG","CSG","sendToWork","guestGeometry","resolve","reject","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","e","divider","isConvex","slice","node","temp","clipPolygons","self","geometryFromJSON","guest","hostCSG","setGeometry","prepareCSG","guestCSG","hostCSGs","setGlyphset","prepareCSGForGlyphs","store","glyphset","clippingPlanes"],"mappings":"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","file":"zinc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Zinc\"] = factory();\n\telse\n\t\troot[\"Zinc\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","require(\"url-polyfill\");\n\n/**\n * Provides a global namespace for the Zinc javascript library and some default parameters for it.\n * \n * @namespace\n * @author Alan Wu\n */\n\nconst Zinc = function() {\n this.Revision = \"0.36.5\";\n this.defaultMaterialColor = 0xFFFFFF;\n this.defaultOpacity = 1.0;\n this.modelPrefix = undefined;\n this.Geometry = require('./primitives/geometry').Geometry;\n this.Glyph = require('./primitives/glyph').Glyph;\n this.Glyphset = require('./primitives/glyphset').Glyphset;\n this.Pointset = require('./primitives/pointset').Pointset;\n this.Lines = require('./primitives/lines').Lines;\n this.Renderer = require('./renderer').Renderer;\n this.Scene = require('./scene').Scene;\n this.GeometryCSG = require('./geometryCSG').GeometryCSG;\n this.GlyphsetCSG = require('./glyphsetCSG').GlyphsetCSG;\n this.Viewport = require('./controls').Viewport;\n this.CameraControls = require('./controls').CameraControls;\n this.SmoothCameraTransition = require('./controls').SmoothCameraTransition;\n this.RayCaster = require('./controls').RayCaster;\n this.CameraAutoTumble = require('./controls').CameraAutoTumble;\n this.StereoEffect = require('./controls').StereoEffect;\n this.loadExternalFile = require('./utilities').loadExternalFile;\n this.loadExternalFiles = require('./utilities').loadExternalFiles;\n this.THREE = require('three'); \n \n};\n\nmodule.exports = new Zinc();\n","module.exports = require(\"url-polyfill\");","const THREE = require('three');\n\n/**\n * Provides an object which stores geometry and provides method which controls its animations.\n * This is created when a valid json file containging geometry is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Geometry}\n */\nconst Geometry = function () {\n (require('./zincObject').ZincObject).call(this);\n\t// THREE.Geometry or THREE.BufferGeometry\n\tthis.videoHandler = undefined;\n this.isGeometry = true;\n\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (this.geometry && this.morph && (geometryIn != undefined))\n\t\t\treturn;\n\t\t// First copy the geometry\n\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\n\t\tlet isTransparent = false;\n\t\tif (1.0 > options.opacity)\n\t\t\t isTransparent = true;\n\n\t\tlet material = undefined;\n\t\tif (geometry._video === undefined) {\n\t\t\tif (materialIn) {\n\t\t\t\tmaterial = materialIn;\n\t\t\t\tmaterial.morphTargets = options.localTimeEnabled;\n\t\t\t\tmaterial.morphNormals = options.localTimeEnabled;\n\t\t\t} else {\n\t\t\t\tif (geometry instanceof THREE.BufferGeometry && geometry.attributes.color === undefined) {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\tvertexColors : THREE.VertexColors,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t//material = PhongToToon(material);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ]) {\n\t\t\t\tmaterial.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n\t\t\t}\n\t\t} else {\n\t\t\tlet videoTexture = geometry._video.createCanvasVideoTexture();\n\t\t\tmaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\tcolor : new THREE.Color(1, 1, 1),\n\t\t\t\ttransparent : isTransparent,\n\t\t\t\topacity : options.opacity,\n\t\t\t\tmap : videoTexture,\n\t\t\t\tside : THREE.DoubleSide\n\t\t\t});\n\t\t\tthis.videoHandler = geometry._video;\n\t\t}\n\t\tlet mesh = new THREE.Mesh(geometry, material); \n\t\tthis.setMesh(mesh, options.localTimeEnabled, options.localMorphColour);\n\t}\n\t\n\tthis.calculateUVs = () => {\n\t\tthis.geometry.computeBoundingBox();\n\t\tconst max = this.geometry.boundingBox.max, min = this.geometry.boundingBox.min;\n\t\tconst offset = new THREE.Vector2(0 - min.x, 0 - min.y);\n\t\tconst range = new THREE.Vector2(max.x - min.x, max.y - min.y);\n\t\tthis.geometry.faceVertexUvs[0] = [];\n\t\tfor (let i = 0; i < this.geometry.faces.length ; i++) {\n\t\t const v1 = this.geometry.vertices[this.geometry.faces[i].a];\n\t\t const v2 = this.geometry.vertices[this.geometry.faces[i].b];\n\t\t const v3 = this.geometry.vertices[this.geometry.faces[i].c];\n\t\t geometry.faceVertexUvs[0].push(\n\t\t [\n\t\t new THREE.Vector2((v1.x + offset.x)/range.x ,(v1.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v2.x + offset.x)/range.x ,(v2.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v3.x + offset.x)/range.x ,(v3.y + offset.y)/range.y)\n\t\t ]);\n\t\t}\n\t\tgeometry.uvsNeedUpdate = true;\t\n\t}\n\t\n\t/**\n\t * Set wireframe display for this geometry.\n\t * \n\t * @param {Boolean} wireframe - Flag to turn on/off wireframe display.\n\t */\n\tthis.setWireframe = wireframe => {\n\t\tthis.morph.material.wireframe = wireframe;\n\t}\n\t\n}\n\nGeometry.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Geometry = Geometry;\n","module.exports = require(\"three\");","const THREE = require('three');\nconst THREEGeometry = require('../three/Geometry').Geometry;\n\nconst ZincObject = function() {\n this.isZincObject = true;\n this.geometry = undefined;\n // THREE.Mesh\n this.morph = undefined;\n // THREE.Mesh - for utilities purpose such as rendering \n // transparent surfaces - one for front face and one for back face.\n this.secondaryMesh = undefined;\n /**\n\t * Groupname given to this geometry.\n\t */\n this.groupName = undefined;\n this.timeEnabled = false;\n this.morphColour = false;\n this.inbuildTime = 0;\n this.mixer = undefined;\n this.animationGroup = undefined;\n\t/**\n\t * Total duration of the animation, this value interacts with the \n\t * {@link Zinc.Renderer#playRate} to produce the actual duration of the\n\t * animation. Actual time in second = duration / playRate.\n\t */\n this.duration = 6000;\n this.clipAction = undefined;\n this.userData = [];\n this.videoHandler = undefined;\n this.marker = undefined;\n this.markerUpdateRequired = true;\n this.markerVertexIndex = -1;\n this.boundingBoxUpdateRequired = true;\n this.cachedBoundingBox = new THREE.Box3();\n this._vertex = new THREE.Vector3();\n this.anatomicalId = undefined;\n}\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.toBufferGeometry = function(geometryIn, options) {\n let geometry = undefined;\n if (geometryIn instanceof THREEGeometry) {\n if (options.localTimeEnabled && (geometryIn.morphNormals == undefined || geometryIn.morphNormals.length == 0))\n geometryIn.computeMorphNormals();\n geometry = geometryIn.toBufferGeometry();\n if (options.localMorphColour)\n require(\"../utilities\").copyMorphColorsToBufferGeometry(geometryIn, geometry);\n } else if (geometryIn instanceof THREE.BufferGeometry) {\n geometry = geometryIn.clone();\n }\n geometry.colorsNeedUpdate = true;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n if (geometryIn._video)\n geometry._video = geometryIn._video;\n return geometry;\n}\n\nZincObject.prototype.checkAndCreateTransparentMesh = function(options) {\n if (this.isGeometry && this.morph.material.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 = 2;\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.morphAttributes.position) {\n let animationClip = THREE.AnimationClip.CreateClipsFromMorphTargetSequences(\n this.geometry.morphAttributes.position, 10, true);\n if (animationClip && (animationClip[0] != undefined)) {\n this.clipAction = this.mixer.clipAction(animationClip[0]).setDuration(\n this.duration);\n this.clipAction.loop = THREE.loopOnce;\n this.clipAction.clampWhenFinished = true;\n this.clipAction.play();\n }\n }\n this.timeEnabled = localTimeEnabled;\n this.morphColour = localMorphColour;\n this.morph = mesh;\n this.morph.userData = this;\n this.morph.matrixAutoUpdate = false;\n this.checkAndCreateTransparentMesh();\n if (this.timeEnabled) {\n this.setFrustumCulled(false);\n }\n this.boundingBoxUpdateRequired = true;\n}\n\nZincObject.prototype.setName = function(groupNameIn) {\n this.groupName = groupNameIn;\n if (this.morph) {\n this.morph.name = this.groupName;\n }\n if (this.secondaryMesh) {\n this.secondaryMesh.name = this.groupName;\n }\n}\n\n/**\n * Get the local time of this geometry, it returns a value between \n * 0 and the duration.\n * \n * @return {Number}\n */\nZincObject.prototype.getCurrentTime = function() {\n if (this.clipAction) {\n const ratio = this.clipAction.time / this.clipAction._clip.duration;\n return this.duration * ratio;\n } else {\n return this.inbuildTime;\n }\n}\n\nconst updateMorphColorAttribute = function(targetGeometry, morph) {\n if (morph && targetGeometry.morphAttributes[ \"color\" ]) {\n const morphColors = targetGeometry.morphAttributes[ \"color\" ];\n const influences = morph.morphTargetInfluences;\n const length = influences.length;\n targetGeometry.deleteAttribute( 'morphColor0' );\n targetGeometry.deleteAttribute( 'morphColor1' );\n let bound = 0;\n let morphArray = [];\n for (let i = 0; (1 > bound) || (i < length); i++) {\n if (influences[i] > 0) {\n bound++;\n morphArray.push([i, influences[i]]);\n }\n }\n if (morphArray.length == 2) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[1][0] ] );\n } else if (morphArray.length == 1) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[0][0] ] );\n }\n }\n}\n\n/**\n * Set the local time of this geometry.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\nZincObject.prototype.setMorphTime = function(time) {\n let timeChanged = false;\n if (this.clipAction) {\n const ratio = time / this.duration;\n const actualDuration = this.clipAction._clip.duration;\n let newTime = ratio * actualDuration;\n if (newTime != this.clipAction.time) {\n this.clipAction.time = newTime;\n timeChanged = true;\n }\n if (timeChanged && this.timeEnabled == 1)\n this.mixer.update( 0.0 );\n } else {\n let newTime = time; \n if (time > this.duration)\n newTime = this.duration;\n else if (0 > time)\n newTime = 0;\n else\n newTime = time;\n if (newTime != this.inbuildTime) {\n this.inbuildTime = newTime;\n timeChanged = true;\n }\n }\n if (timeChanged) {\n this.boundingBoxUpdateRequired = true;\n updateMorphColorAttribute(this.geometry, this.morph);\n if (this.timeEnabled)\n this.markerUpdateRequired = true;\n }\n}\n\n/**\n * Check if the geometry is time varying.\n * \n * @return {Boolean}\n */\nZincObject.prototype.isTimeVarying = function() {\n if (this.timeEnabled || this.morphColour)\n return true;\n return false;\n}\n\n/**\n * Get the visibility of this Geometry.\n * \n */\nZincObject.prototype.getVisibility = function() {\n return this.morph.visible;\n}\n\n/**\n * Set the visibility of this Geometry.\n * \n * @param {Boolean} visible - a boolean flag indicate the visibility to be set \n */\nZincObject.prototype.setVisibility = function(visible) {\n this.morph.visible = visible;\n}\n\n/**\n * Set the opacity of this Geometry. This function will also set the isTransparent\n * flag according to the provided alpha value.\n * \n * @param {Number} alpah - Alpha value to set for this geometry, \n * can be any value between from 0 to 1.0.\n */\nZincObject.prototype.setAlpha = function(alpha) {\n const material = this.morph.material;\n let isTransparent = false;\n if (alpha < 1.0)\n isTransparent = true;\n let transparentChanged = material.transparent == isTransparent ? false : true;\n material.opacity = alpha;\n material.transparent = isTransparent;\n if (transparentChanged)\n if (isTransparent)\n this.checkAndCreateTransparentMesh();\n else\n this.checkAndRemoveTransparentMesh();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.opacity = alpha;\n}\n\nZincObject.prototype.setFrustumCulled = function(flag) {\n if (this.morph) {\n this.morph.frustumCulled = flag;\n }\n}\n\nZincObject.prototype.setVertexColors = function(vertexColors) {\n this.morph.material.vertexColors = vertexColors;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.vertexColors = vertexColors;\n}\n\n/**\n * Set the colour of the geometry.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.getColour = function(colour) {\n if (this.morph && this.morph.material)\n return this.morph.material.color;\n\treturn undefined;\n}\n \n/**\n * Set the colour of the geometry.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.setColour = function(colour) {\n this.morph.material.color = colour;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n}\n\nZincObject.prototype.getColourHex = function() {\n if (!this.morphColour)\n return this.morph.material.color.getHexString();\n return undefined;\n}\n\nZincObject.prototype.setColourHex = function(hex) {\n this.morph.material.color.setHex(hex);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.setHex(hex);\n}\n\n/**\n * Set the material of the geometry.\n * \n * @param {THREE.Material} material - Material to be set for this geometry.\n */\nZincObject.prototype.setMaterial = function(material) {\n this.morph.material = material;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material) {\n this.secondaryMesh.material.dispose();\n this.secondaryMesh.material = material.clone()\n this.secondaryMesh.material.side = THREE.FrontSide;\n }\n}\n\n/**\n * Get the index of the closest vertex to centroid.\n */\nZincObject.prototype.getClosestVertexIndex = function() {\n let closestIndex = -1;\n if (this.morph) {\n let position = this.morph.geometry.attributes.position;\n let boundingBox = new THREE.Box3().setFromBufferAttribute(position);\n let center = new THREE.Vector3();\n boundingBox.getCenter(center);\n if (position && boundingBox) {\n let distance = -1;\n let currentDistance = 0;\n let current = new THREE.Vector3();\n for (let i = 0; i < position.count; i++) {\n current.fromArray(position.array, i * 3);\n currentDistance = current.distanceTo(center);\n if (distance == -1)\n distance = currentDistance;\n else if (distance > (currentDistance)) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n }\n return closestIndex;\n}\n\n/**\n * Get the closest vertex to centroid.\n */\nZincObject.prototype.getClosestVertex = function() {\n let position = new THREE.Vector3();\n if (this.markerVertexIndex == -1) {\n this.markerVertexIndex = this.getClosestVertexIndex();\n }\n if (this.markerVertexIndex >= 0) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = this.morph.geometry.morphAttributes;\n if (influences && attributes && attributes.position) {\n let found = false;\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n this._vertex.fromArray(\n attributes.position[i].array, this.markerVertexIndex * 3);\n position.add(this._vertex.multiplyScalar(influences[i]));\n }\n }\n if (found)\n return position;\n } else {\n position.fromArray(this.morph.geometry.attributes.position.array,\n this.markerVertexIndex * 3);\n return position;\n }\n }\n this.getBoundingBox().getCenter(position);\n return position;\n}\n\n/**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\nZincObject.prototype.getBoundingBox = function() {\n if (this.morph && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = 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\n//Update the geometry and colours depending on the morph.\nZincObject.prototype.render = function(delta, playAnimation, options) {\n if (playAnimation == true)\n {\n if ((this.clipAction) && (this.timeEnabled == 1)) {\n this.mixer.update( delta );\n }\n else {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n }\n if (delta != 0) {\n this.boundingBoxUpdateRequired = true;\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true)))\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n }\n this.updateMarker(playAnimation, options);\n}\n\nexports.ZincObject = ZincObject;\n","import {\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tEventDispatcher,\n\tFloat32BufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tMathUtils,\n\tObject3D,\n\tSphere,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _m1 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\n\nfunction Geometry() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\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\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\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\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\ttmpGeo.computeVertexNormals();\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\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\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\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\nexports.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 = 3;\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 /**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\n this.getBoundingBox = function() {\n if (this.morph)\n return new THREE.Box3().setFromObject(\n this.morph);\n return undefined;\n }\n\n\t/**\n\t * Set the transformation of this glyph.\n\t * @param {Array} position - Three components vectors containing position of the\n\t * transformation.\n\t * @param {Array} axis1 - Three components vectors containing axis1 rotation of the\n\t * transformation.\n\t * @param {Array} axis2 - Three components vectors containing axis2 rotation of the\n\t * transformation.\n\t * @param {Array} position - Three components vectors containing axis3 rotation of the\n\t * transformation.\n\t */\n\tthis.setTransformation = (position, axis1, axis2, axis3) => {\n if (this.morph) {\n this.morph.matrix.elements[0] = axis1[0];\n this.morph.matrix.elements[1] = axis1[1];\n this.morph.matrix.elements[2] = axis1[2];\n this.morph.matrix.elements[3] = 0.0;\n this.morph.matrix.elements[4] = axis2[0];\n this.morph.matrix.elements[5] = axis2[1];\n this.morph.matrix.elements[6] = axis2[2];\n this.morph.matrix.elements[7] = 0.0;\n this.morph.matrix.elements[8] = axis3[0];\n this.morph.matrix.elements[9] = axis3[1];\n this.morph.matrix.elements[10] = axis3[2];\n this.morph.matrix.elements[11] = 0.0;\n this.morph.matrix.elements[12] = position[0];\n this.morph.matrix.elements[13] = position[1];\n this.morph.matrix.elements[14] = position[2];\n this.morph.matrix.elements[15] = 1.0;\n this.morph.matrixAutoUpdate = false;\n }\n\t\tif (label)\n\t\t label.setPosition(position[0], position[1], position[2]);\n\t}\n \n this.setColour = (color) => {\n if (label)\n label.setColour(color);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n }\n\n\t/**\n\t * Clear and free its memory.\n\t */\n\tthis.dispose = () => {\n\t if (this.material)\n\t this.material.dispose();\n\t\tthis.morph = undefined;\n\t}\n}\n\nGlyph.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyph = Glyph;\n","const SpriteText = require('three-spritetext').default;\n\nexports.Label = function ( textIn, colour ) {\n let text = textIn;\n let sprite = undefined;\n if (colour)\n sprite = new SpriteText(text, 0.015, colour.getStyle());\n else\n sprite = new SpriteText(text, 0.015);\n sprite.material.sizeAttenuation = false;\n sprite.center.x = -0.05;\n sprite.center.y = 0;\n\n this.getPosition = () => {\n\t if (sprite)\n\t\t return [sprite.position.x, sprite.position.y, sprite.position.z];\n\t return [0, 0, 0];\n }\n \n//now set the position at the correct 3D space \n this.setPosition = (x, y, z) => {\n if (sprite)\n sprite.position.set(x, y, z);\n }\n\n this.setColour = colour => {\n sprite.color = colour.getStyle();\n }\n \n //scale up the texture\n this.setScale = scaling => {\n if (sprite && scaling > 0.0) \n sprite.scale.set( scaling, scaling, 1.0 );\n }\n \n this.dispose = () => {\n sprite.dispose();\n }\n \n this.getSprite = () => {\n return sprite;\n }\n \n this.getString = () => {\n\t return text;\n }\n\n};\n\n\n\n","module.exports = require(\"three-spritetext\");","const THREE = require('three');\nconst JSONLoader = require('../loader').JSONLoader;\n\n/**\n * This is a container of {@link Zinc.Glyph} and their graphical properties \n * including transformations, colors, number of time steps, duration of animations\n * and group name. Please note that all glyphs in the glyphset share the same geometry\n * however they may have different transformations.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Glyphset}\n */\nconst Glyphset = function () {\n (require('./zincObject').ZincObject).call(this);\n const glyphList = [];\n let axis1s = undefined;\n let axis2s = undefined;\n let axis3s = undefined;\n let positions = undefined;\n let scales = undefined;\n let colors = undefined;\n let labels = undefined;\n let numberOfTimeSteps = 0;\n let numberOfVertices = 0;\n let baseSize = [0, 0, 0];\n let offset = [0, 0, 0];\n let scaleFactors = [0, 0, 0];\n let repeat_mode = \"NONE\";\n this.ready = false;\n let morphColours = false;\n let morphVertices = false;\n this.isGlyphset = true;\n let _transformMatrix = new THREE.Matrix4();\n const _bot_colour = new THREE.Color();\n const _top_colour = new THREE.Color();\n const _boundingBox1 = new THREE.Box3();\n const _boundingBox2 = new THREE.Box3();\n const _boundingBox3 = new THREE.Box3();\n const _points = [];\n for (let i = 0; i < 8; i++) {\n _points[i] = new THREE.Vector3();\n }\n\n\t/**\n\t * Get the {@link Three.Group} containing all of the glyphs' meshes.\n\t * @returns {Three.Group}\n\t */\n this.getGroup = () => {\n return this.morph;\n }\n\n\t/**\n\t * Copy glyphset data into this glyphset then load the glyph's geoemtry \n\t * with the provided glyphURL. FinishCallback will be called once\n\t * glyph is loaded.\n\t * \n\t * @param {Array} glyphsetData - contains the informations about the glyphs.\n\t * @param {String} glyphURL - URL to the geometry which will be applied to all\n\t * all the glyphs in the glyphset once loaded.\n\t * @param {Function} finishCallback - User's function to be called once glyph's\n\t * geometry is loaded.\n\t */\n this.load = (glyphsetData, glyphURL, finishCallback, isInline, displayLabels) => {\n axis1s = glyphsetData.axis1;\n axis2s = glyphsetData.axis2;\n axis3s = glyphsetData.axis3;\n positions = glyphsetData.positions;\n scales = glyphsetData.scale;\n colors = glyphsetData.colors;\n labels = glyphsetData.label;\n morphColours = glyphsetData.metadata.MorphColours;\n morphVertices = glyphsetData.metadata.MorphVertices;\n numberOfTimeSteps = glyphsetData.metadata.number_of_time_steps;\n repeat_mode = glyphsetData.metadata.repeat_mode;\n numberOfVertices = glyphsetData.metadata.number_of_vertices;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfVertices = numberOfVertices * 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfVertices = numberOfVertices * 3;\n baseSize = glyphsetData.metadata.base_size;\n offset = glyphsetData.metadata.offset;\n scaleFactors = glyphsetData.metadata.scale_factors;\n const loader = new JSONLoader();\n this.geometry = new THREE.BufferGeometry();\n this.morph = new THREE.InstancedMesh(this.geometry, undefined, numberOfVertices);\n if (isInline) {\n var object = loader.parse(glyphURL);\n (meshloader(finishCallback, displayLabels))(object.geometry, object.materials);\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(glyphURL, meshloader(finishCallback, displayLabels));\n }\n }\n\n\t/**\n\t * Calculate the actual transformation value that can be applied \n\t * to the transformation matrix.\n\t * @returns {Array}\n\t */\n const resolve_glyph_axes = (point, axis1, axis2, axis3, scale) => {\n const return_arrays = [];\n if (repeat_mode == \"NONE\" || repeat_mode == \"MIRROR\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n const mirrored_axis1 = [0.0, 0.0, 0.0];\n const mirrored_axis2 = [0.0, 0.0, 0.0];\n const mirrored_axis3 = [0.0, 0.0, 0.0];\n const mirrored_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[j] + scale[j] * scaleFactors[j];\n }\n for (var j = 0; j < 3; j++) {\n final_axis1[j] = axis1[j] * axis_scale[0];\n final_axis2[j] = axis2[j] * axis_scale[1];\n final_axis3[j] = axis3[j] * axis_scale[2];\n final_point[j] = point[j]\n + offset[0] * final_axis1[j]\n + offset[1] * final_axis2[j]\n + offset[2] * final_axis3[j];\n if (repeat_mode == \"MIRROR\") {\n mirrored_axis1[j] = -final_axis1[j];\n mirrored_axis2[j] = -final_axis2[j];\n mirrored_axis3[j] = -final_axis3[j];\n mirrored_point[j] = final_point[j];\n if (scale[0] < 0.0) {\n // shift glyph origin to end of axis1 \n final_point[j] -= final_axis1[j];\n mirrored_point[j] -= mirrored_axis1[j];\n }\n }\n }\n /* if required, reverse axis3 to maintain right-handed coordinate system */\n if (0.0 > (\n final_axis3[0] * (final_axis1[1] * final_axis2[2] -\n final_axis1[2] * final_axis2[1]) +\n final_axis3[1] * (final_axis1[2] * final_axis2[0] -\n final_axis1[0] * final_axis2[2]) +\n final_axis3[2] * (final_axis1[0] * final_axis2[1] -\n final_axis1[1] * final_axis2[0]))) {\n final_axis3[0] = -final_axis3[0];\n final_axis3[1] = -final_axis3[1];\n final_axis3[2] = -final_axis3[2];\n }\n return_arrays.push([final_point, final_axis1, final_axis2, final_axis3]);\n if (repeat_mode == \"MIRROR\") {\n if (0.0 > (\n mirrored_axis3[0] * (mirrored_axis1[1] * mirrored_axis2[2] -\n mirrored_axis1[2] * mirrored_axis2[1]) +\n mirrored_axis3[1] * (mirrored_axis1[2] * mirrored_axis2[0] -\n mirrored_axis1[0] * mirrored_axis2[2]) +\n mirrored_axis3[2] * (mirrored_axis1[0] * mirrored_axis2[1] -\n mirrored_axis1[1] * mirrored_axis2[0]))) {\n mirrored_axis3[0] = -mirrored_axis3[0];\n mirrored_axis3[1] = -mirrored_axis3[1];\n mirrored_axis3[2] = -mirrored_axis3[2];\n }\n return_arrays.push([mirrored_point, mirrored_axis1, mirrored_axis2, mirrored_axis3]);\n }\n }\n else if (repeat_mode == \"AXES_2D\" || repeat_mode == \"AXES_3D\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[0] + scale[j] * scaleFactors[0];\n }\n for (var j = 0; j < 3; j++) {\n final_point[j] = point[j]\n + offset[0] * axis_scale[0] * axis1[j]\n + offset[1] * axis_scale[1] * axis2[j]\n + offset[2] * axis_scale[2] * axis3[j];\n }\n const number_of_glyphs = (glyph_repeat_mode == \"AXES_2D\") ? 2 : 3;\n for (let k = 0; k < number_of_glyphs; k++) {\n let use_axis1, use_axis2;\n const use_scale = scale[k];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n if (k == 0) {\n use_axis1 = axis1;\n use_axis2 = axis2;\n }\n else if (k == 1) {\n use_axis1 = axis2;\n use_axis2 = (glyph_repeat_mode == \"AXES_2D\") ? axis1 : axis3;\n }\n else // if (k == 2)\n {\n use_axis1 = axis3;\n use_axis2 = axis1;\n }\n const final_scale1 = baseSize[0] + use_scale * scaleFactors[0];\n final_axis1[0] = use_axis1[0] * final_scale1;\n final_axis1[1] = use_axis1[1] * final_scale1;\n final_axis1[2] = use_axis1[2] * final_scale1;\n final_axis3[0] = final_axis1[1] * use_axis2[2] - use_axis2[1] * final_axis1[2];\n final_axis3[1] = final_axis1[2] * use_axis2[0] - use_axis2[2] * final_axis1[0];\n final_axis3[2] = final_axis1[0] * use_axis2[1] - final_axis1[1] * use_axis2[0];\n let magnitude = Math.sqrt(final_axis3[0] * final_axis3[0] + final_axis3[1] * final_axis3[1] + final_axis3[2] * final_axis3[2]);\n if (0.0 < magnitude) {\n let scaling = (baseSize[2] + use_scale * scaleFactors[2]) / magnitude;\n if ((repeat_mode == \"AXES_2D\") && (k > 0)) {\n scaling *= -1.0;\n }\n final_axis3[0] *= scaling;\n final_axis3[1] *= scaling;\n final_axis3[2] *= scaling;\n }\n\n final_axis2[0] = final_axis3[1] * final_axis1[2] - final_axis1[1] * final_axis3[2];\n final_axis2[1] = final_axis3[2] * final_axis1[0] - final_axis1[2] * final_axis3[0];\n final_axis2[2] = final_axis3[0] * final_axis1[1] - final_axis3[1] * final_axis1[0];\n magnitude = Math.sqrt(final_axis2[0] * final_axis2[0] + final_axis2[1] * final_axis2[1] + final_axis2[2] * final_axis2[2]);\n if (0.0 < magnitude) {\n var scaling = (baseSize[1] + use_scale * scaleFactors[1]) / magnitude;\n final_axis2[0] *= scaling;\n final_axis2[1] *= scaling;\n final_axis2[2] *= scaling;\n }\n return_arrays.push([final_point, final_axis1, final_axis2, final_axis3])\n }\n }\n return return_arrays;\n };\n\n\t/**\n\t * Update transformation for each of the glyph in this glyphset.\n\t */\n const updateGlyphsetTransformation = (\n current_positions,\n current_axis1s,\n current_axis2s,\n current_axis3s,\n current_scales\n ) => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfPositions = current_positions.length / 3;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n const current_position = [current_positions[current_index], current_positions[current_index + 1],\n current_positions[current_index + 2]];\n const current_axis1 = [current_axis1s[current_index], current_axis1s[current_index + 1],\n current_axis1s[current_index + 2]];\n const current_axis2 = [current_axis2s[current_index], current_axis2s[current_index + 1],\n current_axis2s[current_index + 2]];\n const current_axis3 = [current_axis3s[current_index], current_axis3s[current_index + 1],\n current_axis3s[current_index + 2]];\n const current_scale = [current_scales[current_index], current_scales[current_index + 1],\n current_scales[current_index + 2]];\n const arrays = resolve_glyph_axes(current_position, current_axis1, current_axis2,\n current_axis3, current_scale);\n if (arrays.length == numberOfGlyphs) {\n for (let j = 0; j < numberOfGlyphs; j++) {\n _transformMatrix.elements[0] = arrays[j][1][0];\n _transformMatrix.elements[1] = arrays[j][1][1];\n _transformMatrix.elements[2] = arrays[j][1][2];\n _transformMatrix.elements[3] = 0.0;\n _transformMatrix.elements[4] = arrays[j][2][0];\n _transformMatrix.elements[5] = arrays[j][2][1];\n _transformMatrix.elements[6] = arrays[j][2][2];\n _transformMatrix.elements[7] = 0.0;\n _transformMatrix.elements[8] = arrays[j][3][0];\n _transformMatrix.elements[9] = arrays[j][3][1];\n _transformMatrix.elements[10] = arrays[j][3][2];\n _transformMatrix.elements[11] = 0.0;\n _transformMatrix.elements[12] = arrays[j][0][0];\n _transformMatrix.elements[13] = arrays[j][0][1];\n _transformMatrix.elements[14] = arrays[j][0][2];\n _transformMatrix.elements[15] = 1.0;\n this.morph.setMatrixAt(current_glyph_index, _transformMatrix);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setTransformation(arrays[j][0], arrays[j][1],\n arrays[j][2], arrays[j][3]);\n current_glyph_index++;\n }\n }\n }\n this.morph.instanceMatrix.needsUpdate = true;\n };\n\n\t/**\n\t * Update colour for each of the glyph in this glyphset.\n\t */\n const updateGlyphsetHexColors = current_colors => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfColours = current_colors.length;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfColours; i++) {\n const hex_values = current_colors[i];\n for (let j = 0; j < numberOfGlyphs; j++) {\n _bot_colour.setHex(hex_values)\n this.morph.setColorAt(current_glyph_index, _bot_colour);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setColour(_bot_colour);\n current_glyph_index++;\n }\n }\n this.morph.instanceColor.needsUpdate = true;\n };\n\n\t/**\n\t * Update the current states of the glyphs in this glyphset, this includes transformation and\n\t * colour for each of them. This is called when glyphset and glyphs are initialised and whenever\n\t * the internal time has been updated.\n\t */\n const updateMorphGlyphsets = () => {\n let current_positions = [];\n let current_axis1s = [];\n let current_axis2s = [];\n let current_axis3s = [];\n let current_scales = [];\n let current_colors = [];\n const current_time = this.inbuildTime / this.duration * (numberOfTimeSteps - 1);\n const bottom_frame = Math.floor(current_time);\n const proportion = 1 - (current_time - bottom_frame);\n const top_frame = Math.ceil(current_time);\n if (morphVertices) {\n const bottom_positions = positions[bottom_frame.toString()];\n const top_positions = positions[top_frame.toString()];\n const bottom_axis1 = axis1s[bottom_frame.toString()];\n const top_axis1 = axis1s[top_frame.toString()];\n const bottom_axis2 = axis2s[bottom_frame.toString()];\n const top_axis2 = axis2s[top_frame.toString()];\n const bottom_axis3 = axis3s[bottom_frame.toString()];\n const top_axis3 = axis3s[top_frame.toString()];\n const bottom_scale = scales[bottom_frame.toString()];\n const top_scale = scales[top_frame.toString()];\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions.push(proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i]);\n current_axis1s.push(proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i]);\n current_axis2s.push(proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i]);\n current_axis3s.push(proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i]);\n current_scales.push(proportion * bottom_scale[i] + (1.0 - proportion) * top_scale[i]);\n }\n } else {\n current_positions = positions[\"0\"];\n current_axis1s = axis1s[\"0\"];\n current_axis2s = axis2s[\"0\"];\n current_axis3s = axis3s[\"0\"];\n current_scales = scales[\"0\"];\n }\n updateGlyphsetTransformation(current_positions, current_axis1s, current_axis2s, current_axis3s,\n current_scales);\n this.boundingBoxUpdateRequired = true;\n if (colors != undefined) {\n if (morphColours) {\n const bottom_colors = colors[bottom_frame.toString()];\n const top_colors = colors[top_frame.toString()];\n for (let i = 0; i < bottom_colors.length; i++) {\n _bot_colour.setHex(bottom_colors[i]);\n _top_colour.setHex(top_colors[i]);\n _bot_colour.setRGB(_bot_colour.r * proportion + _top_colour.r * (1 - proportion),\n _bot_colour.g * proportion + _top_colour.g * (1 - proportion),\n _bot_colour.b * proportion + _top_colour.b * (1 - proportion));\n current_colors.push(_bot_colour.getHex());\n }\n\t\t\t\t/*\n\t\t\t\tfor (var i = 0; i < bottom_colors.length; i++) {\n\t\t\t\t\tcurrent_colors.push(proportion * bottom_colors[i] + (1.0 - proportion) * top_colors[i]);\n\t\t\t\t}\n\t\t\t\t*/\n } else {\n current_colors = colors[\"0\"];\n }\n updateGlyphsetHexColors(current_colors);\n }\n current_positions = null;\n current_axis1s = null;\n current_axis2s = null;\n current_axis3s = null;\n current_scales = null;\n current_colors = null;\n };\n\n this.showLabel = () => {\n for (let i = 0; i < glyphList.length; i++) {\n glyphList[i].showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n }\n\n const createGlyphs = (displayLabels) => {\n if ((labels != undefined) && displayLabels) {\n for (let i = 0; i < numberOfVertices; i++) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, i, this);\n if (labels != undefined && labels[i] != undefined) {\n glyph.setLabel(labels[i]);\n }\n if (numberOfTimeSteps > 0) {\n glyph.setFrustumCulled(false);\n }\n glyphList[i] = glyph;\n this.morph.add(glyph.getGroup());\n }\n }\n if ((labels != undefined) && displayLabels) {\n this.showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n //Update the transformation of the glyphs.\n updateGlyphsetTransformation(positions[\"0\"], axis1s[\"0\"],\n axis2s[\"0\"], axis3s[\"0\"], scales[\"0\"]);\n //Update the color of the glyphs.\n if (colors != undefined) {\n updateGlyphsetHexColors(colors[\"0\"]);\n }\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n };\n\n this.addCustomGlyph = glyph => {\n if (glyph.isGlyph)\n glyphList.push(glyph);\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n this.addMeshAsGlyph = (mesh, id) => {\n if (mesh.isMesh) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, id, this);\n glyph.fromMesh(mesh);\n glyphList.push(glyph);\n this.morph.add(glyph.getGroup())\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n return glyph;\n }\n return undefined;\n }\n\n\t/**\n\t * A function which iterates through the list of glyphs and call the callback\n\t * function with the glyph as the argument.\n\t * @param {Function} callbackFunction - Callback function with the glyph\n\t * as an argument.\n\t */\n this.forEachGlyph = callbackFunction => {\n for (let i = 0; i < glyphList.length; i++) {\n callbackFunction(glyphList[i]);\n }\n }\n\n var meshloader = (finishCallback, displayLabels) => {\n return (geometry, materials) => {\n this.geometry.copy(geometry.toBufferGeometry());\n this.geometry.computeBoundingSphere();\n this.geometry.computeBoundingBox();\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 if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(this);\n };\n }\n\n /**\n * Get the index of the closest vertex to centroid.\n */\n this.getClosestVertexIndex = function () {\n let closestIndex = -1;\n if (this.morph && this.ready) {\n let center = new THREE.Vector3();\n this.getBoundingBox().getCenter(center);\n let current_positions = positions[\"0\"];\n const numberOfPositions = current_positions.length / 3;\n let position = new THREE.Vector3();\n let distance = -1;\n let currentDistance = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n position.set(current_positions[current_index],\n current_positions[current_index + 1],\n current_positions[current_index + 2]);\n currentDistance = center.distanceTo(position);\n if (distance == -1) {\n distance = currentDistance;\n closestIndex = i;\n } else if (distance > currentDistance) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n return closestIndex;\n }\n\n /**\n * Get the closest vertex to centroid.\n */\n this.getClosestVertex = function () {\n\n if (this.markerVertexIndex == -1) {\n this.markerVertexIndex = this.getClosestVertexIndex();\n }\n if (this.markerVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.markerVertexIndex]) {\n glyphList[this.markerVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.markerVertexIndex, _transformMatrix);\n position.setFromMatrixPosition(_transformMatrix);\n return position;\n }\n }\n\n return undefined;\n }\n\n this.applyMatrix4ToBox = (box1, box2, matrix) => {\n _points[0].set(box1.min.x, box1.min.y, box1.min.z).applyMatrix4(matrix); // 000\n _points[1].set(box1.min.x, box1.min.y, box1.max.z).applyMatrix4(matrix); // 001\n _points[2].set(box1.min.x, box1.max.y, box1.min.z).applyMatrix4(matrix); // 010\n _points[3].set(box1.min.x, box1.max.y, box1.max.z).applyMatrix4(matrix); // 011\n _points[4].set(box1.max.x, box1.min.y, box1.min.z).applyMatrix4(matrix); // 100\n _points[5].set(box1.max.x, box1.min.y, box1.max.z).applyMatrix4(matrix); // 101\n _points[6].set(box1.max.x, box1.max.y, box1.min.z).applyMatrix4(matrix); // 110\n _points[7].set(box1.max.x, box1.max.y, box1.max.z).applyMatrix4(matrix); // 111\n box2.setFromPoints(_points);\n }\n\n\n\t/**\n\t * Get the bounding box for the whole set of glyphs.\n\t * \n\t * @return {Three.Box3};\n\t */\n this.getBoundingBox = () => {\n if (this.morph && this.ready && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n _boundingBox1.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n for (let i = 0; i < numberOfVertices; i++) {\n this.morph.getMatrixAt(i, _transformMatrix);\n this.applyMatrix4ToBox(_boundingBox1, _boundingBox2, _transformMatrix);\n if (i == 0) {\n _boundingBox3.copy(_boundingBox2);\n } else {\n _boundingBox3.union(_boundingBox2);\n }\n }\n if (_boundingBox3) {\n this.cachedBoundingBox.copy(_boundingBox3);\n this.boundingBoxUpdateRequired = false;\n } else\n return undefined;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n\n\t/**\n\t * Set the local time of this glyphset.\n\t * \n\t * @param {Number} time - Can be any value between 0 to duration.\n\t */\n this.setMorphTime = time => {\n if (time > this.duration)\n this.inbuildTime = this.duration;\n else if (0 > time)\n this.inbuildTime = 0;\n else\n this.inbuildTime = time;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n if (morphVertices)\n this.markerUpdateRequired = true;\n }\n }\n\n /**\n * Check if the glyphset is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if ((numberOfTimeSteps > 0) && (morphColours || morphVertices))\n return true;\n return false;\n }\n\n this.getCurrentTime = () => {\n return this.inbuildTime;\n }\n\n\n\t/**\n\t * Clear this glyphset and its list of glyphs which will release them from the memory.\n\t */\n this.dispose = () => {\n for (let i = glyphList.length - 1; i >= 0; i--) {\n glyphList[i].dispose();\n }\n if (this.geometry)\n this.geometry.dispose();\n if (this.morph)\n this.morph.material.dispose();\n axis1s = undefined;\n axis2s = undefined;\n axis3s = undefined;\n positions = undefined;\n scales = undefined;\n colors = undefined;\n this.ready = false;\n this.groupName = undefined;\n }\n\n //Update the geometry and colours depending on the morph.\n this.render = (delta, playAnimation, options) => {\n if (playAnimation == true) {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration\n this.inbuildTime = targetTime;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n }\n }\n this.updateMarker(playAnimation, options);\n }\n}\n\nGlyphset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyphset = Glyphset;\n","var THREE = require('three');\n\nvar Loader = require('./three/Loader').Loader;\nvar LoaderUtils = THREE.LoaderUtils;\nvar AnimationClip = THREE.AnimationClip;\nvar Vector3 = THREE.Vector3;\nvar Vector4 = THREE.Vector4;\nvar Color = THREE.Color;\nvar Vector2 = THREE.Vector2;\nvar Face3 = require('./three/Geometry').Face3;\nvar Geometry = require('./three/Geometry').Geometry;\nvar FileLoader = THREE.FileLoader;\nvar DefaultLoadingManager = THREE.DefaultLoadingManager;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n\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.morphColors !== undefined ) {\n\n\t\t\t\tvar i, l, c, cl, dstColors, srcColors, color;\n\n\t\t\t\tfor ( i = 0, l = json.morphColors.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphColors[ i ] = {};\n\t\t\t\t\tgeometry.morphColors[ i ].name = json.morphColors[ i ].name;\n\t\t\t\t\tgeometry.morphColors[ i ].colors = [];\n\n\t\t\t\t\tdstColors = geometry.morphColors[ i ].colors;\n\t\t\t\t\tsrcColors = json.morphColors[ i ].colors;\n\n\t\t\t\t\tfor ( c = 0, cl = srcColors.length; c < cl; c += 3 ) {\n\n\t\t\t\t\t\tcolor = new THREE.Color( 0xffaa00 );\n\t\t\t\t\t\tcolor.setRGB( srcColors[ c ], srcColors[ c + 1 ], srcColors[ c + 2 ] );\n\t\t\t\t\t\tdstColors.push( color );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\t\t\tgeometry.morphColors = [];\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, 'Anonymous' );\n\n\t\t\t\t\n\t\t\t\tif (json.materials[0].video) {\n\t\t\t\t\t\n\t\t\t\t\tvar fullPath = texturePath + json.materials[0].video;\n\t\t\t\t\t\n\t\t\t\t\tconst videoHandler = new (require('./videoHandler').VideoHandler)(fullPath);\n\t\t\t\t\t\n\t\t\t\t\tgeometry._video = videoHandler;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (materials && materials.length > 0) {\n\t\t\t\t\tif (json.materials[0].singleSided) {\n\t\t\t\t\t\tmaterials[0].side = THREE.FrontSide;\n\t\t\t\t\t} else if (json.materials[0].flipSided){\n\t\t\t\t\t\tmaterials[0].side = THREE.BackSide;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaterials[0].side = THREE.DoubleSide;\n }\n if (json.materials[0].specularCoef) {\n materials[0].shininess = Math.floor(json.materials[0].specularCoef / 3);\n }\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n\nexport { JSONLoader };\n","var THREE = require('three');\n\nimport {\n\tNoBlending,\n\tNormalBlending,\n\tAdditiveBlending,\n\tSubtractiveBlending,\n\tMultiplyBlending,\n\tCustomBlending,\n\n\tFaceColors,\n\tVertexColors,\n\n\tDoubleSide,\n\tBackSide,\n\n\tMirroredRepeatWrapping,\n RepeatWrapping,\n MathUtils,\n MaterialLoader,\n TextureLoader,\n Color\n} from 'three';\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = MathUtils.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: MathUtils.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\nexport { Loader };\n","var THREE = require('three');\n\n\n// Alan notes: pause video when stuck\n//VideoTexture is used for creating and updating a video projected onto a Three.js texture\nexports.VideoHandler = function(srcIn) {\n\n\tvar _this = this;\n\tthis.video = undefined;\n\tthis.videoTexture = undefined;\n\tvar src = srcIn;\n\tvar lastTime = 0;\n\tvar lastUpdate = 0;\n\tvar frameRate = 30;\n\tvar videoPlaneLoadedFlag = false;\n\tvar lastPlayPos = 0;\n\tvar currentPlayPos = 0;\n\tvar bufferingDetected = false;\n\t\n\tvar checkBuffering = function(delta, playAnimation) {\n\t currentPlayPos = _this.video.currentTime;\n\n\t // checking offset should be at most the check interval\n\t // but allow for some margin\n\t var offset = delta - 0.02;\n\n\t // if no buffering is currently detected,\n\t // and the position does not seem to increase\n\t // and the _this.video isn't manually paused...\n\t if (!bufferingDetected && (currentPlayPos < (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = true;\n\t }\n\n\t // if we were buffering but the _this.video has advanced,\n\t // then there is no buffering\n\t if (bufferingDetected && (currentPlayPos > (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = false;\n\t }\n\t lastPlayPos = currentPlayPos;\n\t}\n\n\tvar initialise = function(){\n\t\tif (document) {\n\t\t \t_this.video = document.createElement( 'video' );\n\t\t \t_this.video.crossOrigin = \"anonymous\";\n\t\t \t_this.video.src = src;\n\t\t \t_this.video.load();\n _this.video.loop = true;\n \n\t\t}\n\t}\n\n\tthis.setMorphTime = function(time, duration){\n\t\tvar actualTime = time / duration * _this.video.duration;\n\t\t_this.video.currentTime = actualTime;\n\t}\n\n\t// videoPlaneLoaded connects the video to the video texture once it has loaded\n\t this.getVideoDuration = function() {\n\t\t return _this.video.duration;\n\t}\n\n\tthis.createCanvasVideoTexture = function(){\n\t\t_this.videoTexture = new THREE.VideoTexture( _this.video );\n\t\t_this.videoTexture.minFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.magFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.format = THREE.RGBFormat;\n _this.video.currentTime = 0;\n\t\treturn _this.videoTexture;\n\t}\n\t\n\tthis.getCurrentTime = function(duration) {\n\t\tif (_this.video)\n\t\t\treturn duration * (_this.video.currentTime / _this.video.duration);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tthis.isReadyToPlay = function(){\n\t\t// video.readyState 3 means we have data to load for the current time and foreseeable future\n\t\tif (_this.video && _this.video.readyState >= 3){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}","const THREE = require('three');\nconst Points = require('../three/Points').Points;\n\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Geometry}\n */\nconst Pointset = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isPointset = true;\n\n /** Shape of the points is created using the function below */\n\tconst getCircularTexture = () => {\n\t\tvar image = new Image();\n\t\timage.src = require(\"../assets/disc.png\");\n\t\tconst texture = new THREE.Texture();\n\t\ttexture.image = image;\n\t\ttexture.needsUpdate = true;\n\t\treturn texture;\n\t}\n\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tconst texture = getCircularTexture();\n\t\t\tmaterialIn.map = texture;\n\t\t\tlet point = new Points(geometry, materialIn);\n\t\t\tthis.setMesh(point, options.localTimeEnabled, options.localMorphColour);\n\t\t}\t\n\t}\n\n\tthis.setSize = size => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.size = size;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\t\n\tthis.setSizeAttenuation = flag => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.sizeAttenuation = flag;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n}\n\nPointset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Pointset = Pointset;\n","import {\n\tBufferGeometry,\n\tMatrix4,\n Object3D,\n PointsMaterial,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n const drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n \n calculatePosition( this, positionAttribute, morphPosition, a );\n\n\t\t\t\t\ttestPoint( _position, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n \n calculatePosition( this, positionAttribute, morphPosition, i );\n\n\t\t\t\t\ttestPoint( _position, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction calculatePosition( object, position, morphPosition, a )\t{\n\n _position.fromBufferAttribute( position, a );\n\n const morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n const influence = morphInfluences[ i ];\n const morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n\n _morphA.addScaledVector( _tempA.sub( _position ), influence );\n\n }\n\n _position.add( _morphA );\n\n }\n\n}\n\nexport { Points };","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==\"","const THREE = require('three');\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst Lines = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isLines = true;\n\n\tthis.createLineSegment = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n let line = new (require(\"../three/line/LineSegments\").LineSegments)(geometry, materialIn);\n\t\t\tthis.setMesh(line, options.localTimeEnabled, options.localMorphColour);\n\t\t}\t\t\n\t}\n\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n}\n\nLines.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Lines = Lines;\n","import { Line } from './Line.js';\nimport {\n Float32BufferAttribute,\n\tVector3\n} from 'three';\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nexport { LineSegments };","import {\n BufferGeometry,\n Float32BufferAttribute,\n LineBasicMaterial,\n\tMatrix4,\n Object3D,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n const drawRange = geometry.drawRange;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n const b = index.getX( i + 1 );\n \n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, a, b );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, i, i+1 );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction calculatePosition( vStart, vEnd, object, position, morphPosition, a, b )\t{\n\n vStart.fromBufferAttribute( position, a );\n vEnd.fromBufferAttribute( position, b );\n\n var morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n _morphB.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n var influence = morphInfluences[ i ];\n var morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n _tempB.fromBufferAttribute( morphAttribute, b );\n\n _morphA.addScaledVector( _tempA.sub( vStart ), influence );\n _morphB.addScaledVector( _tempB.sub( vEnd ), influence );\n\n }\n\n vStart.add( _morphA );\n vEnd.add( _morphB );\n\n }\n\n}\n\nLine.prototype.isLine = true;\n\n\nexport { Line };","const THREE = require('three');\r\nconst ResizeSensor = require('css-element-queries/src/ResizeSensor');\r\n/**\r\n * Create a Zinc 3D renderer in the container provided.\r\n * The primary function of a Zinc 3D renderer is to display the current\r\n * scene (@link Zinc.Scene} set to the renderer and each scene may contain as \r\n * many geometries, glyphset and other primitives as the system can support.\r\n * Zinc.Renderer also allows additional scenes to be displayed.\r\n * \r\n * @param {Object} containerIn - Container to create the renderer on.\r\n * @class\r\n * @author Alan Wu\r\n * @return {Zinc.Renderer}\r\n */\r\nexports.Renderer = function (containerIn) {\r\n\r\n\tlet container = containerIn;\r\n\t\r\n\tconst stats = 0;\r\n\t\r\n\tlet renderer = undefined;\r\n\tlet currentScene = undefined;\r\n\r\n\t//myGezincGeometriestains a tuple of the threejs mesh, timeEnabled, morphColour flag, unique id and morph\r\n\tconst clock = new THREE.Clock(false);\r\n\tthis.playAnimation = true;\r\n /* default animation update rate, rate is 1000 and duration \r\n is default to 6000, 6s to finish a full animation */\r\n\tlet playRate = 1000;\r\n\tlet preRenderCallbackFunctions = [];\r\n let preRenderCallbackFunctions_id = 0;\r\n let postRenderCallbackFunctions = [];\r\n\tlet postRenderCallbackFunctions_id = 0;\r\n\tlet animated_id = undefined;\r\n\tlet cameraOrtho = undefined, sceneOrtho = undefined, logoSprite = undefined;\r\n\tlet sceneMap = [];\r\n\tlet additionalActiveScenes = [];\r\n\tlet scenesGroup = new THREE.Group();\r\n\tlet canvas = undefined;\r\n let sensor = undefined;\r\n let isRendering = false;\r\n\tconst _this = this;\r\n\tconst currentSize = [0, 0];\r\n\tconst currentOffset = [0, 0];\r\n\t\r\n\tthis.getDrawingWidth = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientWidth;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientWidth !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientWidth);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.width);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tthis.getDrawingHeight = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientHeight;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientHeight !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientHeight);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.height);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t/** \r\n\t * Call this to resize the renderer, this is normally call automatically.\r\n\t */\r\n\tthis.onWindowResize = () => {\r\n\t\tcurrentScene.onWindowResize();\r\n\t\tconst width = this.getDrawingWidth();\r\n\t\tconst height = this.getDrawingHeight();\r\n\t\tif (renderer != undefined) {\r\n\t\t\tlet rect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\trect = container.getBoundingClientRect();\r\n\t\t\t\trenderer.setSize(width, height);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (typeof canvas.getBoundingClientRect !== 'undefined') {\r\n\t\t\t\t\trect = canvas.getBoundingClientRect();\r\n\t\t\t\t\tcanvas.width = width;\r\n\t\t\t\t\tcanvas.height = height;\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (rect) {\r\n\t\t\t\tcurrentOffset[0] = rect.left;\r\n\t\t\t\tcurrentOffset[1] = rect.top;\r\n\t\t\t}\r\n\t\t\tconst target = new THREE.Vector2();\r\n\t\t\trenderer.getSize(target);\r\n\t\t\tcurrentSize[0] = target.x;\r\n\t\t\tcurrentSize[1] = target.y;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialise the renderer and its visualisations.\r\n\t */\r\n\tthis.initialiseVisualisation = parameters => {\r\n\t parameters = parameters || {};\r\n\t if (parameters['antialias'] === undefined) {\r\n let onMobile = false;\r\n try {\r\n if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\r\n onMobile = true;\r\n }\r\n }\r\n catch(err) {\r\n onMobile = false;\r\n }\r\n if (onMobile)\r\n parameters['antialias'] = false;\r\n else\r\n parameters['antialias'] = true;\r\n\t }\r\n\t if (parameters[\"canvas\"]) {\r\n\t\t container = undefined;\r\n\t\t canvas = parameters[\"canvas\"];\r\n\t }\r\n renderer = new THREE.WebGLRenderer(parameters);\r\n if (container !== undefined) {\r\n\t\t container.appendChild( renderer.domElement );\r\n }\r\n\t renderer.setClearColor( 0xffffff, 1);\r\n\t if (canvas && canvas.style) {\r\n\t\t canvas.style.height = \"100%\";\r\n\t\t canvas.style.width = \"100%\";\r\n }\r\n renderer.autoClear = false;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the current scene on display.\r\n\t * @return {Zinc.Scene};\r\n\t */\r\n\tthis.getCurrentScene = () => {\r\n\t\treturn currentScene;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current scene on display.\r\n\t * \r\n\t * @param {Zinc.Scene} sceneIn - The scene to be set, only scene created by this instance\r\n\t * of ZincRenderer is supported currently.\r\n\t */\r\n\tthis.setCurrentScene = sceneIn => {\r\n\t\tif (sceneIn) {\r\n\t\t\tthis.removeActiveScene(sceneIn);\r\n\t\t\tconst oldScene = currentScene;\r\n\t\t\tcurrentScene = sceneIn;\r\n\t\t\tif (oldScene) {\r\n\t\t\t\toldScene.setInteractiveControlEnable(false);\r\n\t\t\t}\r\n\t\t\tcurrentScene.setInteractiveControlEnable(true);\r\n\t\t\tcurrentScene.setAdditionalScenesGroup(scenesGroup);\r\n\t\t\tthis.onWindowResize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Return scene with the matching name if scene with that name has been created.\r\n\t * \r\n\t * @param {String} name - Name to match\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.getSceneByName = name => {\r\n\t\treturn sceneMap[name];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Create a new scene with the provided name if scene with the same name exists,\r\n\t * return undefined.\r\n\t * \r\n\t * @param {String} name - Name of the scene to be created.\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.createScene = name => {\r\n\t\tif (sceneMap[name] != undefined){\r\n\t\t\treturn undefined;\r\n\t\t} else {\r\n\t\t\tlet new_scene = undefined;\r\n\t\t\tif (canvas)\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(canvas, renderer);\r\n\t\t\telse\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(container, renderer);\r\n\t\t\tsceneMap[name] = new_scene;\r\n\t\t\tnew_scene.sceneName = name;\r\n\t\t\treturn new_scene;\r\n\t\t}\r\n\t}\r\n\t\r\n\tconst updateOrthoScene = () => {\r\n\t\tif (logoSprite != undefined) {\r\n\t\t\tconst material = logoSprite.material;\r\n\t\t\tif (material.map) {\r\n\t\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\t\tconst calculatedWidth = (width - material.map.image.width)/2;\r\n\t\t\t\tconst calculatedHeight = (-height + material.map.image.height)/2;\r\n\t\t\t\tlogoSprite.position.set(calculatedWidth, calculatedHeight, 1 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tconst updateOrthoCamera = () => {\r\n\t\tif (cameraOrtho != undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho.left = -width / 2;\r\n\t\t\tcameraOrtho.right = width / 2;\r\n\t\t\tcameraOrtho.top = height / 2;\r\n\t\t\tcameraOrtho.bottom = -height / 2;\r\n\t\t\tcameraOrtho.updateProjectionMatrix();\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Reset the viewport of the current scene to its original state.\r\n\t */\r\n\tthis.resetView = () => {\r\n\t\tcurrentScene.resetView();\r\n\t}\r\n\t\r\n\t/**\r\n\t * Adjust zoom distance to include all primitives in scene and also the additional scenes\r\n\t * but the lookat direction and up vectors will remain constant.\r\n\t */\r\n\tthis.viewAll = () => {\r\n\t\tif (currentScene) {\t\r\n\t\t\tconst boundingBox = currentScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\t const boundingBox2 = additionalActiveScenes[i].getBoundingBox();\r\n\t\t\t if (boundingBox2) {\r\n\t\t\t \tboundingBox.union(boundingBox2);\r\n\t\t\t }\r\n\t\t\t }\r\n\t\t\t\tcurrentScene.viewAllWithBoundingBox(boundingBox);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\r\n\t * without any of the metadata. Therefore, extra parameters should be provided. This should be\r\n\t * called from {@link Zinc.Scene}.\r\n\t * \r\n\t * @deprecated\r\n\t */\r\n\tthis.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\r\n\t\tcurrentScene.loadModelsURL(urls, colours, opacities, timeEnabled, morphColour, finishCallback);\r\n\t}\r\n\t\r\n\tconst loadView = viewData => {\r\n\t\tcurrentScene.loadView(viewData);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Load the viewport from an external location provided by the url. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * @param {String} URL - address to the file containing viewport information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadViewURL = url => {\r\n\t\tcurrentScene.loadViewURL(url);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy file format containing the viewport and its model file from an external \r\n\t * location provided by the url. Use the new metadata format with\r\n\t * {@link Zinc.Scene#loadMetadataURL} instead. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * \r\n\t * @param {String} URL - address to the file containing viewport and model information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\r\n\t\tcurrentScene.loadFromViewURL(jsonFilePrefix, finishCallback);\r\n\t}\r\n\t\r\n\tthis.updateDirectionalLight = () => {\r\n\t\tcurrentScene.updateDirectionalLight();\r\n\t}\r\n \r\n let runAnimation = () => {\r\n if (isRendering) {\r\n animated_id = requestAnimationFrame( runAnimation );\r\n this.render();\r\n } else {\r\n cancelAnimationFrame(animated_id);\r\n animated_id = undefined;\r\n }\r\n }\r\n\r\n\t/**\r\n\t * Stop the animation and renderer to get into the render loop.\r\n\t */\r\n\tthis.stopAnimate = () => {\r\n if (isRendering) {\r\n clock.stop();\r\n isRendering = false;\r\n }\r\n\t}\r\n\r\n\t/**\r\n\t * Start the animation and begin the rendering loop.\r\n\t */\r\n\tthis.animate = () => {\r\n if (!isRendering) {\r\n clock.start();\r\n isRendering = true;\r\n runAnimation();\r\n }\r\n\t}\r\n\r\n\tconst prevTime = Date.now();\r\n\t\r\n\t/**\r\n\t * Add a callback function which will be called everytime before the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPreRenderCallbackFunction = callbackFunction => {\r\n\t\tpreRenderCallbackFunctions_id = preRenderCallbackFunctions_id + 1;\r\n\t\tpreRenderCallbackFunctions[preRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn preRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePreRenderCallbackFunction = id => {\r\n\t\tif (id in preRenderCallbackFunctions) {\r\n \t\t\tdelete preRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n \r\n\t/**\r\n\t * Add a callback function which will be called everytime after the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPostRenderCallbackFunction = callbackFunction => {\r\n\t\tpostRenderCallbackFunctions_id = postRenderCallbackFunctions_id + 1;\r\n\t\tpostRenderCallbackFunctions[postRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn postRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePostRenderCallbackFunction = id => {\r\n\t\tif (id in postRenderCallbackFunctions) {\r\n \t\t\tdelete postRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.getPlayRate = () => {\r\n\t\treturn playRate;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current play rate, playrate affects how fast an animated object animates.\r\n\t * @param {Number} PlayRateIn - value to set the playrate to.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setPlayRate = playRateIn => {\r\n\t\tplayRate = playRateIn;\r\n\t}\r\n\t\r\n\tthis.getCurrentTime = () => {\r\n\t\treturn currentScene.getCurrentTime();\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setMorphsTime = time => {\r\n\t\tcurrentScene.setMorphsTime(time);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get {Zinc.Geoemtry} by its id. This should be called from {@link Zinc.Scene};\r\n\t * \r\n\t * @depreacted\r\n\t * @return {Zinc.Geometry}\r\n\t */\r\n\tthis.getZincGeometryByID = id => {\r\n\t\treturn currentScene.getZincGeometryByID(id);\r\n\t}\t\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the current scene.\r\n\t */\r\n\tthis.addToScene = object => {\r\n\t\tcurrentScene.addObject(object)\r\n\t}\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the ortho scene, objects added to the ortho scene are rendered in\r\n\t * normalised coordinates and overlay on top of current scene. \r\n\t * \r\n\t */\r\n\tthis.addToOrthoScene = object => {\r\n\t\tif (sceneOrtho == undefined)\r\n\t\t\tsceneOrtho = new THREE.Scene();\r\n\t\tif (cameraOrtho == undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho = new THREE.OrthographicCamera( -width / 2,\r\n\t\t\t\t\twidth / 2, height/ 2, -height / 2, 1, 10 );\r\n\t\t\tcameraOrtho.position.z = 10;\r\n\t\t}\r\n\t\tsceneOrtho.add(object)\r\n\t}\r\n\t\r\n\tconst createHUDSprites = logoSprite => {\r\n\t\treturn texture => {\r\n\t\t\ttexture.needsUpdate = true;\r\n\t\t\tconst material = new THREE.SpriteMaterial( { map: texture } );\r\n\t\t\tconst imagewidth = material.map.image.width;\r\n\t\t\tconst imageheight = material.map.image.height;\r\n\t\t\tlogoSprite.material = material;\r\n\t\t\tlogoSprite.scale.set( imagewidth, imageheight, 1 );\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tlogoSprite.position.set( (width - imagewidth)/2, (-height + imageheight)/2, 1 );\r\n\t\t\tthis.addToOrthoScene(logoSprite);\r\n\t\t};\r\n\t};\r\n\t\r\n\tthis.addLogo = () => {\r\n\t\tlogoSprite = new THREE.Sprite();\r\n\t\tconst logo = THREE.ImageUtils.loadTexture(\r\n\t\t\t\t\"images/abi_big_logo_transparent_small.png\", undefined, createHUDSprites(logoSprite));\r\n\t}\r\n\t\r\n\t/**\r\n\t * Render the current and all additional scenes. It will first update all geometries and glyphsets\r\n\t * in scenes, clear depth buffer and render the ortho scene, call the preRenderCallbackFunctions stack\r\n\t * , render the scenes then postRenderCallback.\r\n\t */\r\n\tthis.render = () => {\r\n\t\tif (!sensor) {\r\n\t\t\tif (container) {\r\n\t\t\t\tif (container.clientWidth > 0 && container.clientHeight > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(container, this.onWindowResize);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (canvas.width > 0 && canvas.height > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(canvas, this.onWindowResize);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst delta = clock.getDelta();\r\n\t\tcurrentScene.renderGeometries(playRate, delta, this.playAnimation);\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t sceneItem.renderGeometries(playRate, delta, this.playAnimation);\r\n\t }\r\n\t\tif (cameraOrtho != undefined && sceneOrtho != undefined) {\r\n\t\t\trenderer.clearDepth();\r\n\t\t\trenderer.render( sceneOrtho, cameraOrtho );\r\n\t\t}\r\n for (key in preRenderCallbackFunctions) {\r\n if (preRenderCallbackFunctions.hasOwnProperty(key)) {\r\n preRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n currentScene.render(renderer);\r\n for (key in postRenderCallbackFunctions) {\r\n if (postRenderCallbackFunctions.hasOwnProperty(key)) {\r\n postRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the internal {@link Three.Renderer}, to gain access to ThreeJS APIs.\r\n\t */\r\n\tthis.getThreeJSRenderer = () => {\r\n\t\treturn renderer;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Check if a scene is currently active.\r\n\t * @param {Zinc.Scene} sceneIn - Scene to check if it is currently\r\n\t * rendered.\r\n\t */\r\n\tthis.isSceneActive = sceneIn => {\r\n\t\tif (currentScene === sceneIn) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t const sceneItem = additionalActiveScenes[i];\r\n\t\t if (sceneItem === sceneIn)\r\n\t\t \treturn true;\r\n\t\t }\r\n\t\t}\r\n\t return false;\r\n\t} \r\n\t\r\n\t/**\r\n\t * Add additional active scene for rendering, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be added to the rendering.\r\n\t */\r\n\tthis.addActiveScene = additionalScene => {\r\n\t\tif (!this.isSceneActive(additionalScene)) {\r\n\t\t\tadditionalActiveScenes.push(additionalScene);\r\n\t\t\tscenesGroup.add(additionalScene.getThreeJSScene());\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a currenrtly active scene from the renderer, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be removed from rendering.\r\n\t */\r\n\tthis.removeActiveScene = additionalScene => {\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t if (sceneItem === additionalScene) {\r\n\t \tadditionalActiveScenes.splice(i, 1);\r\n\t \tscenesGroup.remove(additionalScene.getThreeJSScene());\r\n\t \treturn;\r\n\t }\r\n\t }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Clear all additional scenes from rendering except for curentScene.\r\n\t */\r\n\tthis.clearAllActiveScene = () => {\r\n\t\tfor (let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\tscenesGroup.remove(additionalActiveScenes[i].getThreeJSScene());\r\n\t\t}\r\n\t\tadditionalActiveScenes.splice(0,additionalActiveScenes.length);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Dispose all memory allocated, this will effetively destroy all scenes.\r\n\t */\r\n\tthis.dispose = () => {\r\n if (isRendering)\r\n cancelAnimationFrame(animated_id);\r\n\t for (const key in sceneMap) {\r\n\t if (sceneMap.hasOwnProperty(key)) {\r\n\t sceneMap[key].clearAll();\r\n\t }\r\n\t }\r\n\t sceneMap = [];\r\n\t additionalActiveScenes = [];\r\n\t scenesGroup = new THREE.Group();\r\n\t this.stopAnimate();\r\n\t preRenderCallbackFunctions = [];\r\n\t preRenderCallbackFunctions_id = 0;\r\n\t cameraOrtho = undefined;\r\n\t sceneOrtho = undefined;\r\n\t logoSprite = undefined;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t sensor = undefined;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Transition from the current viewport to the endingScene's viewport in the specified duration.\r\n\t * \r\n\t * @param {Zinc.Scene} endingScene - Viewport of this scene will be used as the destination.\r\n\t * @param {Number} duration - Amount of time to transition from current viewport to the \r\n\t * endingScene's viewport.\r\n\t */\r\n\tthis.transitionScene = (endingScene, duration) => {\r\n\t\tif (currentScene) {\r\n\t\t\tconst currentCamera = currentScene.getZincCameraControls();\r\n\t\t\tconst boundingBox = endingScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t\tconst radius = boundingBox.min.distanceTo(boundingBox.max)/2.0;\r\n\t\t\t\tconst centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\r\n\t\t\t\tconst centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\r\n\t\t\t\tconst centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\r\n\t\t\t\tconst clip_factor = 4.0;\r\n\t\t\t\tconst endingViewport = currentCamera.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor );\r\n\t\t\t\tconst startingViewport = currentCamera.getCurrentViewport();\r\n\t\t\t\tcurrentCamera.cameraTransition(startingViewport, endingViewport, duration);\r\n\t\t\t\tcurrentCamera.enableCameraTransition();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n","module.exports = require(\"css-element-queries/src/ResizeSensor\");","const THREE = require('three');\nconst SceneLoader = require('./sceneLoader').SceneLoader;\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 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 zincObjects = [];\n let videoHandler = undefined;\n let sceneLoader = new SceneLoader(this);\n let minimap = undefined;\n const scene = new THREE.Scene();\n /**\n * A {@link THREE.DirectionalLight} object for controlling lighting of this scene.\n */\n this.directionalLight = undefined;\n /**\n * a {@link THREE.AmbientLight} for controlling the ambient lighting of this scene.\n */\n this.ambient = undefined;\n this.camera = undefined;\n let duration = 6000;\n let zincCameraControls = undefined;\n this.sceneName = undefined;\n let stereoEffectFlag = false;\n let stereoEffect = undefined;\n this.autoClearFlag = true;\n this.displayMarkers = false;\n this.displayMinimap = false;\n this.minimapScissor = {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-left\",\n updateRequired: true\n };\n let scissor = {x: 0, y: 0};\n let metadata = defaultMetadata();\n let _markerTarget = new THREE.Vector2();\n\n const getDrawingWidth = () => {\n if (container)\n if (typeof container.clientWidth !== \"undefined\")\n return container.clientWidth;\n else\n return container.width;\n return 0;\n }\n\n const getDrawingHeight = () => {\n if (container)\n if (typeof container.clientHeight !== \"undefined\")\n return container.clientHeight;\n else\n return container.height;\n return 0;\n }\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n return sceneLoader.getDownloadProgress();\n }\n\n //called from Renderer when panel has been resized\n this.onWindowResize = () => {\n zincCameraControls.onResize();\n this.camera.aspect = getDrawingWidth() / getDrawingHeight();\n this.camera.updateProjectionMatrix();\n this.minimapScissor.updateRequired = true;\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 = ({ nearPlane, farPlane, eyePosition, targetPosition, upVector}) => {\n const viewPort = new (require('./controls').Viewport)();\n viewPort.nearPlane = nearPlane;\n viewPort.farPlane = farPlane;\n viewPort.eyePosition = eyePosition;\n viewPort.targetPosition = targetPosition;\n viewPort.upVector = upVector;\n zincCameraControls.setDefaultCameraSettings(viewPort);\n zincCameraControls.resetView();\n return true;\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 let boundingBox1 = undefined, boundingBox2 = undefined;\n for (let i = 0; i < zincObjects.length; i++) {\n boundingBox2 = zincObjects[i].getBoundingBox();\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2;\n } else {\n if (boundingBox2)\n boundingBox1.union(boundingBox2);\n }\n }\n return boundingBox1;\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 for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].isGeometry)\n callbackFunction(zincObjects[i]);\n }\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 for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].isGlyphset)\n callbackFunction(zincObjects[i]);\n }\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 for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].isPointset)\n callbackFunction(zincObjects[i]);\n }\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 for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].isLines)\n callbackFunction(zincObjects[i]);\n }\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 const geometriesArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isGeometry &&\n (zincObjects[i].groupName == GroupName)) {\n geometriesArray.push(zincObjects[i]);\n }\n }\n return geometriesArray;\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 const pointsetsArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isPointset &&\n (zincObjects[i].groupName == GroupName)) {\n \t pointsetsArray.push(zincObjects[i]);\n }\n }\n return pointsetsArray;\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 const glyphsetsArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isGlyphset &&\n (zincObjects[i].groupName == GroupName)) {\n glyphsetsArray.push(zincObjects[i]);\n }\n }\n return glyphsetsArray;\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 const linesArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isLines &&\n (zincObjects[i].groupName == GroupName)) {\n \t linesArray.push(zincObjects[i]);\n }\n }\n return linesArray;\n }\n\n this.findObjectsWithGroupName = GroupName => {\n const objectsArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].groupName == GroupName) {\n \t objectsArray.push(zincObjects[i]);\n }\n }\n return objectsArray;\n }\n\n this.findObjectsWithAnatomicalId = anatomicalId => {\n const objectsArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].anatomicalId == anatomicalId) {\n \t objectsArray.push(zincObjects[i]);\n }\n }\n return objectsArray;\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 scene.add(zincObject.morph);\n zincObjects.push(zincObject);\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(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(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(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(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(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(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(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 * 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 this.addZincGeometry = (\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 this.addZincObject(newGeometry);\n newGeometry.setDuration(duration);\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGeometry);\n if (!videoHandler && newGeometry.videoHandler)\n videoHandler = newGeometry.videoHandler;\n return newGeometry;\n }\n return undefined;\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 if (zincObjects[0] != undefined) {\n return zincObjects[0].getCurrentTime();\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 for (let i = 0; i < zincObjects.length; i++) {\n zincObjects[i].setMorphTime(time);\n }\n }\n\n /**\n * Check if any object in this scene 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 if (videoHandler && videoHandler.video && !videoHandler.video.error) {\n \treturn true;\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) => {\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 var 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\t\t\t\t for (let i = 0; i < zincObjects.length; i++) {\n\t\t\t\t\t zincObjects[i].setMorphTime(currentTime);\n\t\t\t\t\t zincObjects[i].render(0, playAnimation);\n\t\t\t\t }\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\t\t\t for (let i = 0; i < zincObjects.length; i++) {\n\t\t\t\t zincObjects[i].render(playRate * delta, playAnimation, options);\n }\n\t\t } else {\n\t\t\t zincCameraControls.update(0);\n\t\t }\n }\n //process markers visibility and size\n if (this.displayMarkers && (playAnimation === false)) {\n if (options.markerDepths.length > 0) {\n let min = Math.min(...options.markerDepths);\n let max = Math.max(...options.markerDepths);\n\t\t\t for (let i = 0; i < zincObjects.length; i++) {\n\t\t\t\t zincObjects[i].processMarkerVisual(min, max, options);\n }\n }\n }\n }\n\n /**\n * Return the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\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 duration = durationIn;\n for (let i = 0; i < zincObjects.length; i++) {\n zincObjects[i].setDuration(duration);\n }\n zincCameraControls.setPathDuration(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 for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n return true;\n }\n }\n return false;\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 for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n scene.remove(zincObject.morph);\n zincObjects.splice(i, 1);\n zincObject.dispose();\n return;\n }\n }\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.getPickableThreeJSObjects = () => {\n let returnedObjects = [];\n for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].morph && (zincObjects[i].morph.visible === true)) {\n if (this.displayMarkers) {\n let marker = zincObjects[i].marker;\n if (marker && marker.isEnabled()) {\n returnedObjects.push(marker.morph);\n }\n } else {\n returnedObjects.push(zincObjects[i].morph);\n }\n }\n }\n return returnedObjects;\n }\n\n /**\n * Get the Normalised coordinates on minimap if mouse event is\n * inside the minimap \n */\n this.getNormalisedMinimapCoordinates = (renderer, event) => {\n if (this.displayMinimap) {\n const target = new THREE.Vector2();\n renderer.getSize(target);\n let offsetY = target.y - event.clientY;\n if (((scissor.x + this.minimapScissor.width) > event.clientX) &&\n (event.clientX > scissor.x) && \n ((scissor.y + this.minimapScissor.height) > offsetY) &&\n (offsetY > scissor.y)) {\n let x = ((event.clientX - scissor.x) /\n this.minimapScissor.width) * 2.0 - 1.0;\n let y = ((offsetY - scissor.y) /\n this.minimapScissor.height) * 2.0 - 1.0;\n return {\"x\": x, \"y\": y};\n }\n }\n return undefined;\n }\n\n /**\n * Get the coordinates difference of the current viewing\n * point and projected coordinates.\n */\n this.getMinimapDiffFromNormalised = (x, y) => {\n if (minimap)\n return minimap.getDiffFromNormalised(x, y);\n return undefined;\n }\n\n /**\n * Remove all objects that are created with ZincJS APIs and it will free the memory allocated.\n * This does not remove obejcts that are added using the addObject APIs.\n */\n this.clearAll = () => {\n for (let i = zincObjects.length - 1; i >= 0; i--) {\n scene.remove(zincObjects[i].morph);\n zincObjects[i].dispose();\n }\n zincObjects = [];\n sceneLoader.toBeDwonloaded = 0;\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","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\nconst JSONLoader = require('./loader').JSONLoader;\nconst STLLoader = require('./STLLoader').STLLoader;\nconst OBJLoader = require('./OBJLoader').OBJLoader;\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\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n let totalSize = 0;\n let totalLoaded = 0;\n let unknownFound = false;\n\n for (const key in this.progressMap) {\n const progress = this.progressMap[key];\n\n totalSize += progress[1];\n totalLoaded += progress[0];\n\n if (progress[1] == 0)\n unknownFound = true;\n }\n if (unknownFound) {\n totalSize = 0;\n }\n return [ totalSize, totalLoaded, errorDownload ];\n }\n\n //Stores the current progress of downloads\n this.onProgress = id => {\n return xhr => {\n this.progressMap[id] = [ xhr.loaded, xhr.total ];\n };\n }\n\n this.onError = xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n };\n\n /**\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 if (scene.loadView(viewData)) {\n viewLoaded = true;\n }\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n --this.toBeDownloaded;\n }\n }\n requestURL = resolveURL(url);\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n/**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n const number = urls.length;\n this.toBeDownloaded += number;\n for (let i = 0; i < number; i++) {\n const filename = urls[i];\n const loader = new JSONLoader();\n let colour = require('./zinc').defaultMaterialColor;\n let opacity = require('./zinc').defaultOpacity;\n if (colours != undefined && colours[i] != undefined)\n colour = colours[i] ? true : false;\n if (opacities != undefined && opacities[i] != undefined)\n opacity = opacities[i];\n let localTimeEnabled = 0;\n if (timeEnabled != undefined && timeEnabled[i] != undefined)\n localTimeEnabled = timeEnabled[i] ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined && morphColour[i] != undefined)\n localMorphColour = morphColour[i] ? true : false;\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(filename), meshloader(colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n finishCallback), this.onProgress(i), this.onError);\n }\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (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(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 = (localTimeEnabled, localMorphColour, groupName, anatomicalId, 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 scene.addZincObject(newLines);\n newLines.setDuration(scene.getDuration());\n }\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newLines);\n };\n } \n\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (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\t if (timeEnabled != undefined)\n\t\t localTimeEnabled = timeEnabled ? true : false;\n\t let localMorphColour = 0;\n\t if (morphColour != undefined)\n\t\t localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n if (isInline) {\n var object = loader.parse( url );\n (linesloader(localTimeEnabled, localMorphColour, groupName, anatomicalId, \n finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, linesloader(localTimeEnabled, localMorphColour, groupName, \n anatomicalId, finishCallback), this.onProgress(i), this.onError);\n }\n }\n\n const loadGlyphset = (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 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 scene.addZincObject(newGlyphset);\n };\n\n //Load a glyphset into this scene.\n const onLoadGlyphsetReady = (xmlhttp, glyphurl, groupName, finishCallback, options) => {\n return () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const glyphsetData = JSON.parse(xmlhttp.responseText);\n loadGlyphset(glyphsetData, glyphurl, groupName, finishCallback, options);\n }\n };\n };\n\n //Internal loader for a regular zinc geometry.\n const pointsetloader = (localTimeEnabled, localMorphColour, groupName, anatomicalId, finishCallback) => {\n return (geometry, materials) => {\n const newPointset = new (require('./primitives/pointset').Pointset)();\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 5, sizeAttenuation: false });\n if (materials && materials[0]) {\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.color = materials[0].color;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n if (newPointset) {\n newPointset.createMesh(geometry, material, options);\n newPointset.setName(groupName);\n newPointset.anatomicalId = anatomicalId;\n scene.addZincObject(newPointset);\n newPointset.setDuration(scene.getDuration());\n }\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 = (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(colour, opacity, false,\n false, groupName, 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 = (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(colour, opacity, false,\n false, groupName, undefined, finishCallback));\n }\n\n //Loader for the OBJ format, \n const objloader = (\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 scene.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 = (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 if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n if (fileFormat !== undefined) {\n if (fileFormat == \"STL\") {\n loader = new STLLoader();\n } else if (fileFormat == \"OBJ\") {\n loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, objloader(colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback), this.onProgress(i), this.onError);\n return;\n }\n }\n if (isInline) {\n var object = loader.parse( url );\n\t\t\t(meshloader(colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, meshloader(colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback), this.onProgress(i), this.onError);\n }\n };\n\n //Object to keep track of number of items downloaded and when all items are downloaded\n //allCompletedCallback is called\n const metaFinishCallback = function (numberOfDownloaded, finishCallback, allCompletedCallback) {\n let downloadedItem = 0;\n return zincGeometry => {\n downloadedItem = downloadedItem + 1;\n if (zincGeometry && (finishCallback != undefined) && (typeof finishCallback == 'function')) {\n finishCallback(zincGeometry);\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 = (url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n if (isInline) {\n var object = loader.parse( url );\n (pointsetloader(localTimeEnabled, localMorphColour, groupName,\n anatomicalId, finishCallback))(object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, pointsetloader(localTimeEnabled, localMorphColour,\n groupName, anatomicalId, finishCallback),\n this.onProgress(i), this.onError);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (metaurl, glyphurl, groupName, finishCallback, options) => {\n let isInline = (options && options.isInline) ? options.isInline : false;\n if (isInline) {\n loadGlyphset(metaurl, glyphurl, groupName, finishCallback, options);\n } else {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = onLoadGlyphsetReady(xmlhttp, glyphurl,\n groupName, finishCallback, options);\n xmlhttp.open(\"GET\", resolveURL(metaurl), true);\n xmlhttp.send();\n }\n }\n\n //Internal loader for a regular zinc geometry.\n const meshloader = (\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n anatomicalId,\n finishCallback\n ) => {\n return (geometry, materials) => {\n let material = undefined;\n if (materials && materials[0]) {\n material = materials[0];\n }\n const zincGeometry = scene.addZincGeometry(geometry, colour, opacity, \n localTimeEnabled, localMorphColour, undefined, material, groupName);\n zincGeometry.anatomicalId = anatomicalId;\n --this.toBeDownloaded;\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 = (referenceURL, item, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = (new URL(item.URL, referenceURL)).href;\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n let options = {\n isInline: isInline,\n fileFormat: item.FileFormat,\n anatomicalId: item.AnatomicalId,\n };\n switch (item.Type) {\n case \"Surfaces\":\n loadSurfaceURL(newURL, item.MorphVertices, item.MorphColours, item.GroupName, finishCallback, options);\n break;\n case \"Glyph\":\n let newGeometryURL = undefined;\n if (!isInline) {\n newGeometryURL = item.GlyphGeometriesURL;\n newGeometryURL = (new URL(item.GlyphGeometriesURL, referenceURL)).href;\n } else {\n newGeometryURL = item.Inline.GlyphGeometriesURL;\n }\n if (item.DisplayLabels) {\n options.displayLabels = true;\n }\n this.loadGlyphsetURL(newURL, newGeometryURL, item.GroupName, finishCallback, options);\n break;\n case \"Points\":\n this.loadPointsetURL(newURL, item.MorphVertices, item.MorphColours, item.GroupName, finishCallback, options);\n break;\n case \"Lines\":\n this.loadLinesURL(newURL, item.MorphVertices, item.MorphColours, item.GroupName, finishCallback, options);\n break;\n default:\n break;\n }\n }\n };\n\n //Function to read the view item first\n const readViewAndSettingsItem = (referenceURL, item, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = (new URL(item.URL, referenceURL)).href;\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n switch (item.Type) {\n case \"View\":\n if (isInline) {\n if (scene.loadView(newURL)) {\n viewLoaded = true;\n }\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n else\n this.loadViewURL(newURL, finishCallback);\n break;\n case \"Settings\":\n this.loadSettings(item);\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n break;\n default:\n break;\n }\n }\n };\n\n /**\n * Load 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 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 let numberOfObjects = metadata.length;\n // view file does not receive callback\n var callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n // Prioritise the view file and settings before loading anything else\n for (var i = 0; i < metadata.length; i++)\n readViewAndSettingsItem(referenceURL, metadata[i], callback);\n for (var i = 0; i < metadata.length; i++)\n readPrimitivesItem(referenceURL, metadata[i], callback);\n }\n }\n\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n}\n","var THREE = require('three');\n\n/**\n * @author aleeper / http://adamleeper.com/\n * @author mrdoob / http://mrdoob.com/\n * @author gero3 / https://github.com/gero3\n * @author Mugen87 / https://github.com/Mugen87\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 * var loader = new THREE.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: THREE.VertexColors });\n * } else { .... }\n * var mesh = new THREE.Mesh( geometry, material );\n */\n\n\nfunction STLLoader( manager ) {\n\n this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\n\n};\n\nSTLLoader.prototype = {\n\n constructor: STLLoader,\n\n load: function ( url, onLoad, onProgress, onError ) {\n\n var scope = this;\n\n var loader = new THREE.FileLoader( scope.manager );\n loader.setResponseType( 'arraybuffer' );\n loader.load( url, function ( text ) {\n\n try {\n\n onLoad( scope.parse( text ) );\n\n } catch ( exception ) {\n\n if ( onError ) {\n\n onError( exception );\n\n }\n\n }\n\n }, onProgress, onError );\n\n },\n\n parse: function ( data ) {\n\n function isBinary( data ) {\n\n var expect, face_size, n_faces, reader;\n reader = new DataView( data );\n face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n n_faces = reader.getUint32( 80, true );\n expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n if ( expect === reader.byteLength ) {\n\n return true;\n\n }\n\n // An ASCII STL data must begin with 'solid ' as the first six bytes.\n // However, ASCII STLs lacking the SPACE after the 'd' are known to be\n // plentiful. So, check the first 5 bytes for 'solid'.\n\n // US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n var solid = [ 115, 111, 108, 105, 100 ];\n\n for ( var i = 0; i < 5; i ++ ) {\n\n // If solid[ i ] does not match the i-th byte, then it is not an\n // ASCII STL; hence, it is binary and return true.\n\n if ( solid[ i ] != reader.getUint8( i, false ) ) return true;\n\n }\n\n // First 5 bytes read \"solid\"; declare it to be an ASCII STL\n\n return false;\n\n }\n\n function parseBinary( data ) {\n\n var reader = new DataView( data );\n var faces = reader.getUint32( 80, true );\n\n var r, g, b, hasColors = false, colors;\n var defaultR, defaultG, defaultB, alpha;\n\n // process STL header\n // check for default color in header (\"COLOR=rgba\" sequence).\n\n for ( var index = 0; index < 80 - 10; index ++ ) {\n\n if ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n ( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n ( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n hasColors = true;\n colors = [];\n\n defaultR = reader.getUint8( index + 6 ) / 255;\n defaultG = reader.getUint8( index + 7 ) / 255;\n defaultB = reader.getUint8( index + 8 ) / 255;\n alpha = reader.getUint8( index + 9 ) / 255;\n\n }\n\n }\n\n var dataOffset = 84;\n var faceLength = 12 * 4 + 2;\n\n var geometry = new THREE.BufferGeometry();\n\n var vertices = [];\n var normals = [];\n\n for ( var face = 0; face < faces; face ++ ) {\n\n var start = dataOffset + face * faceLength;\n var normalX = reader.getFloat32( start, true );\n var normalY = reader.getFloat32( start + 4, true );\n var normalZ = reader.getFloat32( start + 8, true );\n\n if ( hasColors ) {\n\n var packedColor = reader.getUint16( start + 48, true );\n\n if ( ( packedColor & 0x8000 ) === 0 ) {\n\n // facet has its own unique color\n\n r = ( packedColor & 0x1F ) / 31;\n g = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n b = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n } else {\n\n r = defaultR;\n g = defaultG;\n b = defaultB;\n\n }\n\n }\n\n for ( var i = 1; i <= 3; i ++ ) {\n\n var vertexstart = start + i * 12;\n\n vertices.push( reader.getFloat32( vertexstart, true ) );\n vertices.push( reader.getFloat32( vertexstart + 4, true ) );\n vertices.push( reader.getFloat32( vertexstart + 8, true ) );\n\n normals.push( normalX, normalY, normalZ );\n\n if ( hasColors ) {\n\n colors.push( r, g, b );\n\n }\n\n }\n\n }\n\n geometry.setAttribute( 'position', new THREE.BufferAttribute( new Float32Array( vertices ), 3 ) );\n geometry.setAttribute( 'normal', new THREE.BufferAttribute( new Float32Array( normals ), 3 ) );\n\n if ( hasColors ) {\n\n geometry.setAttribute( 'color', new THREE.BufferAttribute( new Float32Array( colors ), 3 ) );\n geometry.hasColors = true;\n geometry.alpha = alpha;\n\n }\n\n return geometry;\n\n }\n\n function parseASCII( data ) {\n\n var geometry = new THREE.BufferGeometry();\n var patternFace = /facet([\\s\\S]*?)endfacet/g;\n var faceCounter = 0;\n\n var patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n var patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n var patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n var vertices = [];\n var normals = [];\n\n var normal = new THREE.Vector3();\n\n var result;\n\n while ( ( result = patternFace.exec( data ) ) !== null ) {\n\n var vertexCountPerFace = 0;\n var normalCountPerFace = 0;\n\n var text = result[ 0 ];\n\n while ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n normal.x = parseFloat( result[ 1 ] );\n normal.y = parseFloat( result[ 2 ] );\n normal.z = parseFloat( result[ 3 ] );\n normalCountPerFace ++;\n\n }\n\n while ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n vertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n normals.push( normal.x, normal.y, normal.z );\n vertexCountPerFace ++;\n\n }\n\n // every face have to own ONE valid normal\n\n if ( normalCountPerFace !== 1 ) {\n\n console.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n }\n\n // each face have to own THREE valid vertices\n\n if ( vertexCountPerFace !== 3 ) {\n\n console.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n }\n\n faceCounter ++;\n\n }\n\n geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );\n geometry.setAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) );\n\n return geometry;\n\n }\n\n function ensureString( buffer ) {\n\n if ( typeof buffer !== 'string' ) {\n\n return THREE.LoaderUtils.decodeText( new Uint8Array( buffer ) );\n\n }\n\n return buffer;\n\n }\n\n function ensureBinary( buffer ) {\n\n if ( typeof buffer === 'string' ) {\n\n var array_buffer = new Uint8Array( buffer.length );\n for ( var i = 0; i < buffer.length; i ++ ) {\n\n array_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n }\n return array_buffer.buffer || array_buffer;\n\n } else {\n\n return buffer;\n\n }\n\n }\n\n // start\n\n var binData = ensureBinary( data );\n\n return isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n }\n\n};\n\nexport { STLLoader };\n","var THREE = require('three');\n\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar OBJLoader = ( function () {\n\n // o object_name | g group_name\n var object_pattern = /^[og]\\s*(.+)?/;\n // mtllib file_reference\n var material_library_pattern = /^mtllib /;\n // usemtl material_name\n var material_use_pattern = /^usemtl /;\n\n function ParserState() {\n\n var state = {\n objects: [],\n object: {},\n\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n\n materialLibraries: [],\n\n startObject: function ( name, fromDeclaration ) {\n\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if ( this.object && this.object.fromDeclaration === false ) {\n\n this.object.name = name;\n this.object.fromDeclaration = ( fromDeclaration !== false );\n return;\n\n }\n\n var previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n if ( this.object && typeof this.object._finalize === 'function' ) {\n\n this.object._finalize( true );\n\n }\n\n this.object = {\n name: name || '',\n fromDeclaration: ( fromDeclaration !== false ),\n\n geometry: {\n vertices: [],\n normals: [],\n colors: [],\n uvs: []\n },\n materials: [],\n smooth: true,\n\n startMaterial: function ( name, libraries ) {\n\n var previous = this._finalize( false );\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n this.materials.splice( previous.index, 1 );\n\n }\n\n var material = {\n index: this.materials.length,\n name: name || '',\n mtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n smooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n groupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n groupEnd: - 1,\n groupCount: - 1,\n inherited: false,\n\n clone: function ( index ) {\n\n var cloned = {\n index: ( typeof index === 'number' ? index : this.index ),\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0,\n groupEnd: - 1,\n groupCount: - 1,\n inherited: false\n };\n cloned.clone = this.clone.bind( cloned );\n return cloned;\n\n }\n };\n\n this.materials.push( material );\n\n return material;\n\n },\n\n currentMaterial: function () {\n\n if ( this.materials.length > 0 ) {\n\n return this.materials[ this.materials.length - 1 ];\n\n }\n\n return undefined;\n\n },\n\n _finalize: function ( end ) {\n\n var lastMultiMaterial = this.currentMaterial();\n if ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n\n }\n\n // Ignore objects tail materials if no face declarations followed them before a new o/g started.\n if ( end && this.materials.length > 1 ) {\n\n for ( var mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n if ( this.materials[ mi ].groupCount <= 0 ) {\n\n this.materials.splice( mi, 1 );\n\n }\n\n }\n\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if ( end && this.materials.length === 0 ) {\n\n this.materials.push( {\n name: '',\n smooth: this.smooth\n } );\n\n }\n\n return lastMultiMaterial;\n\n }\n };\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n if ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n var declared = previousMaterial.clone( 0 );\n declared.inherited = true;\n this.object.materials.push( declared );\n\n }\n\n this.objects.push( this.object );\n\n },\n\n finalize: function () {\n\n if ( this.object && typeof this.object._finalize === 'function' ) {\n\n this.object._finalize( true );\n\n }\n\n },\n\n parseVertexIndex: function ( value, len ) {\n\n var index = parseInt( value, 10 );\n return ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n },\n\n parseNormalIndex: function ( value, len ) {\n\n var index = parseInt( value, 10 );\n return ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n },\n\n parseUVIndex: function ( value, len ) {\n\n var index = parseInt( value, 10 );\n return ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n },\n\n addVertex: function ( a, b, c ) {\n\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n\n dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n },\n\n addVertexPoint: function ( a ) {\n\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n\n dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n },\n\n addVertexLine: function ( a ) {\n\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n\n dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n },\n\n addNormal: function ( a, b, c ) {\n\n var src = this.normals;\n var dst = this.object.geometry.normals;\n\n dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n },\n\n addColor: function ( a, b, c ) {\n\n var src = this.colors;\n var dst = this.object.geometry.colors;\n\n dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n },\n\n addUV: function ( a, b, c ) {\n\n var src = this.uvs;\n var dst = this.object.geometry.uvs;\n\n dst.push( src[ a + 0 ], src[ a + 1 ] );\n dst.push( src[ b + 0 ], src[ b + 1 ] );\n dst.push( src[ c + 0 ], src[ c + 1 ] );\n\n },\n\n addUVLine: function ( a ) {\n\n var src = this.uvs;\n var dst = this.object.geometry.uvs;\n\n dst.push( src[ a + 0 ], src[ a + 1 ] );\n\n },\n\n addFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n var vLen = this.vertices.length;\n\n var ia = this.parseVertexIndex( a, vLen );\n var ib = this.parseVertexIndex( b, vLen );\n var ic = this.parseVertexIndex( c, vLen );\n\n this.addVertex( ia, ib, ic );\n\n if ( ua !== undefined && ua !== '' ) {\n\n var uvLen = this.uvs.length;\n ia = this.parseUVIndex( ua, uvLen );\n ib = this.parseUVIndex( ub, uvLen );\n ic = this.parseUVIndex( uc, uvLen );\n this.addUV( ia, ib, ic );\n\n }\n\n if ( na !== undefined && na !== '' ) {\n\n // Normals are many times the same. If so, skip function call and parseInt.\n var nLen = this.normals.length;\n ia = this.parseNormalIndex( na, nLen );\n\n ib = na === nb ? ia : this.parseNormalIndex( nb, nLen );\n ic = na === nc ? ia : this.parseNormalIndex( nc, nLen );\n\n this.addNormal( ia, ib, ic );\n\n }\n\n if ( this.colors.length > 0 ) {\n\n this.addColor( ia, ib, ic );\n\n }\n\n },\n\n addPointGeometry: function ( vertices ) {\n\n this.object.geometry.type = 'Points';\n\n var vLen = this.vertices.length;\n\n for ( var vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n this.addVertexPoint( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n }\n\n },\n\n addLineGeometry: function ( vertices, uvs ) {\n\n this.object.geometry.type = 'Line';\n\n var vLen = this.vertices.length;\n var uvLen = this.uvs.length;\n\n for ( var vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n this.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n }\n\n for ( var uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n this.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n }\n\n }\n\n };\n\n state.startObject( '', false );\n\n return state;\n\n }\n\n //\n\n function OBJLoader( manager ) {\n\n this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;\n\n this.materials = null;\n\n }\n\n OBJLoader.prototype = {\n\n constructor: OBJLoader,\n\n load: function ( url, onLoad, onProgress, onError ) {\n\n var scope = this;\n\n var loader = new THREE.FileLoader( scope.manager );\n loader.setPath( this.path );\n loader.load( url, function ( text ) {\n\n onLoad( scope.parse( text ) );\n\n }, onProgress, onError );\n\n },\n\n setPath: function ( value ) {\n\n this.path = value;\n\n return this;\n\n },\n\n setMaterials: function ( materials ) {\n\n this.materials = materials;\n\n return this;\n\n },\n\n parse: function ( text ) {\n\n console.time( 'OBJLoader' );\n\n var state = new ParserState();\n\n if ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n // This is faster than String.split with regex that splits on both\n text = text.replace( /\\r\\n/g, '\\n' );\n\n }\n\n if ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n // join lines separated by a line continuation character (\\)\n text = text.replace( /\\\\\\n/g, '' );\n\n }\n\n var lines = text.split( '\\n' );\n var line = '', lineFirstChar = '';\n var lineLength = 0;\n var result = [];\n\n // Faster to just trim left side of the line. Use if available.\n var trimLeft = ( typeof ''.trimLeft === 'function' );\n\n for ( var i = 0, l = lines.length; i < l; i ++ ) {\n\n line = lines[ i ];\n\n line = trimLeft ? line.trimLeft() : line.trim();\n\n lineLength = line.length;\n\n if ( lineLength === 0 ) continue;\n\n lineFirstChar = line.charAt( 0 );\n\n // @todo invoke passed in handler if any\n if ( lineFirstChar === '#' ) continue;\n\n if ( lineFirstChar === 'v' ) {\n\n var data = line.split( /\\s+/ );\n\n switch ( data[ 0 ] ) {\n\n case 'v':\n state.vertices.push(\n parseFloat( data[ 1 ] ),\n parseFloat( data[ 2 ] ),\n parseFloat( data[ 3 ] )\n );\n if ( data.length === 8 ) {\n\n state.colors.push(\n parseFloat( data[ 4 ] ),\n parseFloat( data[ 5 ] ),\n parseFloat( data[ 6 ] )\n\n );\n\n }\n break;\n case 'vn':\n state.normals.push(\n parseFloat( data[ 1 ] ),\n parseFloat( data[ 2 ] ),\n parseFloat( data[ 3 ] )\n );\n break;\n case 'vt':\n state.uvs.push(\n parseFloat( data[ 1 ] ),\n parseFloat( data[ 2 ] )\n );\n break;\n\n }\n\n } else if ( lineFirstChar === 'f' ) {\n\n var lineData = line.substr( 1 ).trim();\n var vertexData = lineData.split( /\\s+/ );\n var faceVertices = [];\n\n // Parse the face vertex data into an easy to work with format\n\n for ( var j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n var vertex = vertexData[ j ];\n\n if ( vertex.length > 0 ) {\n\n var vertexParts = vertex.split( '/' );\n faceVertices.push( vertexParts );\n\n }\n\n }\n\n // Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n var v1 = faceVertices[ 0 ];\n\n for ( var j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n var v2 = faceVertices[ j ];\n var v3 = faceVertices[ j + 1 ];\n\n state.addFace(\n v1[ 0 ], v2[ 0 ], v3[ 0 ],\n v1[ 1 ], v2[ 1 ], v3[ 1 ],\n v1[ 2 ], v2[ 2 ], v3[ 2 ]\n );\n\n }\n\n } else if ( lineFirstChar === 'l' ) {\n\n var lineParts = line.substring( 1 ).trim().split( \" \" );\n var lineVertices = [], lineUVs = [];\n\n if ( line.indexOf( \"/\" ) === - 1 ) {\n\n lineVertices = lineParts;\n\n } else {\n\n for ( var li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n var parts = lineParts[ li ].split( \"/\" );\n\n if ( parts[ 0 ] !== \"\" ) lineVertices.push( parts[ 0 ] );\n if ( parts[ 1 ] !== \"\" ) lineUVs.push( parts[ 1 ] );\n\n }\n\n }\n state.addLineGeometry( lineVertices, lineUVs );\n\n } else if ( lineFirstChar === 'p' ) {\n\n var lineData = line.substr( 1 ).trim();\n var pointData = lineData.split( \" \" );\n\n state.addPointGeometry( pointData );\n\n } else if ( ( result = object_pattern.exec( line ) ) !== null ) {\n\n // o object_name\n // or\n // g group_name\n\n // WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n // var name = result[ 0 ].substr( 1 ).trim();\n var name = ( \" \" + result[ 0 ].substr( 1 ).trim() ).substr( 1 );\n\n state.startObject( name );\n\n } else if ( material_use_pattern.test( line ) ) {\n\n // material\n\n state.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n } else if ( material_library_pattern.test( line ) ) {\n\n // mtl file\n\n state.materialLibraries.push( line.substring( 7 ).trim() );\n\n } else if ( lineFirstChar === 's' ) {\n\n result = line.split( ' ' );\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n /*\n * http://paulbourke.net/dataformats/obj/\n * or\n * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n *\n * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n * than 0.\"\n */\n if ( result.length > 1 ) {\n\n var value = result[ 1 ].trim().toLowerCase();\n state.object.smooth = ( value !== '0' && value !== 'off' );\n\n } else {\n\n // ZBrush can produce \"s\" lines #11707\n state.object.smooth = true;\n\n }\n var material = state.object.currentMaterial();\n if ( material ) material.smooth = state.object.smooth;\n\n } else {\n\n // Handle null terminated files without exception\n if ( line === '\\0' ) continue;\n\n throw new Error( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n }\n\n }\n\n state.finalize();\n\n var container = new THREE.Group();\n container.materialLibraries = [].concat( state.materialLibraries );\n\n for ( var i = 0, l = state.objects.length; i < l; i ++ ) {\n\n var object = state.objects[ i ];\n var geometry = object.geometry;\n var materials = object.materials;\n var isLine = ( geometry.type === 'Line' );\n var isPoints = ( geometry.type === 'Points' );\n var hasVertexColors = false;\n\n // Skip o/g line declarations that did not follow with any faces\n if ( geometry.vertices.length === 0 ) continue;\n\n var buffergeometry = new THREE.BufferGeometry();\n\n buffergeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( geometry.vertices, 3 ) );\n\n if ( geometry.normals.length > 0 ) {\n\n buffergeometry.setAttribute( 'normal', new THREE.Float32BufferAttribute( geometry.normals, 3 ) );\n\n } else {\n\n buffergeometry.computeVertexNormals();\n\n }\n\n if ( geometry.colors.length > 0 ) {\n\n hasVertexColors = true;\n buffergeometry.setAttribute( 'color', new THREE.Float32BufferAttribute( geometry.colors, 3 ) );\n\n }\n\n if ( geometry.uvs.length > 0 ) {\n\n buffergeometry.setAttribute( 'uv', new THREE.Float32BufferAttribute( geometry.uvs, 2 ) );\n\n }\n\n // Create materials\n\n var createdMaterials = [];\n\n for ( var mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n var sourceMaterial = materials[ mi ];\n var material = undefined;\n\n if ( this.materials !== null ) {\n\n material = this.materials.create( sourceMaterial.name );\n\n // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n if ( isLine && material && ! ( material instanceof THREE.LineBasicMaterial ) ) {\n\n var materialLine = new THREE.LineBasicMaterial();\n materialLine.copy( material );\n materialLine.lights = false; // TOFIX\n material = materialLine;\n\n } else if ( isPoints && material && ! ( material instanceof THREE.PointsMaterial ) ) {\n\n var materialPoints = new THREE.PointsMaterial( { size: 10, sizeAttenuation: false } );\n materialLine.copy( material );\n material = materialPoints;\n\n }\n\n }\n\n if ( ! material ) {\n\n if ( isLine ) {\n\n material = new THREE.LineBasicMaterial();\n\n } else if ( isPoints ) {\n\n material = new THREE.PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n } else {\n\n material = new THREE.MeshPhongMaterial();\n\n }\n\n material.name = sourceMaterial.name;\n\n }\n\n material.flatShading = sourceMaterial.smooth ? false : true;\n material.vertexColors = hasVertexColors ? THREE.VertexColors : THREE.NoColors;\n\n createdMaterials.push( material );\n\n }\n\n // Create mesh\n\n var mesh;\n\n if ( createdMaterials.length > 1 ) {\n\n for ( var mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n var sourceMaterial = materials[ mi ];\n buffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n }\n\n if ( isLine ) {\n\n mesh = new THREE.LineSegments( buffergeometry, createdMaterials );\n\n } else if ( isPoints ) {\n\n mesh = new THREE.Points( buffergeometry, createdMaterials );\n\n } else {\n\n mesh = new THREE.Mesh( buffergeometry, createdMaterials );\n\n }\n\n } else {\n\n if ( isLine ) {\n\n mesh = new THREE.LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n } else if ( isPoints ) {\n\n mesh = new THREE.Points( buffergeometry, createdMaterials[ 0 ] );\n\n } else {\n\n mesh = new THREE.Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n }\n\n }\n\n mesh.name = object.name;\n\n container.add( mesh );\n\n }\n\n console.timeEnd( 'OBJLoader' );\n\n return container;\n\n }\n\n };\n\n return OBJLoader;\n\n} )();\n\nexport { OBJLoader };","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\n\nconst Viewport = function () {\n\tthis.nearPlane = 0.1;\n\tthis.farPlane = 2000.0;\n\tthis.eyePosition = [0.0, 0.0, 0.0];\n\tthis.targetPosition = [0.0, 0.0, 0.0];\n\tthis.upVector = [ 0.0, 1.0, 0.0];\n\tconst _this = this;\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 };\n\tconst STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM: 4, TOUCH_PAN: 5, SCROLL: 6 };\n\tconst CLICK_ACTION = {};\n\tCLICK_ACTION.MAIN = STATE.ROTATE;\n\tCLICK_ACTION.AUXILIARY = STATE.ZOOM;\n\tCLICK_ACTION.SECONDARY = STATE.PAN;\n\tthis.cameraObject = object;\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\tthis.renderer = renderer;\n\tthis.scene = scene ;\n\tthis.tumble_rate = 1.5;\n\tthis.pointer_x = 0;\n\tthis.pointer_y = 0;\n\tthis.pointer_x_start = 0;\n\tthis.pointer_y_start = 0;\n\tthis.previous_pointer_x = 0;\n\tthis.previous_pointer_y = 0;\n\tthis.near_plane_fly_debt = 0.0;\n\tthis.touchZoomDistanceStart = 0;\n\tthis.touchZoomDistanceEnd = 0;\n\tthis.directionalLight = 0;\n\tthis.scrollRate = 50;\n\tlet duration = 6000;\n\tlet inbuildTime = 0;\n\tlet cameraPath = undefined;\n\tlet numberOfCameraPoint = undefined;\n\tlet updateLightWithPathFlag = false;\n\tlet playRate = 500;\n\tlet deviceOrientationControl = undefined;\n\tconst defaultViewport = new Viewport();\n\tlet currentMode = MODE.DEFAULT;\n\tlet smoothCameraTransitionObject = undefined;\n\tlet rotateCameraTransitionObject = undefined;\n\tlet cameraAutoTumbleObject = undefined;\n\tlet mouseScroll = 0;\n\tthis._state = STATE.NONE;\n\tlet zincRayCaster = undefined;\n\tthis.targetTouchId = -1;\n let rect = undefined;\n const _a = new THREE.Vector3();\n const _b = new THREE.Vector3();\n const _c = new THREE.Vector3();\n const _new_b = new THREE.Vector3();\n const _new_c = new THREE.Vector3();\n const _axis = new THREE.Vector3();\n const _v = new THREE.Vector3();\n const _rel_eye = new THREE.Vector3();\n\n\tif (this.cameraObject.target === undefined)\n\t\tthis.cameraObject.target = new THREE.Vector3( 0, 0, 0 );\n\t\n\tthis.onResize = () => {\n\t\tif (rect)\n\t\t\trect = undefined;\n\t}\n\t\n\tthis.setMouseButtonAction = (buttonName, actionName) => {\n\t\tCLICK_ACTION[buttonName] = STATE[actionName];\n }\n \n const translateViewport = translation => {\n this.cameraObject.target.add(translation);\n this.cameraObject.position.add(translation);\n this.updateDirectionalLight();\n }\n\t\n\tconst onDocumentMouseDown = event => {\n\t\tif (rect === undefined)\n rect = this.domElement.getBoundingClientRect();\n // Check if mouse event hapens inside the minimap\n let minimapCoordinates = undefined;\n if (currentMode === MODE.DEFAULT)\n minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(\n this.renderer, event);\n if (!minimapCoordinates) {\n if (event.button == 0) {\n if (event.ctrlKey)\n this._state = CLICK_ACTION.AUXILIARY;\n else if (event.shiftKey)\n this._state = CLICK_ACTION.SECONDARY;\n else\n this._state = CLICK_ACTION.MAIN;\n } else if (event.button == 1) {\n event.preventDefault();\n this._state = CLICK_ACTION.AUXILIARY;\n } \n else if (event.button == 2) {\n this._state = CLICK_ACTION.SECONDARY;\n }\n this.pointer_x = event.clientX - rect.left;\n this.pointer_y = event.clientY - rect.top;\n this.pointer_x_start = this.pointer_x;\n this.pointer_y_start = this.pointer_y;\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y= this.pointer_y;\n } else {\n currentMode = MODE.MINIMAP;\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n }\n\n\tconst onDocumentMouseMove = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tthis.pointer_x = event.clientX - rect.left;\n\t\tthis.pointer_y = event.clientY - rect.top;\n if (currentMode === MODE.MINIMAP) {\n let minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(this.renderer, event);\n if (minimapCoordinates) {\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n } else {\n if ((this._state === STATE.NONE) && (zincRayCaster !== undefined)) {\n zincRayCaster.move(this, event.clientX, event.clientY, this.renderer);\n }\n }\n\t}\n\t\n\tconst onDocumentMouseUp = event => {\n this._state = STATE.NONE;\n if (currentMode == MODE.MINIMAP)\n currentMode = MODE.DEFAULT;\n\t\tif (zincRayCaster !== undefined) {\n\t\t\tif (this.pointer_x_start==(event.clientX - rect.left) && this.pointer_y_start==(event.clientY- rect.top)) {\n\t\t\t\tzincRayCaster.pick(this, event.clientX, event.clientY, this.renderer);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentMouseLeave = event => {\n\t\tthis._state = STATE.NONE;\n\t}\n\t\n\tconst onDocumentTouchStart = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis._state = STATE.TOUCH_ROTATE;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.pointer_x_start = this.pointer_x;\n\t\t\tthis.pointer_y_start = this.pointer_y;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\n\t\t} else if (len == 2) {\n\t\t\tthis._state = STATE.TOUCH_ZOOM;\n\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\tthis.touchZoomDistanceEnd = this.touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\t\t} else if (len == 3) {\n\t\t\tthis._state = STATE.TOUCH_PAN;\n\t\t\tthis.targetTouchId = event.touches[0].identifier;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchMove = event => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t} else if (len == 2) {\n\t\t\tif (this._state === STATE.TOUCH_ZOOM) {\n\t\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\t\tthis.touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\t\t\t}\n\t\t} else if (len == 3) {\n\t\t\tif (this._state === STATE.TOUCH_PAN) {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tif (event.touches[i].identifier == this.targetTouchId) {\n\t\t\t\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\t\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchEnd = event => {\n\t\tconst len = event.touches.length;\n\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd = 0;\n\t\tthis.targetTouchId = -1;\n\t\tthis._state = STATE.NONE;\n\t\tif (len == 1) {\n\t\t\tif (zincRayCaster !== undefined) {\n\t\t\t\tif (this.pointer_x_start==(event.touches[0].clientX- rect.left) && this.pointer_y_start==(event.touches[0].clientY- rect.top)) {\n\t\t\t\t\tzincRayCaster.pick(this.cameraObject, event.touches[0].clientX, event.touches[0].clientY, this.renderer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentWheelEvent = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tthis._state = STATE.SCROLL;\n\t\tlet changes = 0;\n\t\tif (event.deltaY > 0)\n\t\t\tchanges = this.scrollRate;\n\t\telse if (event.deltaY < 0)\n\t\t\tchanges = this.scrollRate * -1;\n\t\tmouseScroll = mouseScroll + changes;\n\t\tevent.preventDefault(); \n\t\tevent.stopImmediatePropagation(); \n\t}\t\n\n\n\tconst translate = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst height = rect.height;\n\t\t\tconst distance = this.cameraObject.position.distanceTo(this.cameraObject.target);\n\t\t\tlet fact = 0.0;\n\t\t\tif ((this.cameraObject.far > this.cameraObject.near) && (distance >= this.cameraObject.near) &&\n\t\t\t\t(distance <= this.cameraObject.far))\n\t\t\t{\n\t\t\t\t fact = (distance-this.cameraObject.near)/(this.cameraObject.far-this.cameraObject.near);\n }\n //_b == old_near, _c = old_far, _new_b = new_near, _new_c = new_far\n\t\t\t_b.set(this.previous_pointer_x,height - this.previous_pointer_y,0.0);\n\t\t\t_c.set(this.previous_pointer_x, height - this.previous_pointer_y,1.0);\n\t\t\t_new_b.set(this.pointer_x,height - this.pointer_y,0.0);\n\t\t\t_new_c.set(this.pointer_x,height - this.pointer_y,1.0);\n\t\t\t_b.unproject(this.cameraObject);\n\t\t\t_c.unproject(this.cameraObject);\n\t\t\t_new_b.unproject(this.cameraObject);\n\t\t\t_new_c.unproject( this.cameraObject);\n const translate_rate = -0.002;\n _new_b.sub(_b).multiplyScalar(1.0-fact);\n _new_c.sub(_c).multiplyScalar(fact);\n _new_b.add(_new_c).multiplyScalar(translate_rate);\n translateViewport(_new_b);\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\n\tthis.getVectorsFromRotateAboutLookAtPoints = (axis, angle) => {\n axis.normalize();\n\t _v.copy(this.cameraObject.position).sub(this.cameraObject.target);\n\t _rel_eye.copy(_v);\n\t _v.normalize()\n\t if (0.8 < Math.abs(_v.dot(axis))) {\n\t _v.copy(this.cameraObject.up);\n }\n _b.crossVectors(axis, _v).normalize();\n _c.crossVectors(axis, _b);\n\t const rel_eyea = axis.dot(_rel_eye);\n\t const rel_eyeb = _b.dot(_rel_eye);\n\t const rel_eyec = _c.dot(_rel_eye);\n\t const upa = axis.dot(this.cameraObject.up); \n\t const upb = _b.dot(this.cameraObject.up);\n\t const upc = _c.dot(this.cameraObject.up);\n\t const cos_angle = Math.cos(angle);\n\t const sin_angle = Math.sin(angle);\n _new_b.set(cos_angle*_b.x+sin_angle*_c.x,\n\t cos_angle*_b.y+sin_angle*_c.y,\n\t cos_angle*_b.z+sin_angle*_c.z);\n\t _new_c.set(cos_angle*_c.x-sin_angle*_b.x,\n\t cos_angle*_c.y-sin_angle*_b.y,\n\t cos_angle*_c.z-sin_angle*_b.z); \n _v.copy(this.cameraObject.target);\n\t _v.x = _v.x + axis.x*rel_eyea + _new_b.x*rel_eyeb+_new_c.x*rel_eyec;\n\t _v.y = _v.y + axis.y*rel_eyea + _new_b.y*rel_eyeb+_new_c.y*rel_eyec;\n\t _v.z = _v.z + axis.z*rel_eyea + _new_b.z*rel_eyeb+_new_c.z*rel_eyec;\n\t _a.set(axis.x*upa+_new_b.x*upb+_new_c.x*upc,\n axis.y*upa+_new_b.y*upb+_new_c.y*upc,\n axis.z*upa+_new_b.z*upb+_new_c.z*upc);\n\t return {position: _v, up: _a};\n\t}\n\t\n\tthis.rotateAboutLookAtpoint = (axis, angle) => {\n\t const returned_values = this.getVectorsFromRotateAboutLookAtPoints(axis, angle);\n\t this.cameraObject.position.copy(returned_values.position);\n\t this.updateDirectionalLight();\n\t this.cameraObject.up.copy(returned_values.up);\n\t}\n\n\tconst tumble = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n\t\t\tconst height = rect.height;\n\t\t\tif ((0<width)&&(0<height))\n\t\t\t{\n\t\t\t\tconst radius=0.25*(width+height);\n\t\t\t\tdelta_x=this.pointer_x-this.previous_pointer_x;\n\t\t\t\tdelta_y=this.previous_pointer_y-this.pointer_y;\n\t\t\t\tconst tangent_dist = Math.sqrt(delta_x*delta_x + delta_y*delta_y);\n\t\t\t\tif (tangent_dist > 0)\n\t\t\t\t{\n\t\t\t\t\tconst dx=-delta_y*1.0/tangent_dist;\n\t\t\t\t\tconst dy=delta_x*1.0/tangent_dist;\n\t\t\t\t\tlet d=dx*(this.pointer_x-0.5*(width-1))+dy*(0.5*(height-1)-this.pointer_y);\n\t\t\t\t\tif (d > radius)\t{\n\t\t\t\t\t\td = radius;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (d < -radius) {\n\t\t\t\t\t\t\td = -radius;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t\t\t\tconst angle=this.tumble_rate*tangent_dist/radius;\n\t\t\t\t\t_a.copy(this.cameraObject.position).sub(this.cameraObject.target).normalize();\n\t\t\t\t\t_b.copy(this.cameraObject.up).normalize();\n _c.copy(_b).cross(_a).normalize().multiplyScalar(dx);\n _b.multiplyScalar(dy);\n _axis.addVectors(_c, _b).multiplyScalar(Math.cos(phi));\n _a.multiplyScalar(Math.sin(phi));\n _axis.add(_a);\n\t\t\t\t\tthis.rotateAboutLookAtpoint(_axis, -angle);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\t\n\tconst calculateZoomDelta = () => {\n\t\tlet delta = 0;\n\t\tif (this._state === STATE.ZOOM)\n\t\t{\n\t\t\tdelta = this.previous_pointer_y-this.pointer_y;\n\t\t} else if (this._state === STATE.SCROLL) {\n\t\t\tdelta = mouseScroll;\n\t\t} else {\n\t\t\tdelta = -1.0 * (this.touchZoomDistanceEnd - this.touchZoomDistanceStart);\n\t\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd;\n\t\t}\n\t\treturn delta;\n }\n\n this.changeZoomByScrollRateUnit = unit => {\n const delta_y = unit * this.scrollRate;\n this.changeZoomByValue(delta_y);\n }\n \n this.changeZoomByValue = delta_y => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n const height = rect.height;\n \n\t\t\tconst a = this.cameraObject.position.clone();\n\t\t\ta.sub(this.cameraObject.target);\n\t\t\tconst dist = a.length();\t\t\t\t\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\t\t\t\tconst eye_position = this.cameraObject.position.clone();\n\t\t\t\teye_position.x = eye_position.x + a.x*dy*dist\n\t\t\t\teye_position.y = eye_position.y + a.y*dy*dist\n\t\t\t\teye_position.z = eye_position.z + a.z*dy*dist\n\t\t\t\tthis.cameraObject.position.set(eye_position.x, eye_position.y, eye_position.z);\n\t\t\t\tthis.updateDirectionalLight();\n\t\t\t\tconst near_far_minimum_ratio = 0.00001;\n\t\t\t\tif ((near_far_minimum_ratio * this.cameraObject.far) <\n\t\t\t\t\t(this.cameraObject.near + dy*dist + this.near_plane_fly_debt)) {\n\t\t\t\t\tif (this.near_plane_fly_debt != 0.0)\t{\n\t\t\t\t\t\tthis.near_plane_fly_debt += dy*dist;\n\t\t\t\t\t\tif (this.near_plane_fly_debt > 0.0) {\n\t\t\t\t\t\t\tthis.cameraObject.near += this.near_plane_fly_debt;\n\t\t\t\t\t\t\tthis.cameraObject.far += this.near_plane_fly_debt;\n\t\t\t\t\t\t\tthis.near_plane_fly_debt = 0.0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.cameraObject.near += dy*dist;\n\t\t\t\t\t\t\tthis.cameraObject.far += dy*dist;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\t\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this.near_plane_fly_debt == 0.0) {\n\t\t\t\t\t\tconst diff = this.cameraObject.near - near_far_minimum_ratio * this.cameraObject.far;\n\t\t\t\t\t\tthis.cameraObject.near = near_far_minimum_ratio * this.cameraObject.far;\n\t\t\t\t\t\tthis.cameraObject.far -= diff;\n\t\t\t\t\t\tthis.near_plane_fly_debt -= near_far_minimum_ratio * this.cameraObject.far;\n\t\t\t\t\t}\n\t\t\t\t\tthis.near_plane_fly_debt += dy*dist;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n }\n\t\n\tconst flyZoom = () => {\n const delta_y=calculateZoomDelta();\n this.changeZoomByValue(delta_y);\n \n\t\tif (this._state === STATE.ZOOM) {\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y = this.pointer_y;\n\t\t}\n\t\tif (this._state === STATE.SCROLL) {\n\t\t\tmouseScroll = 0;\n\t\t}\n\t}\n\t\n\tthis.setDirectionalLight = directionalLightIn => {\n\t\tthis.directionalLight = directionalLightIn;\n\t};\n\t\n\tthis.updateDirectionalLight = () => {\n\t\tif (this.directionalLight != 0) {\n\t\t\tthis.directionalLight.position.set(this.cameraObject.position.x,\n\t\t\t\t\tthis.cameraObject.position.y,\n\t\t\t\t\tthis.cameraObject.position.z);\n\t\t}\n\t}\n\t\n\t\n\tthis.enable = function () {\n\t\tenabled = true;\n\t\tif (this.domElement && this.domElement.addEventListener) {\n\t\t\tthis.domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.addEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.addEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.addEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.addEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.addEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.addEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\t\n\tthis.disable = function () {\n\t\tenabled = false;\n\t\tif (this.domElement && this.domElement.removeEventListener) {\n\t\t\tthis.domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.removeEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\n\tthis.loadPath = pathData => {\n\t\tcameraPath = pathData.CameraPath;\n\t\tnumberOfCameraPoint = pathData.NumberOfPoints;\n\t}\n\t\n\tthis.loadPathURL = (path_url, finishCallback) => {\n\t\tconst xmlhttp = new XMLHttpRequest();\n\t\txmlhttp.onreadystatechange = () => {\n\t\t if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n\t\t const pathData = JSON.parse(xmlhttp.responseText);\n\t\t this.loadPath(pathData);\n\t if (finishCallback != undefined && (typeof finishCallback == 'function'))\n\t finishCallback();\n\t\t }\n\t\t}\n\t\trequestURL = resolveURL(path_url);\n\t\txmlhttp.open(\"GET\", requestURL, true);\n\t\txmlhttp.send();\n\t}\n\t\n\tthis.setPathDuration = durationIn => {\n duration = durationIn;\n if (smoothCameraTransitionObject)\n smoothCameraTransitionObject.setDuration(duration);\n if (rotateCameraTransitionObject)\n rotateCameraTransitionObject.setDuration(duration);\n\t}\n\t\n\t this.getPlayRate = () => {\n\t return playRate;\n\t }\n\t\n\tthis.setPlayRate = playRateIn => {\n\t\tplayRate = playRateIn;\n\t}\n\t \n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = targetTime - duration\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\t this.getTime = () => {\n\t return inbuildTime;\n\t }\n\t\n\tthis.setTime = timeIn => {\n\t if (timeIn > duration)\n\t inbuildTime = duration;\n\t else if (timeIn < 0.0)\n\t inbuildTime = 0.0;\n\t else\n\t inbuildTime = timeIn;\n\t}\n\t\n\tthis.getNumberOfTimeFrame = () => {\n\t\treturn numberOfCameraPoint;\n\t}\n\t\n\tthis.getCurrentTimeFrame = () => {\n\t if (numberOfCameraPoint > 2) {\n \t\tconst current_time = inbuildTime/duration * (numberOfCameraPoint - 1);\n \t\tconst bottom_frame = Math.floor(current_time);\n \t\tconst proportion = 1 - (current_time - bottom_frame);\n \t\tconst top_frame = Math.ceil(current_time);\n \t\tif (bottom_frame == top_frame) {\n \t\t\tif (bottom_frame == numberOfCameraPoint - 1) {\n \t\t\t\treturn [bottom_frame - 1, top_frame, 0];\n \t\t\t} else {\n \t\t\t\treturn [bottom_frame, top_frame + 1, 1.0];\n \t\t\t}\n \t\t}\n \t\treturn [bottom_frame, top_frame, proportion];\n\t } else if (numberOfCameraPoint == 1) {\n\t return [0, 0, 0];\n\t }\n\t \n\t return undefined;\n\t}\n\t\n\tthis.setCurrentTimeFrame = targetTimeFrame => {\n\t if (numberOfCameraPoint > 2) {\n \t\tinbuildTime = duration * targetTimeFrame / (numberOfCameraPoint - 1);\n \t\tif (inbuildTime < 0.0)\n \t\t\tinbuildTime = 0.0;\n \t\tif (inbuildTime > duration)\n \t\t\tinbuildTime = duration;\n\t }\n\t}\n\n\tconst updatePath = delta => {\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdateTime(delta);\n\t\t\tif (cameraPath) {\n\t\t\t\tconst time_frame = this.getCurrentTimeFrame();\n\t\t\t\tconst bottom_frame = time_frame[0];\n\t\t\t\tconst top_frame = time_frame[1];\n\t\t\t\tconst proportion = time_frame[2];\n\t\t\t\tconst bot_pos = [cameraPath[bottom_frame*3], cameraPath[bottom_frame*3+1], cameraPath[bottom_frame*3+2]];\n\t\t\t\tconst top_pos = [cameraPath[top_frame*3], cameraPath[top_frame*3+1], cameraPath[top_frame*3+2]];\n\t\t\t\tconst current_positions = [];\n\t\t\t\tfor (let i = 0; i < bot_pos.length; i++) {\n\t\t\t\t\tcurrent_positions.push(proportion * bot_pos[i] + (1.0 - proportion) * top_pos[i]);\n\t\t\t\t}\n\t\t\t\tthis.cameraObject.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\tthis.cameraObject.target.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\tif (deviceOrientationControl)\n\t\t\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t\t\tif (updateLightWithPathFlag) {\n\t\t\t\t\tthis.directionalLight.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\t\tthis.directionalLight.target.position.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t};\n\t\n\tthis.calculatePathNow = () => {\n\t updatePath(0.0);\n\t}\n\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}\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\t\tthis.cameraObject.near = defaultViewport.nearPlane;\n\t\tthis.cameraObject.far = defaultViewport.farPlane;\n\t\tthis.cameraObject.position.set( defaultViewport.eyePosition[0], defaultViewport.eyePosition[1],\n\t\t\t\tdefaultViewport.eyePosition[2]);\n\t\tthis.cameraObject.target.set( defaultViewport.targetPosition[0],\n\t\t\t\tdefaultViewport.targetPosition[1], defaultViewport.targetPosition[2] );\n\t\tthis.cameraObject.up.set( defaultViewport.upVector[0], defaultViewport.upVector[1],\n\t\t\t\tdefaultViewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\t\n\tthis.setDefaultCameraSettings = newViewport => {\n\t\tif (newViewport.nearPlane)\n\t\t\tdefaultViewport.nearPlane = newViewport.nearPlane;\n\t\tif (newViewport.farPlane)\n\t\t\tdefaultViewport.farPlane = newViewport.farPlane;\n\t\tif (newViewport.eyePosition)\n\t\t\tdefaultViewport.eyePosition = newViewport.eyePosition;\n\t\tif (newViewport.targetPosition)\n\t\t\tdefaultViewport.targetPosition = newViewport.targetPosition;\n\t\tif (newViewport.upVector)\n\t\t\tdefaultViewport.upVector = newViewport.upVector;\t\n\t}\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\t\n\tthis.getDefaultViewport = () => {\n\t\treturn defaultViewport;\n\t}\n\t\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\t this.enableRaycaster = (sceneIn, callbackFunctionIn, hoverCallbackFunctionIn) => {\n\t if (zincRayCaster == undefined)\n\t zincRayCaster = new RayCaster(sceneIn, this.scene, callbackFunctionIn, hoverCallbackFunctionIn, this.renderer);\n\t }\n\t \n\t this.disableRaycaster = () => {\n\t zincRayCaster.disable();\n\t zincRayCaster = undefined;\n\t }\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\t\n \n const updateCameraSettings = delta => {\n const previousTime = inbuildTime;\n let targetTime = inbuildTime + delta;\n if (targetTime > duration)\n targetTime = duration;\n inbuildTime = targetTime;\n const actualDelta = inbuildTime - previousTime;\n const ratio = actualDelta / duration;\n const alpha = ratio * angle;\n targetCamera.rotateAboutLookAtpoint(axis, alpha);\n };\n \n this.update = delta => {\n\n if ( this.enabled === false ) return;\n \n updateCameraSettings(delta);\n \n if (inbuildTime == duration) {\n completed = true;\n }\n\n }\n \n this.isTransitionCompleted = () => {\n return completed;\n }\n}\n\nconst RayCaster = function (sceneIn, hostSceneIn, callbackFunctionIn, hoverCallbackFunctionIn, rendererIn) {\n const scene = sceneIn;\n const hostScene = hostSceneIn;\n\tconst renderer = rendererIn;\n\tconst callbackFunction = callbackFunctionIn;\n\tconst hoverCallbackFunction = hoverCallbackFunctionIn;\n\tconst enabled = true;\n\tconst raycaster = new THREE.Raycaster();\n\traycaster.params.Line.threshold = 0.1;\n\traycaster.params.Points.threshold = 0.1;\n const mouse = new THREE.Vector2();\n let lastHovered = undefined;\n let cooldown = false;\n\t\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\t\n\tconst getIntersectsObject = (zincCamera, x, y) => {\n\t\tconst rect = zincCamera.domElement.getBoundingClientRect();\n\t\tmouse.x = ((x - rect.left) / rect.width) * 2 - 1;\n mouse.y = -((y - rect.top) / rect.height) * 2 + 1;\n if (hostScene !== scene) {\n const threejsScene = scene.getThreeJSScene();\n renderer.render(threejsScene, zincCamera.cameraObject);\n }\n raycaster.setFromCamera( mouse, zincCamera.cameraObject);\n let objects = scene.getPickableThreeJSObjects();\n\t\treturn raycaster.intersectObjects( objects, true );\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tconst intersects = getIntersectsObject(zincCamera, x, y);\n\t\t\tcallbackFunction(intersects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n const intersects = getIntersectsObject(zincCamera, x, y);\n lastHovered = new Date();\n hoverCallbackFunction(intersects, x, y);\n }\n }\n\t\n\tthis.move = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n if (scene.displayMarkers) {\n hovered(zincCamera, x, y);\n } else {\n if (!cooldown) {\n let now = new Date();\n if (!lastHovered || ( (now.getTime() - lastHovered.getTime()) > 250)) {\n hovered(zincCamera, x, y);\n } else {\n cooldown = true;\n setTimeout(awaitMove(zincCamera, x, y), 250);\n }\n }\n }\n }\n }\n \n let awaitMove = (zincCamera,x,y) => {\n return function() {\n cooldown = false;\n hovered(zincCamera, x, y);\n }\n }\n};\n\nconst CameraAutoTumble = function (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, targetCameraIn) {\n\tconst tumbleAxis = new THREE.Vector3();\n\tconst angle = -tumbleRateIn;\n\tconst targetCamera = targetCameraIn;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tconst tumbleDirection = tumbleDirectionIn;\n\tthis.stopOnCameraInput = stopOnCameraInputIn;\n this.requireUpdate = true;\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n\t\n\tconst computeTumbleAxisAngle = tumbleDirection => {\n\t\tconst tangent_dist = Math.sqrt(tumbleDirection[0]*tumbleDirection[0] +\n\t\t\ttumbleDirection[1]*tumbleDirection[1]);\n\t\tconst width = Math.abs(tumbleDirection[0]) * 4.0;\n\t\tconst height = Math.abs(tumbleDirection[1]) * 4.0;\n\t\tconst radius = 0.25 * (width + height);\n\t\tconst dx = -tumbleDirection[1]/tangent_dist;\n\t\tconst dy = tumbleDirection[0]/tangent_dist;\n\t\tlet d = dx*(tumbleDirection[0])+dy*(-tumbleDirection[1]);\n\t\t\n\t\tif (d > radius)\n\t\t{\n\t\t\td = radius;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (d < -radius)\n\t\t\t{\n\t\t\t\td = -radius;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t/* get axis to rotate about */\n\t\ttumbleAxis.copy(targetCamera.cameraObject.position).sub(\n targetCamera.cameraObject.target).normalize();\n\t\tb.copy(targetCamera.cameraObject.up).normalize();\n c.crossVectors(b, tumbleAxis).normalize().multiplyScalar(dx);\n b.multiplyScalar(dy);\n b.add(c).multiplyScalar(Math.cos(phi));\n tumbleAxis.multiplyScalar(Math.sin(phi)).add(b);\n\t};\n\t\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tif (this.requireUpdate) {\n\t\t\tcomputeTumbleAxisAngle(tumbleDirection);\n\t\t\tthis.requireUpdate = false;\n\t\t}\n\t\ttargetCamera.rotateAboutLookAtpoint(tumbleAxis, angle * delta/1000);\n\n\t}\n\t\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\nStereoCameraZoomFixed = function () {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.cameraL = new THREE.PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new THREE.PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n};\n\nObject.assign( StereoCameraZoomFixed.prototype, {\n\n\tupdate: (() => {\n\n\t\tlet focus, fov, aspect, near, far, zoom;\n\n\t\tconst eyeRight = new THREE.Matrix4();\n\t\tconst eyeLeft = new THREE.Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tconst needsUpdate = focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tconst eyeSep = 0.064 / 2;\n\t\t\t\tconst eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tconst ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ) / camera.zoom;\n\t\t\t\tlet xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t})()\n\n} );\n\n/** the following StereoEffect is written by third party */\n/**\n * @author alteredq / http://alteredqualia.com/\n * @authod mrdoob / http://mrdoob.com/\n * @authod arodic / http://aleksandarrodic.com/\n * @authod fonserbc / http://fonserbc.github.io/\n*/\nconst StereoEffect = function ( renderer ) {\n\n\tconst _stereo = new StereoCameraZoomFixed();\n\t_stereo.aspect = 0.5;\n\n\tthis.setSize = (width, height) => {\n\n\t\trenderer.setSize( width, height );\n\n\t};\n\n\tthis.render = (scene, camera) => {\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t_stereo.update( camera );\n\n\t\tconst size = renderer.getSize();\n\n\t\trenderer.setScissorTest( true );\n\t\trenderer.clear();\n\n\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\trenderer.setScissorTest( false );\n\n\t};\n\n};\n\n\n/**\n * @author richt / http://richt.me\n * @author WestLangley / http://github.com/WestLangley\n *\n * W3C Device Orientation control (http://w3c.github.io/deviceorientation/spec-source-orientation.html)\n */\n\nModifiedDeviceOrientationControls = function ( object ) {\n\n\tconst scope = this;\n\n\tthis.object = object; \n\tthis.object.rotation.reorder( \"YXZ\" );\n\n\tthis.enabled = true;\n\n\tthis.deviceOrientation = {};\n\tthis.screenOrientation = 0;\n\n\tconst onDeviceOrientationChangeEvent = event => {\n\n\t\tscope.deviceOrientation = event;\n\n\t};\n\n\tconst onScreenOrientationChangeEvent = () => {\n\t if (typeof(window) !== 'undefined')\n\t scope.screenOrientation = window.orientation || 0;\n\n\t};\n\n\t// The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n\n\tconst setObjectQuaternion = (() => {\n\n\t\tconst zee = new THREE.Vector3( 0, 0, 1 );\n\n\t\tconst euler = new THREE.Euler();\n\n\t\tconst q0 = new THREE.Quaternion();\n\n\t\tconst q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis\n\n\t\treturn (cameraObject, alpha, beta, gamma, orient) => {\n\t\t\t\n\t\t\tconst vector = new THREE.Vector3(0, 0, 1);\n\t\t\t\n\t\t\tvector.subVectors(cameraObject.target, cameraObject.position);\n\n\t\t\teuler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us\n\n\t\t\tconst quaternion = new THREE.Quaternion();\n\t\t\t\n\t\t\tquaternion.setFromEuler( euler ); // orient the device\n\n\t\t\tquaternion.multiply( q1 ); // camera looks out the back of the device, not the top\n\n\t\t\tquaternion.multiply( q0.setFromAxisAngle( zee, - orient ) ); // adjust for screen orientation\n\t\t\t\n\t\t\tvector.applyQuaternion(quaternion);\n\t\t\t\t\n\t\t\tvector.addVectors(cameraObject.position, vector);\n\t\t\t\n\t\t\tcameraObject.lookAt(vector);\n\n\t\t};\n\n\t})();\n\n\tthis.connect = () => {\n\n\t\tonScreenOrientationChangeEvent(); // run once on load\n\t\tif (typeof(window) !== 'undefined') {\n\t\t window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t\t}\n\t\tscope.enabled = true;\n\n\t};\n\n\tthis.disconnect = () => {\n\t if (typeof(window) !== 'undefined') {\n\t window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t }\n\t\tscope.enabled = false;\n\n\t};\n\n\tthis.update = () => {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tconst alpha = scope.deviceOrientation.alpha ? THREE.Math.degToRad( scope.deviceOrientation.alpha ) : 0; // Z\n\t\tconst beta = scope.deviceOrientation.beta ? THREE.Math.degToRad( scope.deviceOrientation.beta ) : 0; // X'\n\t\tconst gamma = scope.deviceOrientation.gamma ? THREE.Math.degToRad( scope.deviceOrientation.gamma ) : 0; // Y''\n\t\tconst orient = scope.screenOrientation ? THREE.Math.degToRad( scope.screenOrientation ) : 0; // O\n\n\t\tsetObjectQuaternion( scope.object, alpha, beta, gamma, orient );\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tthis.disconnect();\n\n\t};\n\n\tthis.connect();\n\n};\n\nexports.Viewport = Viewport\nexports.CameraControls = CameraControls\nexports.SmoothCameraTransition = SmoothCameraTransition\nexports.RotateCameraTransition = RotateCameraTransition\nexports.RayCaster = RayCaster\nexports.CameraAutoTumble = CameraAutoTumble\nexports.StereoEffect = StereoEffect\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\n this.getDiffFromNormalised = (x, y) => {\n let centre = new THREE.Box3().setFromBufferAttribute(\n positionAttributes).getCenter();\n let coord = centre.clone().project(this.camera);\n let new_coord = new THREE.Vector3(x, y, coord.z).unproject(this.camera);\n return new_coord.sub(centre);\n }\n\n let setCurrentCameraSettings = (diameter, newViewport) => {\n if (targetScene.camera.near)\n this.camera.near = targetScene.camera.near;\n if (newViewport.farPlane)\n this.camera.far = newViewport.farPlane;\n if (newViewport.eyePosition)\n this.camera.position.set(newViewport.eyePosition[0],\n newViewport.eyePosition[1], newViewport.eyePosition[2]);\n if (newViewport.upVector)\n this.camera.up.set(newViewport.upVector[0], newViewport.upVector[1],\n newViewport.upVector[2]);\n if (newViewport.targetPosition)\n this.camera.lookAt(new THREE.Vector3(newViewport.targetPosition[0],\n newViewport.targetPosition[1], newViewport.targetPosition[2]));\n this.camera.zoom = 1 / diameter;\n this.camera.updateProjectionMatrix();\n }\n\n this.getBoundary = () => {\n let target = new THREE.Vector3().copy(\n targetScene.camera.target).project(targetScene.camera);\n let v1 = new THREE.Vector3(-1, -1, target.z).unproject(targetScene.camera);\n let v2 = new THREE.Vector3(1, -1, target.z).unproject(targetScene.camera);\n let v3 = new THREE.Vector3(1, 1, target.z).unproject(targetScene.camera);\n let v4 = new THREE.Vector3(-1, 1, target.z).unproject(targetScene.camera);\n let array = [v1, v2, v3, v3, v4, v1];\n positionAttributes.copyVector3sArray(array);\n positionAttributes.needsUpdate = true;\n }\n\n this.updateCamera = () => {\n this.getBoundary();\n let cameraControl = targetScene.getZincCameraControls();\n let boundingBox = targetScene.getBoundingBox();\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const diameter = boundingBox.min.distanceTo(boundingBox.max);\n const radius = diameter / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = cameraControl.getViewportFromCentreAndRadius(\n centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n setCurrentCameraSettings(diameter, viewport);\n }\n }\n}\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Geometry = require('./primitives/geometry').Geometry;\nconst work = require('webworkify-webpack');\nconst Promise = require('promise-polyfill').default;\n//const work = undefined;\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nconst GeometryCSG = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n\thost = hostIn;\n let core = undefined;\n let worker = undefined;\n let onProgress = false;\n let myResolve = undefined;\n \n var createGeometryFromJSON = json => {\n\t \tconst material = host.morph.material.clone();\n\t \tmaterial.morphTargets = false;\n\t const newGeometry = new Geometry();\n\t\tconst JSONParser = new JSONLoader();\n\t\tconst geometry = JSONParser.parse(json);\n const mesh = new THREE.Mesh(geometry.geometry, material);\n\t newGeometry.geometry = mesh.geometry;\n\t newGeometry.morph = mesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n var workerEventHandler = ev => {\n\t switch (ev.data.action) {\n\t \tcase 'message':\n\t console.log(ev.data.message);\n\t break;\n\t \tcase 'result':\n\t \tconst csg = new GeometryCSG(createGeometryFromJSON(ev.data.object));\n\t \tif (myResolve)\n\t \t\tmyResolve(csg);\n\t \tmyResolve = undefined;\n\t \tonProgress = false;\n\t break;\n\t \tdefault:\n\t \tthrow 'Cannot handle specified action.';\n }\n }\n \n var initialise = hostIn => {\n\t if (work !== undefined) {\n\t\tworker = work(require.resolve('./workers/geometryCSG.worker.js'));\n\t }\n\t if (!worker) {\n\t core = new (require('./workers/geometryCSGInternal').GeometryCSGInternal)(hostIn);\n\t } else {\n\t\tif (hostIn && hostIn.isGeometry) {\n\t\t let mesh = hostIn.morph;\n\t\t let json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t worker.addEventListener('message', function (ev) {\n\t\t\t workerEventHandler(ev);\n\t\t });\n\t\t worker.postMessage({action: \"initialise\", object: json});\n\t\t}\n\t }\n }\n \n this.getHostGeometry = () => {\n\tconst tempCSG = new ThreeBSP(host.morph);\n return new createZincGeometry(tempCSG);\n }\n \n this.getGeometry = () => host;\n \n const createZincGeometry = csgMesh => {\n\t\tconst material = host.morph.material.clone();\n\t\tmaterial.morphTargets = false;\n\t\tconst newMesh = csgMesh.toMesh(material);\n\t const newGeometry = new Geometry();\n\t newGeometry.geometry = newMesh.geometry;\n\t newGeometry.morph = newMesh;\n\t newGeometry.morph.userData = newGeometry;\n\t return newGeometry;\n }\n \n this.setCSG = CSG => {\n\t core.setCSG(CSG);\n } \n \n const sendToWork = (guestGeometry, action, resolve, reject) => {\n\t if (!onProgress) {\n\t\t let mesh = guestGeometry.morph;\n\t\t const json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t myResolve = resolve;\n\t\t onProgress = true;\n\t\t worker.postMessage({action: action, object: json});\n\t } else {\n\t\t reject(\"On progress\");\n\t }\n }\n \n this.intersect = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.intersect(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n\t};\n \n this.subtract = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.subtract(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.union = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.union(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.terminateWorker = () => {\n\t if (worker)\n\t\t worker.terminate();\n }\n \n initialise(hostIn);\n};\n\nexports.GeometryCSG = GeometryCSG;\n","'use strict';\n\t\n\tvar ThreeBSP,\n\t\tEPSILON = 1e-5,\n\t\tCOPLANAR = 0,\n\t\tFRONT = 1,\n\t\tBACK = 2,\n\t\tSPANNING = 3;\n\t\n module.exports = function( THREE ) {\n var ThreeBSP = function( geometry ) {\n // Convert THREE.Geometry to ThreeBSP\n var i, _length_i,\n face, vertex, faceVertexUvs, uvs,\n polygon,\n polygons = [],\n tree;\n \n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n if ( geometry instanceof THREE.Geometry ) {\n this.matrix = new THREE.Matrix4;\n } else if ( geometry.isMesh ) {\n // #todo: add hierarchy support\n geometry.updateMatrix();\n this.matrix = geometry.matrix.clone();\n geometry = geometry.geometry;\n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n geometry.mergeVertices();\n geometry.computeVertexNormals(false);\n } else if ( geometry instanceof ThreeBSP.Node ) {\n this.tree = geometry;\n this.matrix = new THREE.Matrix4;\n return this;\n } else {\n throw 'ThreeBSP: Given geometry is unsupported';\n }\n \n for ( i = 0, _length_i = geometry.faces.length; i < _length_i; i++ ) {\n face = geometry.faces[i];\n faceVertexUvs = geometry.faceVertexUvs[0][i];\n polygon = new ThreeBSP.Polygon;\n \n if ( face instanceof THREE.Face3 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else if ( typeof THREE.Face4 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[1], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.d ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[3].x, faceVertexUvs[3].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[3], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else {\n throw 'Invalid face type at index ' + i;\n }\n \n polygon.calculateProperties();\n polygons.push( polygon );\n };\n \n this.tree = new ThreeBSP.Node( polygons );\n };\n ThreeBSP.prototype.subtract = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.union = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.intersect = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n b.clipTo( a );\n b.invert();\n a.clipTo( b );\n b.clipTo( a );\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.toGeometry = function() {\n var i, j,\n matrix = new THREE.Matrix4().getInverse( this.matrix ),\n geometry = new THREE.Geometry(),\n polygons = this.tree.allPolygons(),\n polygon_count = polygons.length,\n polygon, polygon_vertice_count,\n vertice_dict = {},\n vertex_idx_a, vertex_idx_b, vertex_idx_c,\n vertex, face,\n verticeUvs;\n \n for ( i = 0; i < polygon_count; i++ ) {\n polygon = polygons[i];\n polygon_vertice_count = polygon.vertices.length;\n \n for ( j = 2; j < polygon_vertice_count; j++ ) {\n verticeUvs = [];\n \n vertex = polygon.vertices[0];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n \n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j-1];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n face = new THREE.Face3(\n vertex_idx_a,\n vertex_idx_b,\n vertex_idx_c,\n new THREE.Vector3( polygon.normal.x, polygon.normal.y, polygon.normal.z )\n );\n \n geometry.faces.push( face );\n geometry.faceVertexUvs[0].push( verticeUvs );\n }\n \n }\n return geometry;\n };\n ThreeBSP.prototype.toBufferGeometry = function( ) {\n var geometry = this.toGeometry();\n var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);\n\n return bufferGeometry;\n };\n ThreeBSP.prototype.toMesh = function( material ) {\n var geometry = this.toBufferGeometry(),\n mesh = new THREE.Mesh( geometry, material );\n \n mesh.position.setFromMatrixPosition( this.matrix );\n mesh.rotation.setFromRotationMatrix( this.matrix );\n \n return mesh;\n };\n \n \n ThreeBSP.Polygon = function( vertices, normal, w ) {\n if ( !( vertices instanceof Array ) ) {\n vertices = [];\n }\n \n this.vertices = vertices;\n if ( vertices.length > 0 ) {\n this.calculateProperties();\n } else {\n this.normal = this.w = undefined;\n }\n };\n ThreeBSP.Polygon.prototype.calculateProperties = function() {\n var a = this.vertices[0],\n b = this.vertices[1],\n c = this.vertices[2];\n \n this.normal = b.clone().subtract( a ).cross(\n c.clone().subtract( a )\n ).normalize();\n \n this.w = this.normal.clone().dot( a );\n \n return this;\n };\n ThreeBSP.Polygon.prototype.clone = function() {\n var i, vertice_count,\n polygon = new ThreeBSP.Polygon;\n \n for ( i = 0, vertice_count = this.vertices.length; i < vertice_count; i++ ) {\n polygon.vertices.push( this.vertices[i].clone() );\n };\n polygon.calculateProperties();\n \n return polygon;\n };\n \n ThreeBSP.Polygon.prototype.flip = function() {\n var i, vertices = [];\n \n this.normal.multiplyScalar( -1 );\n this.w *= -1;\n \n for ( i = this.vertices.length - 1; i >= 0; i-- ) {\n vertices.push( this.vertices[i] );\n };\n this.vertices = vertices;\n \n return this;\n };\n ThreeBSP.Polygon.prototype.classifyVertex = function( vertex ) { \n var side_value = this.normal.dot( vertex ) - this.w;\n \n if ( side_value < -EPSILON ) {\n return BACK;\n } else if ( side_value > EPSILON ) {\n return FRONT;\n } else {\n return COPLANAR;\n }\n };\n ThreeBSP.Polygon.prototype.classifySide = function( polygon ) {\n var i, vertex, classification,\n num_positive = 0,\n num_negative = 0,\n vertice_count = polygon.vertices.length;\n \n for ( i = 0; i < vertice_count; i++ ) {\n vertex = polygon.vertices[i];\n classification = this.classifyVertex( vertex );\n if ( classification === FRONT ) {\n num_positive++;\n } else if ( classification === BACK ) {\n num_negative++;\n }\n }\n \n if ( num_positive > 0 && num_negative === 0 ) {\n return FRONT;\n } else if ( num_positive === 0 && num_negative > 0 ) {\n return BACK;\n } else if ( num_positive === 0 && num_negative === 0 ) {\n return COPLANAR;\n } else {\n return SPANNING;\n }\n };\n ThreeBSP.Polygon.prototype.splitPolygon = function( polygon, coplanar_front, coplanar_back, front, back ) {\n var classification = this.classifySide( polygon );\n \n if ( classification === COPLANAR ) {\n \n ( this.normal.dot( polygon.normal ) > 0 ? coplanar_front : coplanar_back ).push( polygon );\n \n } else if ( classification === FRONT ) {\n \n front.push( polygon );\n \n } else if ( classification === BACK ) {\n \n back.push( polygon );\n \n } else {\n \n var vertice_count,\n i, j, ti, tj, vi, vj,\n t, v,\n f = [],\n b = [];\n \n for ( i = 0, vertice_count = polygon.vertices.length; i < vertice_count; i++ ) {\n \n j = (i + 1) % vertice_count;\n vi = polygon.vertices[i];\n vj = polygon.vertices[j];\n ti = this.classifyVertex( vi );\n tj = this.classifyVertex( vj );\n \n if ( ti != BACK ) f.push( vi );\n if ( ti != FRONT ) b.push( vi );\n if ( (ti | tj) === SPANNING ) {\n t = ( this.w - this.normal.dot( vi ) ) / this.normal.dot( vj.clone().subtract( vi ) );\n v = vi.interpolate( vj, t );\n f.push( v );\n b.push( v );\n }\n }\n \n \n if ( f.length >= 3 ) front.push( new ThreeBSP.Polygon( f ).calculateProperties() );\n if ( b.length >= 3 ) back.push( new ThreeBSP.Polygon( b ).calculateProperties() );\n }\n };\n \n ThreeBSP.Vertex = function( x, y, z, normal, uv ) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.normal = normal || new THREE.Vector3;\n this.uv = uv || new THREE.Vector2;\n };\n ThreeBSP.Vertex.prototype.clone = function() {\n return new ThreeBSP.Vertex( this.x, this.y, this.z, this.normal.clone(), this.uv.clone() );\n };\n ThreeBSP.Vertex.prototype.add = function( vertex ) {\n this.x += vertex.x;\n this.y += vertex.y;\n this.z += vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.subtract = function( vertex ) {\n this.x -= vertex.x;\n this.y -= vertex.y;\n this.z -= vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.multiplyScalar = function( scalar ) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n };\n ThreeBSP.Vertex.prototype.cross = function( vertex ) {\n var x = this.x,\n y = this.y,\n z = this.z;\n\n this.x = y * vertex.z - z * vertex.y;\n this.y = z * vertex.x - x * vertex.z;\n this.z = x * vertex.y - y * vertex.x;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.normalize = function() {\n var length = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n \n this.x /= length;\n this.y /= length;\n this.z /= length;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.dot = function( vertex ) {\n return this.x * vertex.x + this.y * vertex.y + this.z * vertex.z;\n };\n ThreeBSP.Vertex.prototype.lerp = function( a, t ) {\n this.add(\n a.clone().subtract( this ).multiplyScalar( t )\n );\n \n this.normal.add(\n a.normal.clone().sub( this.normal ).multiplyScalar( t )\n );\n \n this.uv.add(\n a.uv.clone().sub( this.uv ).multiplyScalar( t )\n );\n \n return this;\n };\n ThreeBSP.Vertex.prototype.interpolate = function( other, t ) {\n return this.clone().lerp( other, t );\n };\n ThreeBSP.Vertex.prototype.applyMatrix4 = function ( m ) {\n\n // input: THREE.Matrix4 affine matrix\n\n var x = this.x, y = this.y, z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n\n return this;\n\n };\n \n \n ThreeBSP.Node = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n\n this.polygons = [];\n this.front = this.back = undefined;\n \n if ( !(polygons instanceof Array) || polygons.length === 0 ) return;\n\n this.divider = polygons[0].clone();\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n this.front = new ThreeBSP.Node( front );\n }\n \n if ( back.length > 0 ) {\n this.back = new ThreeBSP.Node( back );\n }\n };\n ThreeBSP.Node.isConvex = function( polygons ) {\n var i, j;\n for ( i = 0; i < polygons.length; i++ ) {\n for ( j = 0; j < polygons.length; j++ ) {\n if ( i !== j && polygons[i].classifySide( polygons[j] ) !== BACK ) {\n return false;\n }\n }\n }\n return true;\n };\n ThreeBSP.Node.prototype.build = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n \n if ( !this.divider ) {\n this.divider = polygons[0].clone();\n }\n\n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n if ( !this.front ) this.front = new ThreeBSP.Node();\n this.front.build( front );\n }\n \n if ( back.length > 0 ) {\n if ( !this.back ) this.back = new ThreeBSP.Node();\n this.back.build( back );\n }\n };\n ThreeBSP.Node.prototype.allPolygons = function() {\n var polygons = this.polygons.slice();\n if ( this.front ) polygons = polygons.concat( this.front.allPolygons() );\n if ( this.back ) polygons = polygons.concat( this.back.allPolygons() );\n return polygons;\n };\n ThreeBSP.Node.prototype.clone = function() {\n var node = new ThreeBSP.Node();\n \n node.divider = this.divider.clone();\n node.polygons = this.polygons.map( function( polygon ) { return polygon.clone(); } );\n node.front = this.front && this.front.clone();\n node.back = this.back && this.back.clone();\n \n return node;\n };\n ThreeBSP.Node.prototype.invert = function() {\n var i, polygon_count, temp;\n \n for ( i = 0, polygon_count = this.polygons.length; i < polygon_count; i++ ) {\n this.polygons[i].flip();\n }\n \n this.divider.flip();\n if ( this.front ) this.front.invert();\n if ( this.back ) this.back.invert();\n \n temp = this.front;\n this.front = this.back;\n this.back = temp;\n \n return this;\n };\n ThreeBSP.Node.prototype.clipPolygons = function( polygons ) {\n var i, polygon_count,\n front, back;\n\n if ( !this.divider ) return polygons.slice();\n \n front = [], back = [];\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], front, back, front, back );\n }\n\n if ( this.front ) front = this.front.clipPolygons( front );\n if ( this.back ) back = this.back.clipPolygons( back );\n else back = [];\n\n return front.concat( back );\n };\n \n ThreeBSP.Node.prototype.clipTo = function( node ) {\n this.polygons = node.clipPolygons( this.polygons );\n if ( this.front ) this.front.clipTo( node );\n if ( this.back ) this.back.clipTo( node );\n };\n \n \n return ThreeBSP;\n }\n","module.exports = require(\"webworkify-webpack\");","module.exports = require(\"promise-polyfill\");","const Geometry = require('../primitives/geometry').Geometry;\nconst THREE = require('three');\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nmodule.exports = function (self) {\n\tlet core = undefined;\n\t\n\tvar geometryFromJSON = function(object) {\n\t\tvar JSONParser = new JSONLoader();\n\t\tvar geometry = JSONParser.parse(object);\n\t\tvar material = new THREE.MeshPhongMaterial();\n var mesh = new THREE.Mesh(geometry.geometry, material);\n var host = new Geometry();\n host.morph = mesh;\n return host;\n\t}\n\n\tvar initialise = function(object) {\n\t\tvar host = geometryFromJSON(object);\n\t\tcore = new (require('./geometryCSGInternal').GeometryCSGInternal)(host);\n\t\tself.postMessage({action:\"message\", message: \"Initialised\"});\n\t}\n\t\n\tvar intersect = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.intersect(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar subtract = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.subtract(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar union = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.union(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tself.addEventListener('message',function (ev){\n\t switch (ev.data.action) {\n \tcase 'initialise':\n initialise(ev.data.object);\n break;\n \tcase 'intersect':\n \t\tintersect(ev.data.object);\n break;\n \tcase 'subtract':\n \t\tsubtract(ev.data.object);\n break;\n \tcase 'union':\n \t\tunion(ev.data.object);\n break;\n \tdefault:\n \t\tthrow 'Cannot handle specified action.';\n\t }\n\t});\n\t\t\n //var test = ev.data;\n //self.postMessage(test, [test]);\n};\n\n","const THREE = require('three');\nconst ThreeBSP = require('../three-js-csg')(THREE);\nconst Geometry = require('../primitives/geometry').Geometry;\nconst GeometryCSG = require('../geometryCSG').GeometryCSG;\n\nconst GeometryCSGInternal = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n host = hostIn;\n let hostCSG = undefined;\n \n this.setGeometry = hostIn => {\n if (hostIn && hostIn.isGeometry)\n\t host = hostIn;\n hostCSG = undefined;\n }\n \n this.setCSG = csg => {\n\t hostCSG = csg;\n }\n \n const prepareCSG = guestGeometry => {\n\t if (host && host.morph && guestGeometry && guestGeometry.morph) {\n\t if (hostCSG === undefined)\n\t hostCSG = new ThreeBSP(host.morph);\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t return hostCSG.intersect(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.subtract = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.subtract(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.union = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.union(guestCSG);\n\t }\n\t return undefined;\n }\n};\n\nexports.GeometryCSGInternal = GeometryCSGInternal;\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Glyphset = require('./primitives/glyphset').Glyphset;\n\n/**\n * Provides an object which takes in a glyphset, convert it into a CSG and further\n * action such as intersect with another geometry may be performed.\n * \n * @class\n * @author Alan Wu\n * @return {GlyphsetCSG}\n */\nconst GlyphsetCSG = function (hostIn) {\n let host = undefined;\n if (hostIn && hostIn.isGlyphset)\n\t host = hostIn;\n const hostCSGs = new Array();\n const currentIntersect = undefined;\n \n this.setGlyphset = hostIn => {\n\t if (hostIn && hostIn.isGlyphset)\n\t\t host = hostIn;\n\t hostCSG = undefined;\n }\n \n this.getGlyphset = () => {\n\t return host;\n }\n \n const prepareCSGForGlyphs = () => {\n\t return glyph => {\n\t\t const mesh = glyph.getMesh();\n\t\t const label = glyph.getLabel();\n\t\t if (mesh) {\n\t\t\t const csg = new ThreeBSP(mesh.geometry.clone().applyMatrix(mesh.matrix));\n\t\t\t const store = [];\n\t\t\t store.csg = csg;\n\t\t\t store.label = label;\n\t\t\t if (mesh.material)\n\t\t\t\t store.material = mesh.material.clone();\n\t\t\t hostCSGs.push(store);\n\t\t }\n\t };\n };\n \n const prepareCSG = guestGeometry => {\n\t if (host && guestGeometry && guestGeometry.morph) {\n\t if (hostCSGs.length == 0) {\n\t \t host.forEachGlyph(prepareCSGForGlyphs());\n\t }\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if ((hostCSGs.length > 0) && guestCSG) {\n\t\tconst glyphset = new (require('./primitives/glyphset').Glyphset)();\n\t\tfor (let i = 0; i < hostCSGs.length; i++) {\n\t\t\tconst hostCSG = hostCSGs[i];\n\t\t const intersect = hostCSG.csg.intersect(guestCSG);\n\t\t const mesh = intersect.toMesh();\n\t\t if (mesh && mesh.geometry && (mesh.geometry.vertices.length > 0)) {\n\t\t \tif (hostCSG.material) {\n\t\t \t\tmesh.material = hostCSG.material;\n\t\t \t\tmesh.material.side = THREE.DoubleSide;\n\t\t \t\tmesh.material.clippingPlanes = null;\n\t\t \t}\n\t\t\t const glyph = glyphset.addMeshAsGlyph(mesh, i+1);\n\t\t\t glyph.setLabel(hostCSG.label);\n\t\t }\n\t\t}\n\t const newCSG = new GlyphsetCSG(glyphset);\t\n\t return newCSG;\n\t }\n\n\t return undefined;\n }\n \n};\n\nexports.GlyphsetCSG = GlyphsetCSG;\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://Zinc/webpack/universalModuleDefinition","webpack://Zinc/webpack/bootstrap","webpack://Zinc/./src/zinc.js","webpack://Zinc/external \"url-polyfill\"","webpack://Zinc/./src/primitives/geometry.js","webpack://Zinc/external \"three\"","webpack://Zinc/./src/primitives/zincObject.js","webpack://Zinc/./src/three/Geometry.js","webpack://Zinc/./src/utilities.js","webpack://Zinc/./src/primitives/marker.js","webpack://Zinc/./src/assets/mapMarker.svg","webpack://Zinc/./src/primitives/augmentShader.js","webpack://Zinc/./src/primitives/glyph.js","webpack://Zinc/./src/primitives/label.js","webpack://Zinc/external \"three-spritetext\"","webpack://Zinc/./src/primitives/glyphset.js","webpack://Zinc/./src/loader.js","webpack://Zinc/./src/three/Loader.js","webpack://Zinc/./src/videoHandler.js","webpack://Zinc/./src/primitives/pointset.js","webpack://Zinc/./src/three/Points.js","webpack://Zinc/./src/assets/disc.png","webpack://Zinc/./src/primitives/lines.js","webpack://Zinc/./src/three/line/LineSegments.js","webpack://Zinc/./src/three/line/Line.js","webpack://Zinc/./src/renderer.js","webpack://Zinc/external \"css-element-queries/src/ResizeSensor\"","webpack://Zinc/./src/scene.js","webpack://Zinc/./src/sceneLoader.js","webpack://Zinc/external \"three/examples/jsm/loaders/STLLoader\"","webpack://Zinc/external \"three/examples/jsm/loaders/OBJLoader\"","webpack://Zinc/external \"three/examples/jsm/loaders/GLTFLoader\"","webpack://Zinc/./src/sceneExporter.js","webpack://Zinc/./src/three/GLTFExporter.js","webpack://Zinc/./src/controls.js","webpack://Zinc/./src/minimap.js","webpack://Zinc/./src/geometryCSG.js","webpack://Zinc/./src/three-js-csg.js","webpack://Zinc/external \"webworkify-webpack\"","webpack://Zinc/external \"promise-polyfill\"","webpack://Zinc/./src/workers/geometryCSG.worker.js","webpack://Zinc/./src/workers/geometryCSGInternal.js","webpack://Zinc/./src/glyphsetCSG.js"],"names":["require","Zinc","Revision","defaultMaterialColor","defaultOpacity","modelPrefix","Geometry","Glyph","Glyphset","Pointset","Lines","Renderer","Scene","GeometryCSG","GlyphsetCSG","Viewport","CameraControls","SmoothCameraTransition","RayCaster","CameraAutoTumble","StereoEffect","loadExternalFile","loadExternalFiles","THREE","module","exports","ZincObject","call","videoHandler","isGeometry","createMesh","geometryIn","materialIn","options","geometry","morph","toBufferGeometry","isTransparent","opacity","material","_video","morphTargets","localTimeEnabled","morphNormals","BufferGeometry","attributes","color","MeshPhongMaterial","colour","transparent","side","DoubleSide","vertexColors","VertexColors","localMorphColour","morphAttributes","onBeforeCompile","augmentMorphColor","videoTexture","createCanvasVideoTexture","MeshBasicMaterial","Color","map","mesh","Mesh","setMesh","calculateUVs","computeBoundingBox","max","boundingBox","min","offset","Vector2","x","y","range","faceVertexUvs","i","faces","length","v1","vertices","a","v2","b","v3","c","push","uvsNeedUpdate","setWireframe","wireframe","prototype","Object","create","THREEGeometry","isZincObject","secondaryMesh","groupName","timeEnabled","morphColour","inbuildTime","mixer","animationGroup","duration","clipAction","userData","marker","markerUpdateRequired","markerVertexIndex","boundingBoxUpdateRequired","cachedBoundingBox","Box3","_vertex","Vector3","anatomicalId","setDuration","durationIn","getDuration","computeMorphNormals","toIndexedBufferGeometry","copyMorphColorsToIndexedBufferGeometry","clone","colorsNeedUpdate","computeBoundingSphere","checkAndCreateTransparentMesh","secondaryMaterial","FrontSide","renderOrder","name","BackSide","needsUpdate","add","checkAndRemoveTransparentMesh","remove","uncache","AnimationObjectGroup","AnimationMixer","position","animationClip","AnimationClip","CreateClipsFromMorphTargetSequences","loop","loopOnce","clampWhenFinished","play","matrixAutoUpdate","setFrustumCulled","setName","groupNameIn","getCurrentTime","ratio","time","_clip","updateMorphColorAttribute","targetGeometry","morphColors","influences","morphTargetInfluences","deleteAttribute","bound","morphArray","setAttribute","setMorphTime","timeChanged","actualDuration","newTime","update","isTimeVarying","getVisibility","visible","setVisibility","setAlpha","alpha","transparentChanged","flag","frustumCulled","setVertexColors","getColour","setColour","getColourHex","getHexString","setColourHex","hex","setHex","setMaterial","dispose","getClosestVertexIndex","closestIndex","setFromBufferAttribute","center","getCenter","distance","currentDistance","current","count","fromArray","array","distanceTo","getClosestVertex","found","multiplyScalar","getBoundingBox","box","setFromArray","set","updateMarker","playAnimation","displayMarkers","isEnabled","disable","Marker","setPosition","z","camera","markerDepths","updateNDC","cameraObject","enable","processMarkerVisual","updateVisual","initiateMorphColor","setRenderOrder","render","delta","targetTime","_m1","Matrix4","_obj","Object3D","_offset","uuid","MathUtils","generateUUID","type","colors","normals","uvs","skinWeights","skinIndices","lineDistances","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","normalsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","assign","EventDispatcher","constructor","applyMatrix4","matrix","vertex","normalMatrix","Matrix3","getNormalMatrix","il","face","normal","applyMatrix3","normalize","j","jl","vertexNormals","rotateX","angle","makeRotationX","rotateY","makeRotationY","rotateZ","makeRotationZ","translate","makeTranslation","scale","makeScale","lookAt","vector","updateMatrix","fromBufferGeometry","addFace","materialIndex","scope","fromBufferAttribute","Face3","uv","uv2","index","console","error","groups","group","start","getX","computeFaceNormals","negate","radius","s","cb","ab","f","fl","vA","vB","vC","subVectors","cross","copy","computeVertexNormals","areaWeighted","Array","v","vl","computeFlatVertexNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","setFromPoints","Sphere","merge","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","colors1","colors2","vertexCopy","faceVertexNormals","faceVertexColors","faceCopy","faceVertexUvs2","uvs2","uvsCopy","k","kl","mergeMesh","isMesh","mergeVertices","precisionPoints","verticesMap","unique","changes","precision","Math","pow","key","round","faceIndicesToRemove","indices","n","idx","splice","diff","points","point","l","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","uvs1","id","toJSON","setBit","value","enabled","getNormalIndex","hash","toString","normalsHash","getColorIndex","r","g","colorsHash","getHex","getUvIndex","uvsHash","data","metadata","version","generator","parameters","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","source","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","computeGroups","DirectGeometry","fromGeometry","buffergeometry","positions","Float32Array","BufferAttribute","copyVector3sArray","copyColorsArray","copyVector2sArray","attribute","Float32BufferAttribute","copyVector4sArray","buffer","copyArray","colorArray","colorsArray","normalsArray","setIndex","computeTangents","computeLineDistances","applyMatrix","warn","dispatchEvent","createBufferGeometryFromObject","object","isPoints","isLine","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","isVector3","isArray","isColor","resolveURL","url","actualURL","prefix","test","callback","errorCallback","request","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","send","urls","partialCallback","text","urlIndex","result","numComplete","numUrls","getColorsRGB","index_in_colors","floor","remainder","hex_value","mycolor","copyMorphColorsToBufferGeometry","bufferGeometry","morphColor","tolerance","Number","EPSILON","hashToIndex","getIndex","getAttribute","vertexCount","nextIndex","attributeNames","keys","attrArrays","morphAttrsArrays","newIndices","getters","morphAttr","fill","decimalShift","log10","shiftMultiplier","itemSize","getterFunc","newarray","newMorphArrays","m","ml","oldAttribute","isInterleavedBufferAttribute","setArray","morphAttribute","cons","Uint8Array","Uint16Array","Uint32Array","newIndexBuffer","PhongToToon","isMeshPhongMaterial","MeshToonMaterial","markerImage","Image","src","texture","Texture","image","size","zincObject","spriteMaterial","sprite","Group","parent","isMarker","initialise","SpriteMaterial","alphaTest","depthTest","depthWrite","sizeAttenuation","Sprite","porportion","setSpriteSize","project","shader","vertexShader","replace","join","idIn","glyphsetIn","FaceColors","label","labelString","isGlyph","fromMesh","meshIn","getGlyphset","setLabel","String","showLabel","getPosition","getSprite","Label","getGroup","getLabel","getMesh","setFromObject","setTransformation","axis1","axis2","axis3","elements","SpriteText","default","textIn","getStyle","setScale","scaling","getString","JSONLoader","glyphList","axis1s","axis2s","axis3s","scales","labels","numberOfTimeSteps","numberOfVertices","baseSize","scaleFactors","repeat_mode","ready","morphColours","morphVertices","isGlyphset","_transformMatrix","_bot_colour","_top_colour","_boundingBox1","_boundingBox2","_boundingBox3","_points","load","glyphsetData","glyphURL","finishCallback","isInline","displayLabels","MorphColours","MorphVertices","number_of_time_steps","number_of_vertices","base_size","scale_factors","loader","InstancedMesh","parse","meshloader","materials","crossOrigin","resolve_glyph_axes","return_arrays","sign","axis_scale","final_axis1","final_axis2","final_axis3","final_point","mirrored_axis1","mirrored_axis2","mirrored_axis3","mirrored_point","number_of_glyphs","glyph_repeat_mode","use_axis1","use_axis2","use_scale","final_scale1","magnitude","sqrt","updateGlyphsetTransformation","current_positions","current_axis1s","current_axis2s","current_axis3s","current_scales","numberOfGlyphs","numberOfPositions","current_glyph_index","current_index","current_position","current_axis1","current_axis2","current_axis3","current_scale","arrays","setMatrixAt","glyph","instanceMatrix","updateGlyphsetHexColors","current_colors","hex_values","numberOfColours","setColorAt","instanceColor","updateMorphGlyphsets","current_time","bottom_frame","proportion","top_frame","ceil","bottom_positions","top_positions","bottom_axis1","top_axis1","bottom_axis2","top_axis2","bottom_axis3","top_axis3","bottom_scale","top_scale","bottom_colors","top_colors","setRGB","createGlyphs","addCustomGlyph","addMeshAsGlyph","forEachGlyph","callbackFunction","tempGeometry","getMatrixAt","setFromMatrixPosition","applyMatrix4ToBox","box1","box2","union","Loader","LoaderUtils","Vector4","FileLoader","DefaultLoadingManager","manager","withCredentials","onLoad","onProgress","onError","texturePath","extractUrlBase","setWithCredentials","json","JSON","toLowerCase","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","u","nUvLayers","parseSkin","influencesPerVertex","w","d","bones","parseMorphing","dstVertices","srcVertices","cl","dstColors","srcColors","parseAnimations","outputAnimations","animations","animation","concat","clip","parseAnimation","morphAnimationClips","initMaterials","video","fullPath","VideoHandler","singleSided","flipSided","specularCoef","shininess","Handlers","handlers","regex","get","file","onLoadStart","onLoadProgress","onLoadComplete","createMaterial","BlendingMode","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","textureLoader","TextureLoader","materialLoader","MaterialLoader","loadTexture","path","repeat","wrap","anisotropy","setCrossOrigin","wrapS","RepeatWrapping","wrapT","MirroredRepeatWrapping","textures","blending","specular","emissive","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","emissiveMap","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","lightMap","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","aoMap","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","bumpMap","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","bumpScale","normalMap","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","normalScale","specularMap","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","metalnessMap","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","roughnessMap","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","alphaMap","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","setTextures","srcIn","_this","lastPlayPos","currentPlayPos","bufferingDetected","actualTime","currentTime","getVideoDuration","VideoTexture","minFilter","LinearFilter","magFilter","format","RGBFormat","isReadyToPlay","document","createElement","Points","isPointset","getCircularTexture","setSize","setSizeAttenuation","_inverseMatrix","_ray","Ray","_sphere","_position","_morphA","_tempA","PointsMaterial","updateMorphTargets","raycast","raycaster","intersects","matrixWorld","threshold","params","drawRange","ray","intersectsSphere","invert","localThreshold","localThresholdSq","isBufferGeometry","positionAttribute","morphPosition","end","calculatePosition","testPoint","morphTargetDictionary","rayPointDistanceSq","distanceSqToPoint","intersectPoint","closestPointToPoint","origin","near","far","distanceToRay","morphInfluences","influence","addScaledVector","sub","isLines","createLineSegment","line","LineSegments","setWidth","width","linewidth","_start","_end","Line","isLineSegments","_morphB","_tempB","LineBasicMaterial","vStart","vEnd","interSegment","interRay","step","distSq","distanceSqToSegment","faceIndex","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","canvas","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","height","onWindowResize","rect","getBoundingClientRect","left","top","target","getSize","initialiseVisualisation","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","scene","createScene","setCurrentScene","getCurrentScene","sceneIn","removeActiveScene","oldScene","setInteractiveControlEnable","setAdditionalScenesGroup","getSceneByName","new_scene","sceneName","resetView","viewAll","boundingBox2","viewAllWithBoundingBox","loadModelsURL","colours","opacities","loadViewURL","loadFromViewURL","jsonFilePrefix","updateDirectionalLight","runAnimation","requestAnimationFrame","cancelAnimationFrame","stopAnimate","stop","animate","Date","now","addPreRenderCallbackFunction","removePreRenderCallbackFunction","addPostRenderCallbackFunction","removePostRenderCallbackFunction","getPlayRate","setPlayRate","playRateIn","setMorphsTime","getZincGeometryByID","addToScene","addObject","addToOrthoScene","OrthographicCamera","createHUDSprites","imagewidth","imageheight","addLogo","ImageUtils","getDelta","renderGeometries","sceneItem","clearDepth","hasOwnProperty","getThreeJSRenderer","isSceneActive","addActiveScene","additionalScene","getThreeJSScene","clearAllActiveScene","clearAll","transitionScene","endingScene","currentCamera","getZincCameraControls","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","SceneLoader","SceneExporter","defaultMetadata","Duration","OriginalDuration","TimeStamps","defaultDuration","rendererIn","zincObjects","sceneLoader","minimap","directionalLight","ambient","zincCameraControls","stereoEffectFlag","stereoEffect","autoClearFlag","displayMinimap","minimapScissor","x_offset","y_offset","align","updateRequired","scissor","_markerTarget","getDownloadProgress","onResize","aspect","updateProjectionMatrix","changeZoomByScrollRateUnit","unit","setupCamera","PerspectiveCamera","AmbientLight","DirectionalLight","setDirectionalLight","Minimap","loadView","nearPlane","farPlane","eyePosition","targetPosition","upVector","viewPort","setDefaultCameraSettings","boundingBox1","viewport","setCurrentCameraSettings","forEachGeometry","forEachGlyphset","forEachPointset","forEachLine","findGeometriesWithGroupName","GroupName","geometriesArray","findPointsetsWithGroupName","pointsetsArray","findGlyphsetsWithGroupName","glyphsetsArray","findLinesWithGroupName","linesArray","findObjectsWithGroupName","objectsArray","findObjectsWithAnatomicalId","getBoundingBoxOfZincObjects","vectorToScreenXY","widthHalf","heightHalf","getObjectsScreenXY","getNamedObjectsScreenXY","addZincObject","calculateMaxAllowedDistance","loadGlyphsetURL","metaurl","glyphurl","loadPointsetURL","loadLinesURL","loadSTL","loadOBJ","loadMetadataURL","allCompletedCallback","loadGLTF","addZincGeometry","newGeometry","removeObject","pause","toBeDownloaded","setTime","myPlayRate","getWindowsPosition","renderer_width","renderer_height","includes","renderMinimap","setScissorTest","setScissor","setViewport","updateCamera","mask","clear","setPathDuration","setStereoEffectEnable","stereoFlag","objectIsInScene","alignBoundingBoxToCameraView","transitionTime","newVec1","newVec2","newVec3","crossVectors","angleTo","rotateCameraTransition","rotateAboutLookAtpoint","alignObjectToCameraView","setCameraTargetToObject","addVectors","isStereoEffectEnable","removeZincObject","getPickableThreeJSObjects","returnedObjects","getNormalisedMinimapCoordinates","event","offsetY","clientY","clientX","getMinimapDiffFromNormalised","getDiffFromNormalised","toBeDwonloaded","addMetadataTimeStamp","convertDurationObjectTomSec","getMetadataTag","getMetadata","setMetadataTag","removeMetadataTag","resetMetadata","resetDuration","convertDurationObjectToString","years","months","weeks","days","hours","mins","secs","setDurationFromObject","string","millisec","setOriginalDurationFromObject","exportGLTF","binary","exporter","STLLoader","OBJLoader","GLTFLoader","progressMap","viewLoaded","errorDownload","totalSize","totalLoaded","unknownFound","progress","xhr","loaded","total","xmlhttp","viewData","requestURL","number","filename","numberOfResources","linesloader","newLines","loadGlyphset","newGlyphset","myCallback","onLoadGlyphsetReady","pointsetloader","newPointset","objloader","traverse","child","zincGeometry","addMeshToZincGeometry","loadSurfaceURL","fileFormat","metaFinishCallback","numberOfDownloaded","downloadedItem","parseDuration","durationString","match","loadSettings","item","readPrimitivesItem","referenceURL","order","newURL","URL","href","Inline","FileFormat","AnatomicalId","compression","Type","newGeometryURL","GlyphGeometriesURL","DisplayLabels","readViewAndSettingsItem","substring","lastIndexOf","setPath","gltf","log","children","forEach","responseURL","numberOfObjects","GLTFExporter","Promise","resolve","pluginCallbacks","register","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","indexOf","unregister","input","onDone","GLTFWriter","plugins","setPlugins","write","WEBGL_CONSTANTS","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","UNSIGNED_INT","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","CLAMP_TO_EDGE","MIRRORED_REPEAT","REPEAT","THREE_TO_WEBGL","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","ClampToEdgeWrapping","PATH_PROPERTIES","quaternion","GLB_HEADER_BYTES","GLB_HEADER_MAGIC","GLB_VERSION","GLB_CHUNK_PREFIX_BYTES","GLB_CHUNK_TYPE_JSON","GLB_CHUNK_TYPE_BIN","equalArray","array1","array2","every","element","stringToArrayBuffer","window","TextEncoder","encode","ArrayBuffer","charCodeAt","isIdentityMatrix","getMinMax","output","POSITIVE_INFINITY","NEGATIVE_INFINITY","getY","getZ","getW","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","byteLength","cachedCanvas","pending","buffers","byteOffset","nodeMap","Map","skins","extensionsUsed","uids","uid","asset","cache","meshes","attributesNormalized","images","trs","onlyVisible","truncateDrawRange","embedImages","maxTextureSize","includeCustomExtensions","processInput","all","then","blob","Blob","extensionsUsedList","reader","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","DataView","setUint32","jsonChunk","stringify","jsonChunkPrefix","header","headerView","totalByteLength","glbBlob","glbReader","readAsDataURL","base64data","uri","serializeUserData","objectDef","gltfExtensions","extensionName","extensions","extras","message","getUID","has","isNormalizedNormalAttribute","abs","createNormalizedNormalAttribute","setX","setXYZ","applyTextureTransform","mapDef","didTransform","transformDef","toArray","rotation","processBuffer","processBufferView","componentType","bufferViews","componentSize","dataView","setFloat32","setUint16","setUint8","bufferViewDef","byteStride","processBufferViewImage","processAccessor","Error","end2","bufferViewTarget","minMax","bufferView","accessorDef","normalized","accessors","processImage","flipY","cachedImages","mimeType","RGBAFormat","imageDef","ctx","getContext","HTMLImageElement","HTMLCanvasElement","OffscreenCanvas","ImageBitmap","drawImage","Uint8ClampedArray","putImageData","ImageData","toBlob","bufferViewIndex","toDataURL","processSampler","samplers","samplerDef","processTexture","textureDef","sampler","_invokeAll","ext","writeTexture","processMaterial","isShaderMaterial","materialDef","pbrMetallicRoughness","isMeshStandardMaterial","isMeshBasicMaterial","baseColorFactor","metallicFactor","metalness","roughnessFactor","roughness","metalRoughMapDef","metallicRoughnessTexture","baseColorMapDef","baseColorTexture","emissiveIntensity","maxEmissiveComponent","emissiveFactor","emissiveMapDef","emissiveTexture","normalMapDef","normalTexture","occlusionMapDef","texCoord","aoMapIntensity","strength","occlusionTexture","alphaMode","alphaCutoff","doubleSided","writeMaterial","processMesh","meshCacheKeyParts","meshCacheKey","mode","isLineLoop","meshDef","primitives","targets","nameConversion","skinWeight","skinIndex","originalNormal","modifiedAttribute","attributeName","substr","toUpperCase","validVertexAttributes","accessor","weights","targetNames","reverseDictionary","warned","gltfAttributeName","baseAttribute","relativeAttribute","morphTargetsRelative","isMultiMaterial","primitive","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","values","times","interpolation","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","getInterpolation","InterpolateDiscrete","node","processSkin","nodes","rootJoint","joints","inverseBindMatrices","temporaryBoneInverse","boneInverses","multiply","bindMatrix","skin","processNode","nodeDef","translation","meshIndex","isCamera","nodeIndex","writeNode","processScene","scenes","sceneDef","processObjects","objects","beforeParse","objectsWithoutScene","afterParse","func","light","isLight","isDirectionalLight","isPointLight","isSpotLight","lightDef","intensity","spot","innerConeAngle","penumbra","outerConeAngle","decay","lights","isGLTFSpecularGlossinessMaterial","extensionDef","diffuseFactor","specularFactor","glossinessFactor","glossiness","diffuseTexture","specularMapDef","specularGlossinessTexture","insertKeyframe","valueSize","getValueSize","TimeBufferType","ValueBufferType","interpolant","evaluate","slice","mergedTracks","sourceTracks","sourceTrack","sourceTrackBinding","sourceTrackNode","propertyIndex","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","setInterpolation","InterpolateLinear","targetCount","targetIndex","mergedTrack","sourceInterpolant","keyframeIndex","MODE","NONE","DEFAULT","PATH","SMOOTH_CAMERA_TRANSITION","AUTO_TUMBLE","ROTATE_TRANSITION","MINIMAP","STATE","ROTATE","ZOOM","PAN","TOUCH_ROTATE","TOUCH_ZOOM","TOUCH_PAN","SCROLL","CLICK_ACTION","MAIN","AUXILIARY","SECONDARY","tumble_rate","pointer_x","pointer_y","pointer_x_start","pointer_y_start","previous_pointer_x","previous_pointer_y","near_plane_fly_debt","touchZoomDistanceStart","touchZoomDistanceEnd","scrollRate","cameraPath","numberOfCameraPoint","updateLightWithPathFlag","deviceOrientationControl","defaultViewport","currentMode","smoothCameraTransitionObject","rotateCameraTransitionObject","cameraAutoTumbleObject","mouseScroll","_state","zincRayCaster","targetTouchId","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","sceneSphere","_tempEye","maxDist","getBoundingSphere","currentDist","setMouseButtonAction","buttonName","actionName","checkTravelDistance","newDist","translateViewport","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","len","touches","dx","dy","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentWheelEvent","deltaY","stopImmediatePropagation","fact","unproject","getVectorsFromRotateAboutLookAtPoints","axis","dot","up","rel_eyea","rel_eyeb","rel_eyec","upa","upb","upc","cos_angle","cos","sin_angle","sin","returned_values","tumble","delta_x","delta_y","tangent_dist","phi","acos","PI","calculateZoomDelta","changeZoomByValue","dist","near_far_minimum_ratio","flyZoom","directionalLightIn","addEventListener","removeEventListener","loadPath","pathData","CameraPath","NumberOfPoints","loadPathURL","path_url","updateTime","getTime","timeIn","getNumberOfTimeFrame","getCurrentTimeFrame","setCurrentTimeFrame","targetTimeFrame","updatePath","time_frame","bot_pos","top_pos","calculatePathNow","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","getDefaultViewport","currentViewport","getDefaultEyePosition","getDefaultTargetPosition","RotateCameraTransition","pauseCameraTransition","stopCameraTransition","isTransitioningCamera","autoTumble","tumbleDirectionIn","tumbleRateIn","stopOnCameraInputIn","enableAutoTumble","stopAutoTumble","updateAutoTumble","requireUpdate","isAutoTumble","enableRaycaster","callbackFunctionIn","hoverCallbackFunctionIn","disableRaycaster","targetCameraIn","startingEyePosition","startingTargetPosition","startingUp","endingEyePosition","endingTargetPosition","endingUp","targetCamera","completed","newDuration","updateCameraSettings","axisIn","angleIn","previousTime","actualDelta","hostSceneIn","hoverCallbackFunction","Raycaster","mouse","lastHovered","cooldown","getIntersectsObject","zincCamera","threejsScene","setFromCamera","intersectObjects","hovered","setTimeout","awaitMove","tumbleAxis","computeTumbleAxisAngle","tumbleDirection","StereoCameraZoomFixed","cameraL","layers","cameraR","focus","zoom","eyeRight","eyeLeft","xmin","xmax","projectionMatrix","eyeSep","eyeSepOnProjection","ymax","DEG2RAD","_stereo","updateMatrixWorld","reorder","deviceOrientation","screenOrientation","onDeviceOrientationChangeEvent","onScreenOrientationChangeEvent","orientation","setObjectQuaternion","zee","euler","Euler","q0","Quaternion","q1","beta","gamma","orient","setFromEuler","setFromAxisAngle","applyQuaternion","connect","disconnect","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","reject","intersect","newCSG","subtract","terminateWorker","terminate","COPLANAR","FRONT","BACK","SPANNING","_length_i","polygon","polygons","Node","tree","Polygon","Vertex","Face4","calculateProperties","other_tree","clipTo","build","allPolygons","toGeometry","polygon_vertice_count","vertex_idx_a","vertex_idx_b","vertex_idx_c","verticeUvs","getInverse","polygon_count","vertice_dict","setFromRotationMatrix","vertice_count","flip","classifyVertex","side_value","classifySide","classification","num_positive","num_negative","splitPolygon","coplanar_front","coplanar_back","front","back","ti","tj","vi","vj","t","interpolate","scalar","lerp","other","e","divider","isConvex","temp","clipPolygons","self","geometryFromJSON","guest","hostCSG","setGeometry","prepareCSG","guestCSG","hostCSGs","setGlyphset","prepareCSGForGlyphs","store","glyphset","clippingPlanes"],"mappings":"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","file":"zinc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Zinc\"] = factory();\n\telse\n\t\troot[\"Zinc\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","require(\"url-polyfill\");\n\n/**\n * Provides a global namespace for the Zinc javascript library and some default parameters for it.\n * \n * @namespace\n * @author Alan Wu\n */\n\nconst Zinc = function() {\n this.Revision = \"0.40.0\";\n this.defaultMaterialColor = 0xFFFFFF;\n this.defaultOpacity = 1.0;\n this.modelPrefix = undefined;\n this.Geometry = require('./primitives/geometry').Geometry;\n this.Glyph = require('./primitives/glyph').Glyph;\n this.Glyphset = require('./primitives/glyphset').Glyphset;\n this.Pointset = require('./primitives/pointset').Pointset;\n this.Lines = require('./primitives/lines').Lines;\n this.Renderer = require('./renderer').Renderer;\n this.Scene = require('./scene').Scene;\n this.GeometryCSG = require('./geometryCSG').GeometryCSG;\n this.GlyphsetCSG = require('./glyphsetCSG').GlyphsetCSG;\n this.Viewport = require('./controls').Viewport;\n this.CameraControls = require('./controls').CameraControls;\n this.SmoothCameraTransition = require('./controls').SmoothCameraTransition;\n this.RayCaster = require('./controls').RayCaster;\n this.CameraAutoTumble = require('./controls').CameraAutoTumble;\n this.StereoEffect = require('./controls').StereoEffect;\n this.loadExternalFile = require('./utilities').loadExternalFile;\n this.loadExternalFiles = require('./utilities').loadExternalFiles;\n this.THREE = require('three'); \n \n};\n\nmodule.exports = new Zinc();\n","module.exports = require(\"url-polyfill\");","const THREE = require('three');\n\n/**\n * Provides an object which stores geometry and provides method which controls its animations.\n * This is created when a valid json file containging geometry is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Geometry}\n */\nconst Geometry = function () {\n (require('./zincObject').ZincObject).call(this);\n\t// THREE.Geometry or THREE.BufferGeometry\n\tthis.videoHandler = undefined;\n this.isGeometry = true;\n\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (this.geometry && this.morph && (geometryIn != undefined))\n\t\t\treturn;\n\t\t// First copy the geometry\n\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\n\t\tlet isTransparent = false;\n\t\tif (1.0 > options.opacity)\n\t\t\t isTransparent = true;\n\n\t\tlet material = undefined;\n\t\tif (geometry._video === undefined) {\n\t\t\tif (materialIn) {\n\t\t\t\tmaterial = materialIn;\n\t\t\t\tmaterial.morphTargets = options.localTimeEnabled;\n\t\t\t\tmaterial.morphNormals = options.localTimeEnabled;\n\t\t\t} else {\n\t\t\t\tif (geometry instanceof THREE.BufferGeometry && geometry.attributes.color === undefined) {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tmaterial = new THREE.MeshPhongMaterial({\n\t\t\t\t\t\tcolor : options.colour,\n\t\t\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\t\t\tmorphNormals : options.localTimeEnabled,\n\t\t\t\t\t\tvertexColors : THREE.VertexColors,\n\t\t\t\t\t\ttransparent : isTransparent,\n\t\t\t\t\t\topacity : options.opacity,\n\t\t\t\t\t\tside : THREE.DoubleSide\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t//material = PhongToToon(material);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ]) {\n\t\t\t\tmaterial.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n\t\t\t}\n\t\t} else {\n\t\t\tlet videoTexture = geometry._video.createCanvasVideoTexture();\n\t\t\tmaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tmorphTargets : options.localTimeEnabled,\n\t\t\t\tcolor : new THREE.Color(1, 1, 1),\n\t\t\t\ttransparent : isTransparent,\n\t\t\t\topacity : options.opacity,\n\t\t\t\tmap : videoTexture,\n\t\t\t\tside : THREE.DoubleSide\n\t\t\t});\n\t\t\tthis.videoHandler = geometry._video;\n\t\t}\n\t\tlet mesh = new THREE.Mesh(geometry, material); \n\t\tthis.setMesh(mesh, options.localTimeEnabled, options.localMorphColour);\n\t}\n\t\n\tthis.calculateUVs = () => {\n\t\tthis.geometry.computeBoundingBox();\n\t\tconst max = this.geometry.boundingBox.max, min = this.geometry.boundingBox.min;\n\t\tconst offset = new THREE.Vector2(0 - min.x, 0 - min.y);\n\t\tconst range = new THREE.Vector2(max.x - min.x, max.y - min.y);\n\t\tthis.geometry.faceVertexUvs[0] = [];\n\t\tfor (let i = 0; i < this.geometry.faces.length ; i++) {\n\t\t const v1 = this.geometry.vertices[this.geometry.faces[i].a];\n\t\t const v2 = this.geometry.vertices[this.geometry.faces[i].b];\n\t\t const v3 = this.geometry.vertices[this.geometry.faces[i].c];\n\t\t geometry.faceVertexUvs[0].push(\n\t\t [\n\t\t new THREE.Vector2((v1.x + offset.x)/range.x ,(v1.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v2.x + offset.x)/range.x ,(v2.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v3.x + offset.x)/range.x ,(v3.y + offset.y)/range.y)\n\t\t ]);\n\t\t}\n\t\tgeometry.uvsNeedUpdate = true;\t\n\t}\n\t\n\t/**\n\t * Set wireframe display for this geometry.\n\t * \n\t * @param {Boolean} wireframe - Flag to turn on/off wireframe display.\n\t */\n\tthis.setWireframe = wireframe => {\n\t\tthis.morph.material.wireframe = wireframe;\n\t}\n\t\n}\n\nGeometry.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Geometry = Geometry;\n","module.exports = require(\"three\");","const THREE = require('three');\nconst THREEGeometry = require('../three/Geometry').Geometry;\n\nconst ZincObject = function() {\n this.isZincObject = true;\n this.geometry = undefined;\n // THREE.Mesh\n this.morph = undefined;\n // THREE.Mesh - for utilities purpose such as rendering \n // transparent surfaces - one for front face and one for back face.\n this.secondaryMesh = undefined;\n /**\n\t * Groupname given to this geometry.\n\t */\n this.groupName = undefined;\n this.timeEnabled = false;\n this.morphColour = false;\n this.inbuildTime = 0;\n this.mixer = undefined;\n this.animationGroup = undefined;\n\t/**\n\t * Total duration of the animation, this value interacts with the \n\t * {@link Zinc.Renderer#playRate} to produce the actual duration of the\n\t * animation. Actual time in second = duration / playRate.\n\t */\n this.duration = 6000;\n this.clipAction = undefined;\n this.userData = [];\n this.videoHandler = undefined;\n this.marker = undefined;\n this.markerUpdateRequired = true;\n this.markerVertexIndex = -1;\n this.boundingBoxUpdateRequired = true;\n this.cachedBoundingBox = new THREE.Box3();\n this._vertex = new THREE.Vector3();\n this.anatomicalId = undefined;\n}\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.toBufferGeometry = function(geometryIn, options) {\n let geometry = undefined;\n if (geometryIn instanceof THREEGeometry) {\n if (options.localTimeEnabled && (geometryIn.morphNormals == undefined || geometryIn.morphNormals.length == 0))\n geometryIn.computeMorphNormals();\n geometry = geometryIn.toIndexedBufferGeometry();\n if (options.localMorphColour)\n require(\"../utilities\").copyMorphColorsToIndexedBufferGeometry(geometryIn, geometry);\n } else if (geometryIn instanceof THREE.BufferGeometry) {\n geometry = geometryIn.clone();\n }\n geometry.colorsNeedUpdate = true;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n if (geometryIn._video)\n geometry._video = geometryIn._video;\n return geometry;\n}\n\nZincObject.prototype.checkAndCreateTransparentMesh = function(options) {\n if (this.isGeometry && this.morph.material && this.morph.material.transparent) {\n if (!this.secondaryMesh) {\n let secondaryMaterial = this.morph.material.clone();\n secondaryMaterial.side = THREE.FrontSide;\n this.secondaryMesh = new THREE.Mesh(this.morph.geometry, secondaryMaterial);\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n this.secondaryMesh.userData = this;\n this.secondaryMesh.name = this.groupName;\n }\n this.morph.material.side = THREE.BackSide;\n this.morph.material.needsUpdate = true;\n this.morph.add(this.secondaryMesh);\n this.animationGroup.add(this.secondaryMesh);\n }\n}\n\nZincObject.prototype.checkAndRemoveTransparentMesh = function() {\n if (this.isGeometry && this.secondaryMesh) {\n this.morph.remove(this.secondaryMesh);\n this.animationGroup.uncache(this.secondaryMesh);\n this.animationGroup.remove(this.secondaryMesh);\n }\n this.morph.material.side = THREE.DoubleSide;\n}\n\nZincObject.prototype.setMesh = function(mesh, localTimeEnabled, localMorphColour) {\n this.animationGroup = new THREE.AnimationObjectGroup(mesh);\n this.mixer = new THREE.AnimationMixer(this.animationGroup);\n this.geometry = mesh.geometry;\n this.clipAction = undefined;\n if (this.geometry && this.geometry.morphAttributes && this.geometry.morphAttributes.position) {\n let animationClip = THREE.AnimationClip.CreateClipsFromMorphTargetSequences(\n this.geometry.morphAttributes.position, 10, true);\n if (animationClip && (animationClip[0] != undefined)) {\n this.clipAction = this.mixer.clipAction(animationClip[0]).setDuration(\n this.duration);\n this.clipAction.loop = THREE.loopOnce;\n this.clipAction.clampWhenFinished = true;\n this.clipAction.play();\n }\n }\n this.timeEnabled = localTimeEnabled;\n this.morphColour = localMorphColour;\n this.morph = mesh;\n this.morph.userData = this;\n this.morph.matrixAutoUpdate = false;\n this.checkAndCreateTransparentMesh();\n if (this.timeEnabled) {\n this.setFrustumCulled(false);\n }\n this.boundingBoxUpdateRequired = true;\n}\n\nZincObject.prototype.setName = function(groupNameIn) {\n this.groupName = groupNameIn;\n if (this.morph) {\n this.morph.name = this.groupName;\n }\n if (this.secondaryMesh) {\n this.secondaryMesh.name = this.groupName;\n }\n}\n\n/**\n * Get the local time of this geometry, it returns a value between \n * 0 and the duration.\n * \n * @return {Number}\n */\nZincObject.prototype.getCurrentTime = function() {\n if (this.clipAction) {\n const ratio = this.clipAction.time / this.clipAction._clip.duration;\n return this.duration * ratio;\n } else {\n return this.inbuildTime;\n }\n}\n\nconst updateMorphColorAttribute = function(targetGeometry, morph) {\n if (morph && targetGeometry.morphAttributes[ \"color\" ]) {\n const morphColors = targetGeometry.morphAttributes[ \"color\" ];\n const influences = morph.morphTargetInfluences;\n const length = influences.length;\n targetGeometry.deleteAttribute( 'morphColor0' );\n targetGeometry.deleteAttribute( 'morphColor1' );\n let bound = 0;\n let morphArray = [];\n for (let i = 0; (1 > bound) || (i < length); i++) {\n if (influences[i] > 0) {\n bound++;\n morphArray.push([i, influences[i]]);\n }\n }\n if (morphArray.length == 2) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[1][0] ] );\n } else if (morphArray.length == 1) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[0][0] ] );\n }\n }\n}\n\n/**\n * Set the local time of this geometry.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\nZincObject.prototype.setMorphTime = function(time) {\n let timeChanged = false;\n if (this.clipAction) {\n const ratio = time / this.duration;\n const actualDuration = this.clipAction._clip.duration;\n let newTime = ratio * actualDuration;\n if (newTime != this.clipAction.time) {\n this.clipAction.time = newTime;\n timeChanged = true;\n }\n if (timeChanged && this.timeEnabled == 1)\n this.mixer.update( 0.0 );\n } else {\n let newTime = time; \n if (time > this.duration)\n newTime = this.duration;\n else if (0 > time)\n newTime = 0;\n else\n newTime = time;\n if (newTime != this.inbuildTime) {\n this.inbuildTime = newTime;\n timeChanged = true;\n }\n }\n if (timeChanged) {\n this.boundingBoxUpdateRequired = true;\n updateMorphColorAttribute(this.geometry, this.morph);\n if (this.timeEnabled)\n this.markerUpdateRequired = true;\n }\n}\n\n/**\n * Check if the geometry is time varying.\n * \n * @return {Boolean}\n */\nZincObject.prototype.isTimeVarying = function() {\n if (this.timeEnabled || this.morphColour)\n return true;\n return false;\n}\n\n/**\n * Get the visibility of this Geometry.\n * \n */\nZincObject.prototype.getVisibility = function() {\n return this.morph.visible;\n}\n\n/**\n * Set the visibility of this Geometry.\n * \n * @param {Boolean} visible - a boolean flag indicate the visibility to be set \n */\nZincObject.prototype.setVisibility = function(visible) {\n this.morph.visible = visible;\n}\n\n/**\n * Set the opacity of this Geometry. This function will also set the isTransparent\n * flag according to the provided alpha value.\n * \n * @param {Number} alpah - Alpha value to set for this geometry, \n * can be any value between from 0 to 1.0.\n */\nZincObject.prototype.setAlpha = function(alpha) {\n const material = this.morph.material;\n let isTransparent = false;\n if (alpha < 1.0)\n isTransparent = true;\n let transparentChanged = material.transparent == isTransparent ? false : true;\n material.opacity = alpha;\n material.transparent = isTransparent;\n if (transparentChanged)\n if (isTransparent)\n this.checkAndCreateTransparentMesh();\n else\n this.checkAndRemoveTransparentMesh();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.opacity = alpha;\n}\n\nZincObject.prototype.setFrustumCulled = function(flag) {\n if (this.morph) {\n this.morph.frustumCulled = flag;\n }\n}\n\nZincObject.prototype.setVertexColors = function(vertexColors) {\n this.morph.material.vertexColors = vertexColors;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.vertexColors = vertexColors;\n}\n\n/**\n * Set the colour of the geometry.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.getColour = function(colour) {\n if (this.morph && this.morph.material)\n return this.morph.material.color;\n\treturn undefined;\n}\n \n/**\n * Set the colour of the geometry.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.setColour = function(colour) {\n this.morph.material.color = colour;\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n}\n\nZincObject.prototype.getColourHex = function() {\n if (!this.morphColour)\n return this.morph.material.color.getHexString();\n return undefined;\n}\n\nZincObject.prototype.setColourHex = function(hex) {\n this.morph.material.color.setHex(hex);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.setHex(hex);\n}\n\n/**\n * Set the material of the geometry.\n * \n * @param {THREE.Material} material - Material to be set for this geometry.\n */\nZincObject.prototype.setMaterial = function(material) {\n this.morph.material = material;\n this.geometry.colorsNeedUpdate = true;\n if (this.secondaryMesh && this.secondaryMesh.material) {\n this.secondaryMesh.material.dispose();\n this.secondaryMesh.material = material.clone()\n this.secondaryMesh.material.side = THREE.FrontSide;\n }\n}\n\n/**\n * Get the index of the closest vertex to centroid.\n */\nZincObject.prototype.getClosestVertexIndex = function() {\n let closestIndex = -1;\n if (this.morph) {\n let position = this.morph.geometry.attributes.position;\n let boundingBox = new THREE.Box3().setFromBufferAttribute(position);\n let center = new THREE.Vector3();\n boundingBox.getCenter(center);\n if (position && boundingBox) {\n let distance = -1;\n let currentDistance = 0;\n let current = new THREE.Vector3();\n for (let i = 0; i < position.count; i++) {\n current.fromArray(position.array, i * 3);\n currentDistance = current.distanceTo(center);\n if (distance == -1)\n distance = currentDistance;\n else if (distance > (currentDistance)) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n }\n return closestIndex;\n}\n\n/**\n * Get the closest vertex to centroid.\n */\nZincObject.prototype.getClosestVertex = function() {\n let position = new THREE.Vector3();\n if (this.markerVertexIndex == -1) {\n this.markerVertexIndex = this.getClosestVertexIndex();\n }\n if (this.markerVertexIndex >= 0) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = this.morph.geometry.morphAttributes;\n if (influences && attributes && attributes.position) {\n let found = false;\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n this._vertex.fromArray(\n attributes.position[i].array, this.markerVertexIndex * 3);\n position.add(this._vertex.multiplyScalar(influences[i]));\n }\n }\n if (found)\n return position;\n } else {\n position.fromArray(this.morph.geometry.attributes.position.array,\n this.markerVertexIndex * 3);\n return position;\n }\n }\n this.getBoundingBox().getCenter(position);\n return position;\n}\n\n/**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\nZincObject.prototype.getBoundingBox = function() {\n if (this.morph && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n let influences = this.morph.morphTargetInfluences;\n let attributes = undefined;\n if (this.morph.geometry)\n attributes = this.morph.geometry.morphAttributes;\n let found = false;\n if (influences && attributes && attributes.position) {\n let min = new THREE.Vector3();\n let max = new THREE.Vector3();\n let box = new THREE.Box3();\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n box.setFromArray(attributes.position[i].array);\n min.add(box.min.multiplyScalar(influences[i]));\n max.add(box.max.multiplyScalar(influences[i]));\n }\n }\n if (found)\n this.cachedBoundingBox.set(min, max);\n }\n if (!found)\n this.cachedBoundingBox.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n}\n\n/**\n * Clear this geometry and free the memory.\n */\nZincObject.prototype.dispose = function() {\n if (this.morph && this.morph.geometry)\n this.morph.geometry.dispose();\n if (this.morph && this.morph.material)\n this.morph.material.dispose();\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.dispose();\n if (this.geometry)\n this.geometry.dispose();\n this.animationGroup = undefined;\n this.mixer = undefined;\n this.morph = undefined;\n this.clipAction = undefined;\n this.groupName = undefined;\n}\n\nZincObject.prototype.updateMarker = function(playAnimation, options) {\n if ((playAnimation == false) &&\n (options && options.displayMarkers))\n {\n if (this.groupName) {\n if (!this.marker) {\n this.marker = new (require(\"./marker\").Marker)(this);\n this.markerUpdateRequired = true;\n }\n if (this.markerUpdateRequired) {\n let position = this.getClosestVertex();\n if (position) {\n this.marker.setPosition(position.x, position.y, position.z);\n this.markerUpdateRequired = false;\n }\n }\n if (options && options.camera && options.markerDepths) {\n options.markerDepths.push(\n this.marker.updateNDC(options.camera.cameraObject));\n }\n if (!this.marker.isEnabled()) {\n this.marker.enable();\n this.morph.add(this.marker.morph);\n }\n }\n } else {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.disable();\n this.morph.remove(this.marker.morph);\n }\n this.markerUpdateRequired = true;\n }\n}\n\nZincObject.prototype.processMarkerVisual = function(min, max) {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.updateVisual(min, max);\n }\n}\n\nZincObject.prototype.initiateMorphColor = function() {\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true))) {\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n}\n\nZincObject.prototype.setRenderOrder = function(renderOrder) {\n if (this.morph && (renderOrder !== undefined)) {\n this.morph.renderOrder = renderOrder;\n if (this.secondaryMesh)\n this.secondaryMesh.renderOrder = this.morph.renderOrder + 1;\n\n }\n}\n\n//Update the geometry and colours depending on the morph.\nZincObject.prototype.render = function(delta, playAnimation, options) {\n if (playAnimation == true)\n {\n if ((this.clipAction) && (this.timeEnabled == 1)) {\n this.mixer.update( delta );\n }\n else {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n }\n if (delta != 0) {\n this.boundingBoxUpdateRequired = true;\n if ((this.morphColour == 1) && (typeof this.geometry !== \"undefined\") &&\n ((this.morph.material.vertexColors == THREE.VertexColors) ||\n (this.morph.material.vertexColors == true)))\n updateMorphColorAttribute(this.geometry, this.morph);\n }\n }\n this.updateMarker(playAnimation, options);\n}\n\nexports.ZincObject = ZincObject;\n","import {\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tEventDispatcher,\n\tFloat32BufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tMathUtils,\n\tObject3D,\n\tSphere,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _m1 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\n\nfunction Geometry() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n this.normals = [];\n this.uvs = [];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\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\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\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\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 const morphNormal = this.morphNormals[ i ];\n\n const attribute = new Float32BufferAttribute( morphTarget.normals.length * 3, 3 );\n attribute.name = morphNormal.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 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\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 ( 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 < morphColor.colors.length * 3; j ++ ) {\n let color = getColorsRGB(morphColor.colors, j);\n colorArray.push(color[0], color[1], color[2]);\n }\n var attribute = new THREE.Float32BufferAttribute( colorArray.length * 3, 3 );\n attribute.name = morphColor.name;\n array.push( attribute.copyArray( colorArray ) );\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 /**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\n this.getBoundingBox = function() {\n if (this.morph)\n return new THREE.Box3().setFromObject(\n this.morph);\n return undefined;\n }\n\n\t/**\n\t * Set the transformation of this glyph.\n\t * @param {Array} position - Three components vectors containing position of the\n\t * transformation.\n\t * @param {Array} axis1 - Three components vectors containing axis1 rotation of the\n\t * transformation.\n\t * @param {Array} axis2 - Three components vectors containing axis2 rotation of the\n\t * transformation.\n\t * @param {Array} position - Three components vectors containing axis3 rotation of the\n\t * transformation.\n\t */\n\tthis.setTransformation = (position, axis1, axis2, axis3) => {\n if (this.morph) {\n this.morph.matrix.elements[0] = axis1[0];\n this.morph.matrix.elements[1] = axis1[1];\n this.morph.matrix.elements[2] = axis1[2];\n this.morph.matrix.elements[3] = 0.0;\n this.morph.matrix.elements[4] = axis2[0];\n this.morph.matrix.elements[5] = axis2[1];\n this.morph.matrix.elements[6] = axis2[2];\n this.morph.matrix.elements[7] = 0.0;\n this.morph.matrix.elements[8] = axis3[0];\n this.morph.matrix.elements[9] = axis3[1];\n this.morph.matrix.elements[10] = axis3[2];\n this.morph.matrix.elements[11] = 0.0;\n this.morph.matrix.elements[12] = position[0];\n this.morph.matrix.elements[13] = position[1];\n this.morph.matrix.elements[14] = position[2];\n this.morph.matrix.elements[15] = 1.0;\n this.morph.matrixAutoUpdate = false;\n }\n\t\tif (label)\n\t\t label.setPosition(position[0], position[1], position[2]);\n\t}\n \n this.setColour = (color) => {\n if (label)\n label.setColour(color);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n this.geometry.colorsNeedUpdate = true;\n }\n\n\t/**\n\t * Clear and free its memory.\n\t */\n\tthis.dispose = () => {\n\t if (this.material)\n\t this.material.dispose();\n\t\tthis.morph = undefined;\n\t}\n}\n\nGlyph.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyph = Glyph;\n","const SpriteText = require('three-spritetext').default;\n\nexports.Label = function ( textIn, colour ) {\n let text = textIn;\n let sprite = undefined;\n if (colour)\n sprite = new SpriteText(text, 0.015, colour.getStyle());\n else\n sprite = new SpriteText(text, 0.015);\n sprite.material.sizeAttenuation = false;\n sprite.center.x = -0.05;\n sprite.center.y = 0;\n\n this.getPosition = () => {\n\t if (sprite)\n\t\t return [sprite.position.x, sprite.position.y, sprite.position.z];\n\t return [0, 0, 0];\n }\n \n//now set the position at the correct 3D space \n this.setPosition = (x, y, z) => {\n if (sprite)\n sprite.position.set(x, y, z);\n }\n\n this.setColour = colour => {\n sprite.color = colour.getStyle();\n }\n \n //scale up the texture\n this.setScale = scaling => {\n if (sprite && scaling > 0.0) \n sprite.scale.set( scaling, scaling, 1.0 );\n }\n \n this.dispose = () => {\n sprite.dispose();\n }\n \n this.getSprite = () => {\n return sprite;\n }\n \n this.getString = () => {\n\t return text;\n }\n\n};\n\n\n\n","module.exports = require(\"three-spritetext\");","const THREE = require('three');\nconst JSONLoader = require('../loader').JSONLoader;\n\n/**\n * This is a container of {@link Zinc.Glyph} and their graphical properties \n * including transformations, colors, number of time steps, duration of animations\n * and group name. Please note that all glyphs in the glyphset share the same geometry\n * however they may have different transformations.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Glyphset}\n */\nconst Glyphset = function () {\n (require('./zincObject').ZincObject).call(this);\n const glyphList = [];\n let axis1s = undefined;\n let axis2s = undefined;\n let axis3s = undefined;\n let positions = undefined;\n let scales = undefined;\n let colors = undefined;\n let labels = undefined;\n let numberOfTimeSteps = 0;\n let numberOfVertices = 0;\n let baseSize = [0, 0, 0];\n let offset = [0, 0, 0];\n let scaleFactors = [0, 0, 0];\n let repeat_mode = \"NONE\";\n this.ready = false;\n let morphColours = false;\n let morphVertices = false;\n this.isGlyphset = true;\n let _transformMatrix = new THREE.Matrix4();\n const _bot_colour = new THREE.Color();\n const _top_colour = new THREE.Color();\n const _boundingBox1 = new THREE.Box3();\n const _boundingBox2 = new THREE.Box3();\n const _boundingBox3 = new THREE.Box3();\n const _points = [];\n for (let i = 0; i < 8; i++) {\n _points[i] = new THREE.Vector3();\n }\n\n\t/**\n\t * Get the {@link Three.Group} containing all of the glyphs' meshes.\n\t * @returns {Three.Group}\n\t */\n this.getGroup = () => {\n return this.morph;\n }\n\n\t/**\n\t * Copy glyphset data into this glyphset then load the glyph's geoemtry \n\t * with the provided glyphURL. FinishCallback will be called once\n\t * glyph is loaded.\n\t * \n\t * @param {Array} glyphsetData - contains the informations about the glyphs.\n\t * @param {String} glyphURL - URL to the geometry which will be applied to all\n\t * all the glyphs in the glyphset once loaded.\n\t * @param {Function} finishCallback - User's function to be called once glyph's\n\t * geometry is loaded.\n\t */\n this.load = (glyphsetData, glyphURL, finishCallback, isInline, displayLabels) => {\n axis1s = glyphsetData.axis1;\n axis2s = glyphsetData.axis2;\n axis3s = glyphsetData.axis3;\n positions = glyphsetData.positions;\n scales = glyphsetData.scale;\n colors = glyphsetData.colors;\n labels = glyphsetData.label;\n morphColours = glyphsetData.metadata.MorphColours;\n morphVertices = glyphsetData.metadata.MorphVertices;\n numberOfTimeSteps = glyphsetData.metadata.number_of_time_steps;\n repeat_mode = glyphsetData.metadata.repeat_mode;\n numberOfVertices = glyphsetData.metadata.number_of_vertices;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfVertices = numberOfVertices * 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfVertices = numberOfVertices * 3;\n baseSize = glyphsetData.metadata.base_size;\n offset = glyphsetData.metadata.offset;\n scaleFactors = glyphsetData.metadata.scale_factors;\n const loader = new JSONLoader();\n this.geometry = new THREE.BufferGeometry();\n this.morph = new THREE.InstancedMesh(this.geometry, undefined, numberOfVertices);\n if (isInline) {\n var object = loader.parse(glyphURL);\n (meshloader(finishCallback, displayLabels))(object.geometry, object.materials);\n object.geometry.dispose();\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(glyphURL, meshloader(finishCallback, displayLabels));\n }\n }\n\n\t/**\n\t * Calculate the actual transformation value that can be applied \n\t * to the transformation matrix.\n\t * @returns {Array}\n\t */\n const resolve_glyph_axes = (point, axis1, axis2, axis3, scale) => {\n const return_arrays = [];\n if (repeat_mode == \"NONE\" || repeat_mode == \"MIRROR\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n const mirrored_axis1 = [0.0, 0.0, 0.0];\n const mirrored_axis2 = [0.0, 0.0, 0.0];\n const mirrored_axis3 = [0.0, 0.0, 0.0];\n const mirrored_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[j] + scale[j] * scaleFactors[j];\n }\n for (var j = 0; j < 3; j++) {\n final_axis1[j] = axis1[j] * axis_scale[0];\n final_axis2[j] = axis2[j] * axis_scale[1];\n final_axis3[j] = axis3[j] * axis_scale[2];\n final_point[j] = point[j]\n + offset[0] * final_axis1[j]\n + offset[1] * final_axis2[j]\n + offset[2] * final_axis3[j];\n if (repeat_mode == \"MIRROR\") {\n mirrored_axis1[j] = -final_axis1[j];\n mirrored_axis2[j] = -final_axis2[j];\n mirrored_axis3[j] = -final_axis3[j];\n mirrored_point[j] = final_point[j];\n if (scale[0] < 0.0) {\n // shift glyph origin to end of axis1 \n final_point[j] -= final_axis1[j];\n mirrored_point[j] -= mirrored_axis1[j];\n }\n }\n }\n /* if required, reverse axis3 to maintain right-handed coordinate system */\n if (0.0 > (\n final_axis3[0] * (final_axis1[1] * final_axis2[2] -\n final_axis1[2] * final_axis2[1]) +\n final_axis3[1] * (final_axis1[2] * final_axis2[0] -\n final_axis1[0] * final_axis2[2]) +\n final_axis3[2] * (final_axis1[0] * final_axis2[1] -\n final_axis1[1] * final_axis2[0]))) {\n final_axis3[0] = -final_axis3[0];\n final_axis3[1] = -final_axis3[1];\n final_axis3[2] = -final_axis3[2];\n }\n return_arrays.push([final_point, final_axis1, final_axis2, final_axis3]);\n if (repeat_mode == \"MIRROR\") {\n if (0.0 > (\n mirrored_axis3[0] * (mirrored_axis1[1] * mirrored_axis2[2] -\n mirrored_axis1[2] * mirrored_axis2[1]) +\n mirrored_axis3[1] * (mirrored_axis1[2] * mirrored_axis2[0] -\n mirrored_axis1[0] * mirrored_axis2[2]) +\n mirrored_axis3[2] * (mirrored_axis1[0] * mirrored_axis2[1] -\n mirrored_axis1[1] * mirrored_axis2[0]))) {\n mirrored_axis3[0] = -mirrored_axis3[0];\n mirrored_axis3[1] = -mirrored_axis3[1];\n mirrored_axis3[2] = -mirrored_axis3[2];\n }\n return_arrays.push([mirrored_point, mirrored_axis1, mirrored_axis2, mirrored_axis3]);\n }\n }\n else if (repeat_mode == \"AXES_2D\" || repeat_mode == \"AXES_3D\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = sign * baseSize[0] + scale[j] * scaleFactors[0];\n }\n for (var j = 0; j < 3; j++) {\n final_point[j] = point[j]\n + offset[0] * axis_scale[0] * axis1[j]\n + offset[1] * axis_scale[1] * axis2[j]\n + offset[2] * axis_scale[2] * axis3[j];\n }\n const number_of_glyphs = (glyph_repeat_mode == \"AXES_2D\") ? 2 : 3;\n for (let k = 0; k < number_of_glyphs; k++) {\n let use_axis1, use_axis2;\n const use_scale = scale[k];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n if (k == 0) {\n use_axis1 = axis1;\n use_axis2 = axis2;\n }\n else if (k == 1) {\n use_axis1 = axis2;\n use_axis2 = (glyph_repeat_mode == \"AXES_2D\") ? axis1 : axis3;\n }\n else // if (k == 2)\n {\n use_axis1 = axis3;\n use_axis2 = axis1;\n }\n const final_scale1 = baseSize[0] + use_scale * scaleFactors[0];\n final_axis1[0] = use_axis1[0] * final_scale1;\n final_axis1[1] = use_axis1[1] * final_scale1;\n final_axis1[2] = use_axis1[2] * final_scale1;\n final_axis3[0] = final_axis1[1] * use_axis2[2] - use_axis2[1] * final_axis1[2];\n final_axis3[1] = final_axis1[2] * use_axis2[0] - use_axis2[2] * final_axis1[0];\n final_axis3[2] = final_axis1[0] * use_axis2[1] - final_axis1[1] * use_axis2[0];\n let magnitude = Math.sqrt(final_axis3[0] * final_axis3[0] + final_axis3[1] * final_axis3[1] + final_axis3[2] * final_axis3[2]);\n if (0.0 < magnitude) {\n let scaling = (baseSize[2] + use_scale * scaleFactors[2]) / magnitude;\n if ((repeat_mode == \"AXES_2D\") && (k > 0)) {\n scaling *= -1.0;\n }\n final_axis3[0] *= scaling;\n final_axis3[1] *= scaling;\n final_axis3[2] *= scaling;\n }\n\n final_axis2[0] = final_axis3[1] * final_axis1[2] - final_axis1[1] * final_axis3[2];\n final_axis2[1] = final_axis3[2] * final_axis1[0] - final_axis1[2] * final_axis3[0];\n final_axis2[2] = final_axis3[0] * final_axis1[1] - final_axis3[1] * final_axis1[0];\n magnitude = Math.sqrt(final_axis2[0] * final_axis2[0] + final_axis2[1] * final_axis2[1] + final_axis2[2] * final_axis2[2]);\n if (0.0 < magnitude) {\n var scaling = (baseSize[1] + use_scale * scaleFactors[1]) / magnitude;\n final_axis2[0] *= scaling;\n final_axis2[1] *= scaling;\n final_axis2[2] *= scaling;\n }\n return_arrays.push([final_point, final_axis1, final_axis2, final_axis3])\n }\n }\n return return_arrays;\n };\n\n\t/**\n\t * Update transformation for each of the glyph in this glyphset.\n\t */\n const updateGlyphsetTransformation = (\n current_positions,\n current_axis1s,\n current_axis2s,\n current_axis3s,\n current_scales\n ) => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfPositions = current_positions.length / 3;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n const current_position = [current_positions[current_index], current_positions[current_index + 1],\n current_positions[current_index + 2]];\n const current_axis1 = [current_axis1s[current_index], current_axis1s[current_index + 1],\n current_axis1s[current_index + 2]];\n const current_axis2 = [current_axis2s[current_index], current_axis2s[current_index + 1],\n current_axis2s[current_index + 2]];\n const current_axis3 = [current_axis3s[current_index], current_axis3s[current_index + 1],\n current_axis3s[current_index + 2]];\n const current_scale = [current_scales[current_index], current_scales[current_index + 1],\n current_scales[current_index + 2]];\n const arrays = resolve_glyph_axes(current_position, current_axis1, current_axis2,\n current_axis3, current_scale);\n if (arrays.length == numberOfGlyphs) {\n for (let j = 0; j < numberOfGlyphs; j++) {\n _transformMatrix.elements[0] = arrays[j][1][0];\n _transformMatrix.elements[1] = arrays[j][1][1];\n _transformMatrix.elements[2] = arrays[j][1][2];\n _transformMatrix.elements[3] = 0.0;\n _transformMatrix.elements[4] = arrays[j][2][0];\n _transformMatrix.elements[5] = arrays[j][2][1];\n _transformMatrix.elements[6] = arrays[j][2][2];\n _transformMatrix.elements[7] = 0.0;\n _transformMatrix.elements[8] = arrays[j][3][0];\n _transformMatrix.elements[9] = arrays[j][3][1];\n _transformMatrix.elements[10] = arrays[j][3][2];\n _transformMatrix.elements[11] = 0.0;\n _transformMatrix.elements[12] = arrays[j][0][0];\n _transformMatrix.elements[13] = arrays[j][0][1];\n _transformMatrix.elements[14] = arrays[j][0][2];\n _transformMatrix.elements[15] = 1.0;\n this.morph.setMatrixAt(current_glyph_index, _transformMatrix);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setTransformation(arrays[j][0], arrays[j][1],\n arrays[j][2], arrays[j][3]);\n current_glyph_index++;\n }\n }\n }\n this.morph.instanceMatrix.needsUpdate = true;\n };\n\n\t/**\n\t * Update colour for each of the glyph in this glyphset.\n\t */\n const updateGlyphsetHexColors = current_colors => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfColours = current_colors.length;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfColours; i++) {\n const hex_values = current_colors[i];\n for (let j = 0; j < numberOfGlyphs; j++) {\n _bot_colour.setHex(hex_values)\n this.morph.setColorAt(current_glyph_index, _bot_colour);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setColour(_bot_colour);\n current_glyph_index++;\n }\n }\n this.morph.instanceColor.needsUpdate = true;\n };\n\n\t/**\n\t * Update the current states of the glyphs in this glyphset, this includes transformation and\n\t * colour for each of them. This is called when glyphset and glyphs are initialised and whenever\n\t * the internal time has been updated.\n\t */\n const updateMorphGlyphsets = () => {\n let current_positions = [];\n let current_axis1s = [];\n let current_axis2s = [];\n let current_axis3s = [];\n let current_scales = [];\n let current_colors = [];\n const current_time = this.inbuildTime / this.duration * (numberOfTimeSteps - 1);\n const bottom_frame = Math.floor(current_time);\n const proportion = 1 - (current_time - bottom_frame);\n const top_frame = Math.ceil(current_time);\n if (morphVertices) {\n const bottom_positions = positions[bottom_frame.toString()];\n const top_positions = positions[top_frame.toString()];\n const bottom_axis1 = axis1s[bottom_frame.toString()];\n const top_axis1 = axis1s[top_frame.toString()];\n const bottom_axis2 = axis2s[bottom_frame.toString()];\n const top_axis2 = axis2s[top_frame.toString()];\n const bottom_axis3 = axis3s[bottom_frame.toString()];\n const top_axis3 = axis3s[top_frame.toString()];\n const bottom_scale = scales[bottom_frame.toString()];\n const top_scale = scales[top_frame.toString()];\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions.push(proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i]);\n current_axis1s.push(proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i]);\n current_axis2s.push(proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i]);\n current_axis3s.push(proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i]);\n current_scales.push(proportion * bottom_scale[i] + (1.0 - proportion) * top_scale[i]);\n }\n } else {\n current_positions = positions[\"0\"];\n current_axis1s = axis1s[\"0\"];\n current_axis2s = axis2s[\"0\"];\n current_axis3s = axis3s[\"0\"];\n current_scales = scales[\"0\"];\n }\n updateGlyphsetTransformation(current_positions, current_axis1s, current_axis2s, current_axis3s,\n current_scales);\n this.boundingBoxUpdateRequired = true;\n if (colors != undefined) {\n if (morphColours) {\n const bottom_colors = colors[bottom_frame.toString()];\n const top_colors = colors[top_frame.toString()];\n for (let i = 0; i < bottom_colors.length; i++) {\n _bot_colour.setHex(bottom_colors[i]);\n _top_colour.setHex(top_colors[i]);\n _bot_colour.setRGB(_bot_colour.r * proportion + _top_colour.r * (1 - proportion),\n _bot_colour.g * proportion + _top_colour.g * (1 - proportion),\n _bot_colour.b * proportion + _top_colour.b * (1 - proportion));\n current_colors.push(_bot_colour.getHex());\n }\n\t\t\t\t/*\n\t\t\t\tfor (var i = 0; i < bottom_colors.length; i++) {\n\t\t\t\t\tcurrent_colors.push(proportion * bottom_colors[i] + (1.0 - proportion) * top_colors[i]);\n\t\t\t\t}\n\t\t\t\t*/\n } else {\n current_colors = colors[\"0\"];\n }\n updateGlyphsetHexColors(current_colors);\n }\n current_positions = null;\n current_axis1s = null;\n current_axis2s = null;\n current_axis3s = null;\n current_scales = null;\n current_colors = null;\n };\n\n this.showLabel = () => {\n for (let i = 0; i < glyphList.length; i++) {\n glyphList[i].showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n }\n\n const createGlyphs = (displayLabels) => {\n if ((labels != undefined) && displayLabels) {\n for (let i = 0; i < numberOfVertices; i++) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, i, this);\n if (labels != undefined && labels[i] != undefined) {\n glyph.setLabel(labels[i]);\n }\n if (numberOfTimeSteps > 0) {\n glyph.setFrustumCulled(false);\n }\n glyphList[i] = glyph;\n this.morph.add(glyph.getGroup());\n }\n }\n if ((labels != undefined) && displayLabels) {\n this.showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n //Update the transformation of the glyphs.\n updateGlyphsetTransformation(positions[\"0\"], axis1s[\"0\"],\n axis2s[\"0\"], axis3s[\"0\"], scales[\"0\"]);\n //Update the color of the glyphs.\n if (colors != undefined) {\n updateGlyphsetHexColors(colors[\"0\"]);\n }\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n };\n\n this.addCustomGlyph = glyph => {\n if (glyph.isGlyph)\n glyphList.push(glyph);\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n this.addMeshAsGlyph = (mesh, id) => {\n if (mesh.isMesh) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, id, this);\n glyph.fromMesh(mesh);\n glyphList.push(glyph);\n this.morph.add(glyph.getGroup())\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n return glyph;\n }\n return undefined;\n }\n\n\t/**\n\t * A function which iterates through the list of glyphs and call the callback\n\t * function with the glyph as the argument.\n\t * @param {Function} callbackFunction - Callback function with the glyph\n\t * as an argument.\n\t */\n this.forEachGlyph = callbackFunction => {\n for (let i = 0; i < glyphList.length; i++) {\n callbackFunction(glyphList[i]);\n }\n }\n\n var meshloader = (finishCallback, displayLabels) => {\n return (geometry, materials) => {\n const tempGeometry = geometry.toBufferGeometry();\n this.geometry.copy(tempGeometry);\n this.geometry.computeBoundingSphere();\n this.geometry.computeBoundingBox();\n tempGeometry.dispose();\n if (materials && materials[0])\n this.morph.material = materials[0];\n createGlyphs(displayLabels);\n this.morph.name = this.groupName;\n this.morph.userData = this;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(this);\n };\n }\n\n /**\n * Get the index of the closest vertex to centroid.\n */\n this.getClosestVertexIndex = function () {\n let closestIndex = -1;\n if (this.morph && this.ready) {\n let center = new THREE.Vector3();\n this.getBoundingBox().getCenter(center);\n let current_positions = positions[\"0\"];\n const numberOfPositions = current_positions.length / 3;\n let position = new THREE.Vector3();\n let distance = -1;\n let currentDistance = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n position.set(current_positions[current_index],\n current_positions[current_index + 1],\n current_positions[current_index + 2]);\n currentDistance = center.distanceTo(position);\n if (distance == -1) {\n distance = currentDistance;\n closestIndex = i;\n } else if (distance > currentDistance) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n return closestIndex;\n }\n\n /**\n * Get the closest vertex to centroid.\n */\n this.getClosestVertex = function () {\n\n if (this.markerVertexIndex == -1) {\n this.markerVertexIndex = this.getClosestVertexIndex();\n }\n if (this.markerVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.markerVertexIndex]) {\n glyphList[this.markerVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.markerVertexIndex, _transformMatrix);\n position.setFromMatrixPosition(_transformMatrix);\n return position;\n }\n }\n\n return undefined;\n }\n\n this.applyMatrix4ToBox = (box1, box2, matrix) => {\n _points[0].set(box1.min.x, box1.min.y, box1.min.z).applyMatrix4(matrix); // 000\n _points[1].set(box1.min.x, box1.min.y, box1.max.z).applyMatrix4(matrix); // 001\n _points[2].set(box1.min.x, box1.max.y, box1.min.z).applyMatrix4(matrix); // 010\n _points[3].set(box1.min.x, box1.max.y, box1.max.z).applyMatrix4(matrix); // 011\n _points[4].set(box1.max.x, box1.min.y, box1.min.z).applyMatrix4(matrix); // 100\n _points[5].set(box1.max.x, box1.min.y, box1.max.z).applyMatrix4(matrix); // 101\n _points[6].set(box1.max.x, box1.max.y, box1.min.z).applyMatrix4(matrix); // 110\n _points[7].set(box1.max.x, box1.max.y, box1.max.z).applyMatrix4(matrix); // 111\n box2.setFromPoints(_points);\n }\n\n\n\t/**\n\t * Get the bounding box for the whole set of glyphs.\n\t * \n\t * @return {Three.Box3};\n\t */\n this.getBoundingBox = () => {\n if (this.morph && this.ready && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n _boundingBox1.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n for (let i = 0; i < numberOfVertices; i++) {\n this.morph.getMatrixAt(i, _transformMatrix);\n this.applyMatrix4ToBox(_boundingBox1, _boundingBox2, _transformMatrix);\n if (i == 0) {\n _boundingBox3.copy(_boundingBox2);\n } else {\n _boundingBox3.union(_boundingBox2);\n }\n }\n if (_boundingBox3) {\n this.cachedBoundingBox.copy(_boundingBox3);\n this.boundingBoxUpdateRequired = false;\n } else\n return undefined;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n\n\t/**\n\t * Set the local time of this glyphset.\n\t * \n\t * @param {Number} time - Can be any value between 0 to duration.\n\t */\n this.setMorphTime = time => {\n if (time > this.duration)\n this.inbuildTime = this.duration;\n else if (0 > time)\n this.inbuildTime = 0;\n else\n this.inbuildTime = time;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n if (morphVertices)\n this.markerUpdateRequired = true;\n }\n }\n\n /**\n * Check if the glyphset is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if ((numberOfTimeSteps > 0) && (morphColours || morphVertices))\n return true;\n return false;\n }\n\n this.getCurrentTime = () => {\n return this.inbuildTime;\n }\n\n\n\t/**\n\t * Clear this glyphset and its list of glyphs which will release them from the memory.\n\t */\n this.dispose = () => {\n for (let i = glyphList.length - 1; i >= 0; i--) {\n glyphList[i].dispose();\n }\n if (this.geometry)\n this.geometry.dispose();\n if (this.morph)\n this.morph.material.dispose();\n axis1s = undefined;\n axis2s = undefined;\n axis3s = undefined;\n positions = undefined;\n scales = undefined;\n colors = undefined;\n this.ready = false;\n this.groupName = undefined;\n }\n\n //Update the geometry and colours depending on the morph.\n this.render = (delta, playAnimation, options) => {\n if (playAnimation == true) {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration\n this.inbuildTime = targetTime;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n }\n }\n this.updateMarker(playAnimation, options);\n }\n}\n\nGlyphset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyphset = Glyphset;\n","var THREE = require('three');\n\nvar Loader = require('./three/Loader').Loader;\nvar LoaderUtils = THREE.LoaderUtils;\nvar AnimationClip = THREE.AnimationClip;\nvar Vector3 = THREE.Vector3;\nvar Vector4 = THREE.Vector4;\nvar Color = THREE.Color;\nvar Vector2 = THREE.Vector2;\nvar Face3 = require('./three/Geometry').Face3;\nvar Geometry = require('./three/Geometry').Geometry;\nvar FileLoader = THREE.FileLoader;\nvar DefaultLoadingManager = THREE.DefaultLoadingManager;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n if (json.uvs) {\n\n for ( i = 0; i < json.uvs.length; i ++ ) {\n\n geometry.uvs[i] = [];\n\n for ( let k = 0; k < json.uvs[i].length ; k++ ) {\n\n geometry.uvs[i][k] = json.uvs[i][k];\n\n }\n \n }\n \n }\n\n if (normals) {\n\n for ( i = 0; i < normals.length; i ++ ) {\n\n geometry.normals[i] = normals[i];\n\n }\n \n }\n\n if (colors) {\n\n for ( i = 0; i < colors.length; i ++ ) {\n\n geometry.colors[i] = colors[i];\n\n }\n \n }\n\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined ) {\n\n\t\t\t\tvar i, l, c, cl, dstColors, srcColors, color;\n\n\t\t\t\tfor ( i = 0, l = json.morphColors.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphColors[ i ] = {};\n\t\t\t\t\tgeometry.morphColors[ i ].name = json.morphColors[ i ].name;\n\t\t\t\t\tgeometry.morphColors[ i ].colors = [];\n\n\t\t\t\t\tdstColors = geometry.morphColors[ i ].colors;\n\t\t\t\t\tsrcColors = json.morphColors[ i ].colors;\n\n\t\t\t\t\tfor ( c = 0, cl = srcColors.length; c < cl; c += 3 ) {\n\n\t\t\t\t\t\tcolor = new THREE.Color( 0xffaa00 );\n\t\t\t\t\t\tcolor.setRGB( srcColors[ c ], srcColors[ c + 1 ], srcColors[ c + 2 ] );\n\t\t\t\t\t\tdstColors.push( color );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\t\t\tgeometry.morphColors = [];\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, 'Anonymous' );\n\n\t\t\t\t\n\t\t\t\tif (json.materials[0].video) {\n\t\t\t\t\t\n\t\t\t\t\tvar fullPath = texturePath + json.materials[0].video;\n\t\t\t\t\t\n\t\t\t\t\tconst videoHandler = new (require('./videoHandler').VideoHandler)(fullPath);\n\t\t\t\t\t\n\t\t\t\t\tgeometry._video = videoHandler;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (materials && materials.length > 0) {\n\t\t\t\t\tif (json.materials[0].singleSided) {\n\t\t\t\t\t\tmaterials[0].side = THREE.FrontSide;\n\t\t\t\t\t} else if (json.materials[0].flipSided){\n\t\t\t\t\t\tmaterials[0].side = THREE.BackSide;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaterials[0].side = THREE.DoubleSide;\n }\n if (json.materials[0].specularCoef) {\n materials[0].shininess = Math.floor(json.materials[0].specularCoef / 3);\n }\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n\nexport { JSONLoader };\n","var THREE = require('three');\n\nimport {\n\tNoBlending,\n\tNormalBlending,\n\tAdditiveBlending,\n\tSubtractiveBlending,\n\tMultiplyBlending,\n\tCustomBlending,\n\n\tFaceColors,\n\tVertexColors,\n\n\tDoubleSide,\n\tBackSide,\n\n\tMirroredRepeatWrapping,\n RepeatWrapping,\n MathUtils,\n MaterialLoader,\n TextureLoader,\n Color\n} from 'three';\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = MathUtils.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: MathUtils.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\nexport { Loader };\n","var THREE = require('three');\n\n\n// Alan notes: pause video when stuck\n//VideoTexture is used for creating and updating a video projected onto a Three.js texture\nexports.VideoHandler = function(srcIn) {\n\n\tvar _this = this;\n\tthis.video = undefined;\n\tthis.videoTexture = undefined;\n\tvar src = srcIn;\n\tvar lastTime = 0;\n\tvar lastUpdate = 0;\n\tvar frameRate = 30;\n\tvar videoPlaneLoadedFlag = false;\n\tvar lastPlayPos = 0;\n\tvar currentPlayPos = 0;\n\tvar bufferingDetected = false;\n\t\n\tvar checkBuffering = function(delta, playAnimation) {\n\t currentPlayPos = _this.video.currentTime;\n\n\t // checking offset should be at most the check interval\n\t // but allow for some margin\n\t var offset = delta - 0.02;\n\n\t // if no buffering is currently detected,\n\t // and the position does not seem to increase\n\t // and the _this.video isn't manually paused...\n\t if (!bufferingDetected && (currentPlayPos < (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = true;\n\t }\n\n\t // if we were buffering but the _this.video has advanced,\n\t // then there is no buffering\n\t if (bufferingDetected && (currentPlayPos > (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = false;\n\t }\n\t lastPlayPos = currentPlayPos;\n\t}\n\n\tvar initialise = function(){\n\t\tif (document) {\n\t\t \t_this.video = document.createElement( 'video' );\n\t\t \t_this.video.crossOrigin = \"anonymous\";\n\t\t \t_this.video.src = src;\n\t\t \t_this.video.load();\n _this.video.loop = true;\n \n\t\t}\n\t}\n\n\tthis.setMorphTime = function(time, duration){\n\t\tvar actualTime = time / duration * _this.video.duration;\n\t\t_this.video.currentTime = actualTime;\n\t}\n\n\t// videoPlaneLoaded connects the video to the video texture once it has loaded\n\t this.getVideoDuration = function() {\n\t\t return _this.video.duration;\n\t}\n\n\tthis.createCanvasVideoTexture = function(){\n\t\t_this.videoTexture = new THREE.VideoTexture( _this.video );\n\t\t_this.videoTexture.minFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.magFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.format = THREE.RGBFormat;\n _this.video.currentTime = 0;\n\t\treturn _this.videoTexture;\n\t}\n\t\n\tthis.getCurrentTime = function(duration) {\n\t\tif (_this.video)\n\t\t\treturn duration * (_this.video.currentTime / _this.video.duration);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tthis.isReadyToPlay = function(){\n\t\t// video.readyState 3 means we have data to load for the current time and foreseeable future\n\t\tif (_this.video && _this.video.readyState >= 3){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}","const THREE = require('three');\nconst Points = require('../three/Points').Points;\n\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Geometry}\n */\nconst Pointset = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isPointset = true;\n\n /** Shape of the points is created using the function below */\n\tconst getCircularTexture = () => {\n\t\tvar image = new Image();\n\t\timage.src = require(\"../assets/disc.png\");\n\t\tconst texture = new THREE.Texture();\n\t\ttexture.image = image;\n\t\ttexture.needsUpdate = true;\n\t\treturn texture;\n\t}\n\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tconst texture = getCircularTexture();\n\t\t\tmaterialIn.map = texture;\n\t\t\tlet point = new Points(geometry, materialIn);\n\t\t\tthis.setMesh(point, options.localTimeEnabled, options.localMorphColour);\n\t\t}\t\n\t}\n\n\tthis.setSize = size => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.size = size;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\t\n\tthis.setSizeAttenuation = flag => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.sizeAttenuation = flag;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n}\n\nPointset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Pointset = Pointset;\n","import {\n\tBufferGeometry,\n\tMatrix4,\n Object3D,\n PointsMaterial,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n const drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n \n calculatePosition( this, positionAttribute, morphPosition, a );\n\n\t\t\t\t\ttestPoint( _position, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n \n calculatePosition( this, positionAttribute, morphPosition, i );\n\n\t\t\t\t\ttestPoint( _position, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction calculatePosition( object, position, morphPosition, a )\t{\n\n _position.fromBufferAttribute( position, a );\n\n const morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n const influence = morphInfluences[ i ];\n const morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n\n _morphA.addScaledVector( _tempA.sub( _position ), influence );\n\n }\n\n _position.add( _morphA );\n\n }\n\n}\n\nexport { Points };","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==\"","const THREE = require('three');\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst Lines = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isLines = true;\n\n\tthis.createLineSegment = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = this.toBufferGeometry(geometryIn, options);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ])\n\t\t\t\tmaterialIn.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n let line = new (require(\"../three/line/LineSegments\").LineSegments)(geometry, materialIn);\n\t\t\tthis.setMesh(line, options.localTimeEnabled, options.localMorphColour);\n\t\t}\t\t\n\t}\n\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n}\n\nLines.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Lines = Lines;\n","import { Line } from './Line.js';\nimport {\n Float32BufferAttribute,\n\tVector3\n} from 'three';\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nexport { LineSegments };","import {\n BufferGeometry,\n Float32BufferAttribute,\n LineBasicMaterial,\n\tMatrix4,\n Object3D,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n const drawRange = geometry.drawRange;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n const b = index.getX( i + 1 );\n \n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, a, b );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, i, i+1 );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction calculatePosition( vStart, vEnd, object, position, morphPosition, a, b )\t{\n\n vStart.fromBufferAttribute( position, a );\n vEnd.fromBufferAttribute( position, b );\n\n var morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n _morphB.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n var influence = morphInfluences[ i ];\n var morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n _tempB.fromBufferAttribute( morphAttribute, b );\n\n _morphA.addScaledVector( _tempA.sub( vStart ), influence );\n _morphB.addScaledVector( _tempB.sub( vEnd ), influence );\n\n }\n\n vStart.add( _morphA );\n vEnd.add( _morphB );\n\n }\n\n}\n\nLine.prototype.isLine = true;\n\n\nexport { Line };","const THREE = require('three');\r\nconst ResizeSensor = require('css-element-queries/src/ResizeSensor');\r\n/**\r\n * Create a Zinc 3D renderer in the container provided.\r\n * The primary function of a Zinc 3D renderer is to display the current\r\n * scene (@link Zinc.Scene} set to the renderer and each scene may contain as \r\n * many geometries, glyphset and other primitives as the system can support.\r\n * Zinc.Renderer also allows additional scenes to be displayed.\r\n * \r\n * @param {Object} containerIn - Container to create the renderer on.\r\n * @class\r\n * @author Alan Wu\r\n * @return {Zinc.Renderer}\r\n */\r\nexports.Renderer = function (containerIn) {\r\n\r\n\tlet container = containerIn;\r\n\t\r\n\tconst stats = 0;\r\n\t\r\n\tlet renderer = undefined;\r\n\tlet currentScene = undefined;\r\n\r\n\t//myGezincGeometriestains a tuple of the threejs mesh, timeEnabled, morphColour flag, unique id and morph\r\n\tconst clock = new THREE.Clock(false);\r\n\tthis.playAnimation = true;\r\n /* default animation update rate, rate is 1000 and duration \r\n is default to 6000, 6s to finish a full animation */\r\n\tlet playRate = 1000;\r\n\tlet preRenderCallbackFunctions = [];\r\n let preRenderCallbackFunctions_id = 0;\r\n let postRenderCallbackFunctions = [];\r\n\tlet postRenderCallbackFunctions_id = 0;\r\n\tlet animated_id = undefined;\r\n\tlet cameraOrtho = undefined, sceneOrtho = undefined, logoSprite = undefined;\r\n\tlet sceneMap = [];\r\n\tlet additionalActiveScenes = [];\r\n\tlet scenesGroup = new THREE.Group();\r\n\tlet canvas = undefined;\r\n let sensor = undefined;\r\n let isRendering = false;\r\n\tconst _this = this;\r\n\tconst currentSize = [0, 0];\r\n\tconst currentOffset = [0, 0];\r\n\t\r\n\tthis.getDrawingWidth = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientWidth;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientWidth !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientWidth);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.width);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tthis.getDrawingHeight = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientHeight;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientHeight !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientHeight);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.height);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t/** \r\n\t * Call this to resize the renderer, this is normally call automatically.\r\n\t */\r\n\tthis.onWindowResize = () => {\r\n\t\tcurrentScene.onWindowResize();\r\n\t\tconst width = this.getDrawingWidth();\r\n\t\tconst height = this.getDrawingHeight();\r\n\t\tif (renderer != undefined) {\r\n\t\t\tlet rect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\trect = container.getBoundingClientRect();\r\n\t\t\t\trenderer.setSize(width, height);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (typeof canvas.getBoundingClientRect !== 'undefined') {\r\n\t\t\t\t\trect = canvas.getBoundingClientRect();\r\n\t\t\t\t\tcanvas.width = width;\r\n\t\t\t\t\tcanvas.height = height;\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (rect) {\r\n\t\t\t\tcurrentOffset[0] = rect.left;\r\n\t\t\t\tcurrentOffset[1] = rect.top;\r\n\t\t\t}\r\n\t\t\tconst target = new THREE.Vector2();\r\n\t\t\trenderer.getSize(target);\r\n\t\t\tcurrentSize[0] = target.x;\r\n\t\t\tcurrentSize[1] = target.y;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialise the renderer and its visualisations.\r\n\t */\r\n\tthis.initialiseVisualisation = parameters => {\r\n\t parameters = parameters || {};\r\n\t if (parameters['antialias'] === undefined) {\r\n let onMobile = false;\r\n try {\r\n if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\r\n onMobile = true;\r\n }\r\n }\r\n catch(err) {\r\n onMobile = false;\r\n }\r\n if (onMobile)\r\n parameters['antialias'] = false;\r\n else\r\n parameters['antialias'] = true;\r\n\t }\r\n\t if (parameters[\"canvas\"]) {\r\n\t\t container = undefined;\r\n\t\t canvas = parameters[\"canvas\"];\r\n\t }\r\n renderer = new THREE.WebGLRenderer(parameters);\r\n if (container !== undefined) {\r\n\t\t container.appendChild( renderer.domElement );\r\n }\r\n\t renderer.setClearColor( 0xffffff, 1);\r\n\t if (canvas && canvas.style) {\r\n\t\t canvas.style.height = \"100%\";\r\n\t\t canvas.style.width = \"100%\";\r\n }\r\n renderer.autoClear = false;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the current scene on display.\r\n\t * @return {Zinc.Scene};\r\n\t */\r\n\tthis.getCurrentScene = () => {\r\n\t\treturn currentScene;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current scene on display.\r\n\t * \r\n\t * @param {Zinc.Scene} sceneIn - The scene to be set, only scene created by this instance\r\n\t * of ZincRenderer is supported currently.\r\n\t */\r\n\tthis.setCurrentScene = sceneIn => {\r\n\t\tif (sceneIn) {\r\n\t\t\tthis.removeActiveScene(sceneIn);\r\n\t\t\tconst oldScene = currentScene;\r\n\t\t\tcurrentScene = sceneIn;\r\n\t\t\tif (oldScene) {\r\n\t\t\t\toldScene.setInteractiveControlEnable(false);\r\n\t\t\t}\r\n\t\t\tcurrentScene.setInteractiveControlEnable(true);\r\n\t\t\tcurrentScene.setAdditionalScenesGroup(scenesGroup);\r\n\t\t\tthis.onWindowResize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Return scene with the matching name if scene with that name has been created.\r\n\t * \r\n\t * @param {String} name - Name to match\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.getSceneByName = name => {\r\n\t\treturn sceneMap[name];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Create a new scene with the provided name if scene with the same name exists,\r\n\t * return undefined.\r\n\t * \r\n\t * @param {String} name - Name of the scene to be created.\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.createScene = name => {\r\n\t\tif (sceneMap[name] != undefined){\r\n\t\t\treturn undefined;\r\n\t\t} else {\r\n\t\t\tlet new_scene = undefined;\r\n\t\t\tif (canvas)\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(canvas, renderer);\r\n\t\t\telse\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(container, renderer);\r\n\t\t\tsceneMap[name] = new_scene;\r\n\t\t\tnew_scene.sceneName = name;\r\n\t\t\treturn new_scene;\r\n\t\t}\r\n\t}\r\n\t\r\n\tconst updateOrthoScene = () => {\r\n\t\tif (logoSprite != undefined) {\r\n\t\t\tconst material = logoSprite.material;\r\n\t\t\tif (material.map) {\r\n\t\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\t\tconst calculatedWidth = (width - material.map.image.width)/2;\r\n\t\t\t\tconst calculatedHeight = (-height + material.map.image.height)/2;\r\n\t\t\t\tlogoSprite.position.set(calculatedWidth, calculatedHeight, 1 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tconst updateOrthoCamera = () => {\r\n\t\tif (cameraOrtho != undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho.left = -width / 2;\r\n\t\t\tcameraOrtho.right = width / 2;\r\n\t\t\tcameraOrtho.top = height / 2;\r\n\t\t\tcameraOrtho.bottom = -height / 2;\r\n\t\t\tcameraOrtho.updateProjectionMatrix();\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Reset the viewport of the current scene to its original state.\r\n\t */\r\n\tthis.resetView = () => {\r\n\t\tcurrentScene.resetView();\r\n\t}\r\n\t\r\n\t/**\r\n\t * Adjust zoom distance to include all primitives in scene and also the additional scenes\r\n\t * but the lookat direction and up vectors will remain constant.\r\n\t */\r\n\tthis.viewAll = () => {\r\n\t\tif (currentScene) {\t\r\n\t\t\tconst boundingBox = currentScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\t const boundingBox2 = additionalActiveScenes[i].getBoundingBox();\r\n\t\t\t if (boundingBox2) {\r\n\t\t\t \tboundingBox.union(boundingBox2);\r\n\t\t\t }\r\n\t\t\t }\r\n\t\t\t\tcurrentScene.viewAllWithBoundingBox(boundingBox);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\r\n\t * without any of the metadata. Therefore, extra parameters should be provided. This should be\r\n\t * called from {@link Zinc.Scene}.\r\n\t * \r\n\t * @deprecated\r\n\t */\r\n\tthis.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\r\n\t\tcurrentScene.loadModelsURL(urls, colours, opacities, timeEnabled, morphColour, finishCallback);\r\n\t}\r\n\t\r\n\tconst loadView = viewData => {\r\n\t\tcurrentScene.loadView(viewData);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Load the viewport from an external location provided by the url. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * @param {String} URL - address to the file containing viewport information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadViewURL = url => {\r\n\t\tcurrentScene.loadViewURL(url);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy file format containing the viewport and its model file from an external \r\n\t * location provided by the url. Use the new metadata format with\r\n\t * {@link Zinc.Scene#loadMetadataURL} instead. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * \r\n\t * @param {String} URL - address to the file containing viewport and model information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\r\n\t\tcurrentScene.loadFromViewURL(jsonFilePrefix, finishCallback);\r\n\t}\r\n\t\r\n\tthis.updateDirectionalLight = () => {\r\n\t\tcurrentScene.updateDirectionalLight();\r\n\t}\r\n \r\n let runAnimation = () => {\r\n if (isRendering) {\r\n animated_id = requestAnimationFrame( runAnimation );\r\n this.render();\r\n } else {\r\n cancelAnimationFrame(animated_id);\r\n animated_id = undefined;\r\n }\r\n }\r\n\r\n\t/**\r\n\t * Stop the animation and renderer to get into the render loop.\r\n\t */\r\n\tthis.stopAnimate = () => {\r\n if (isRendering) {\r\n clock.stop();\r\n isRendering = false;\r\n }\r\n\t}\r\n\r\n\t/**\r\n\t * Start the animation and begin the rendering loop.\r\n\t */\r\n\tthis.animate = () => {\r\n if (!isRendering) {\r\n clock.start();\r\n isRendering = true;\r\n runAnimation();\r\n }\r\n\t}\r\n\r\n\tconst prevTime = Date.now();\r\n\t\r\n\t/**\r\n\t * Add a callback function which will be called everytime before the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPreRenderCallbackFunction = callbackFunction => {\r\n\t\tpreRenderCallbackFunctions_id = preRenderCallbackFunctions_id + 1;\r\n\t\tpreRenderCallbackFunctions[preRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn preRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePreRenderCallbackFunction = id => {\r\n\t\tif (id in preRenderCallbackFunctions) {\r\n \t\t\tdelete preRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n \r\n\t/**\r\n\t * Add a callback function which will be called everytime after the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPostRenderCallbackFunction = callbackFunction => {\r\n\t\tpostRenderCallbackFunctions_id = postRenderCallbackFunctions_id + 1;\r\n\t\tpostRenderCallbackFunctions[postRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn postRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePostRenderCallbackFunction = id => {\r\n\t\tif (id in postRenderCallbackFunctions) {\r\n \t\t\tdelete postRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.getPlayRate = () => {\r\n\t\treturn playRate;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current play rate, playrate affects how fast an animated object animates.\r\n\t * @param {Number} PlayRateIn - value to set the playrate to.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setPlayRate = playRateIn => {\r\n\t\tplayRate = playRateIn;\r\n\t}\r\n\t\r\n\tthis.getCurrentTime = () => {\r\n\t\treturn currentScene.getCurrentTime();\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setMorphsTime = time => {\r\n\t\tcurrentScene.setMorphsTime(time);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get {Zinc.Geoemtry} by its id. This should be called from {@link Zinc.Scene};\r\n\t * \r\n\t * @depreacted\r\n\t * @return {Zinc.Geometry}\r\n\t */\r\n\tthis.getZincGeometryByID = id => {\r\n\t\treturn currentScene.getZincGeometryByID(id);\r\n\t}\t\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the current scene.\r\n\t */\r\n\tthis.addToScene = object => {\r\n\t\tcurrentScene.addObject(object)\r\n\t}\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the ortho scene, objects added to the ortho scene are rendered in\r\n\t * normalised coordinates and overlay on top of current scene. \r\n\t * \r\n\t */\r\n\tthis.addToOrthoScene = object => {\r\n\t\tif (sceneOrtho == undefined)\r\n\t\t\tsceneOrtho = new THREE.Scene();\r\n\t\tif (cameraOrtho == undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho = new THREE.OrthographicCamera( -width / 2,\r\n\t\t\t\t\twidth / 2, height/ 2, -height / 2, 1, 10 );\r\n\t\t\tcameraOrtho.position.z = 10;\r\n\t\t}\r\n\t\tsceneOrtho.add(object)\r\n\t}\r\n\t\r\n\tconst createHUDSprites = logoSprite => {\r\n\t\treturn texture => {\r\n\t\t\ttexture.needsUpdate = true;\r\n\t\t\tconst material = new THREE.SpriteMaterial( { map: texture } );\r\n\t\t\tconst imagewidth = material.map.image.width;\r\n\t\t\tconst imageheight = material.map.image.height;\r\n\t\t\tlogoSprite.material = material;\r\n\t\t\tlogoSprite.scale.set( imagewidth, imageheight, 1 );\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tlogoSprite.position.set( (width - imagewidth)/2, (-height + imageheight)/2, 1 );\r\n\t\t\tthis.addToOrthoScene(logoSprite);\r\n\t\t};\r\n\t};\r\n\t\r\n\tthis.addLogo = () => {\r\n\t\tlogoSprite = new THREE.Sprite();\r\n\t\tconst logo = THREE.ImageUtils.loadTexture(\r\n\t\t\t\t\"images/abi_big_logo_transparent_small.png\", undefined, createHUDSprites(logoSprite));\r\n\t}\r\n\t\r\n\t/**\r\n\t * Render the current and all additional scenes. It will first update all geometries and glyphsets\r\n\t * in scenes, clear depth buffer and render the ortho scene, call the preRenderCallbackFunctions stack\r\n\t * , render the scenes then postRenderCallback.\r\n\t */\r\n\tthis.render = () => {\r\n\t\tif (!sensor) {\r\n\t\t\tif (container) {\r\n\t\t\t\tif (container.clientWidth > 0 && container.clientHeight > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(container, this.onWindowResize);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (canvas.width > 0 && canvas.height > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(canvas, this.onWindowResize);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst delta = clock.getDelta();\r\n\t\tcurrentScene.renderGeometries(playRate, delta, this.playAnimation);\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t sceneItem.renderGeometries(playRate, delta, this.playAnimation);\r\n\t }\r\n\t\tif (cameraOrtho != undefined && sceneOrtho != undefined) {\r\n\t\t\trenderer.clearDepth();\r\n\t\t\trenderer.render( sceneOrtho, cameraOrtho );\r\n\t\t}\r\n for (key in preRenderCallbackFunctions) {\r\n if (preRenderCallbackFunctions.hasOwnProperty(key)) {\r\n preRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n currentScene.render(renderer);\r\n for (key in postRenderCallbackFunctions) {\r\n if (postRenderCallbackFunctions.hasOwnProperty(key)) {\r\n postRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the internal {@link Three.Renderer}, to gain access to ThreeJS APIs.\r\n\t */\r\n\tthis.getThreeJSRenderer = () => {\r\n\t\treturn renderer;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Check if a scene is currently active.\r\n\t * @param {Zinc.Scene} sceneIn - Scene to check if it is currently\r\n\t * rendered.\r\n\t */\r\n\tthis.isSceneActive = sceneIn => {\r\n\t\tif (currentScene === sceneIn) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t const sceneItem = additionalActiveScenes[i];\r\n\t\t if (sceneItem === sceneIn)\r\n\t\t \treturn true;\r\n\t\t }\r\n\t\t}\r\n\t return false;\r\n\t} \r\n\t\r\n\t/**\r\n\t * Add additional active scene for rendering, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be added to the rendering.\r\n\t */\r\n\tthis.addActiveScene = additionalScene => {\r\n\t\tif (!this.isSceneActive(additionalScene)) {\r\n\t\t\tadditionalActiveScenes.push(additionalScene);\r\n\t\t\tscenesGroup.add(additionalScene.getThreeJSScene());\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a currenrtly active scene from the renderer, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be removed from rendering.\r\n\t */\r\n\tthis.removeActiveScene = additionalScene => {\r\n\t for(i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t if (sceneItem === additionalScene) {\r\n\t \tadditionalActiveScenes.splice(i, 1);\r\n\t \tscenesGroup.remove(additionalScene.getThreeJSScene());\r\n\t \treturn;\r\n\t }\r\n\t }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Clear all additional scenes from rendering except for curentScene.\r\n\t */\r\n\tthis.clearAllActiveScene = () => {\r\n\t\tfor (let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\tscenesGroup.remove(additionalActiveScenes[i].getThreeJSScene());\r\n\t\t}\r\n\t\tadditionalActiveScenes.splice(0,additionalActiveScenes.length);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Dispose all memory allocated, this will effetively destroy all scenes.\r\n\t */\r\n\tthis.dispose = () => {\r\n if (isRendering)\r\n cancelAnimationFrame(animated_id);\r\n\t for (const key in sceneMap) {\r\n\t if (sceneMap.hasOwnProperty(key)) {\r\n\t sceneMap[key].clearAll();\r\n\t }\r\n\t }\r\n\t sceneMap = [];\r\n\t additionalActiveScenes = [];\r\n\t scenesGroup = new THREE.Group();\r\n\t this.stopAnimate();\r\n\t preRenderCallbackFunctions = [];\r\n\t preRenderCallbackFunctions_id = 0;\r\n\t cameraOrtho = undefined;\r\n\t sceneOrtho = undefined;\r\n\t logoSprite = undefined;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t sensor = undefined;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Transition from the current viewport to the endingScene's viewport in the specified duration.\r\n\t * \r\n\t * @param {Zinc.Scene} endingScene - Viewport of this scene will be used as the destination.\r\n\t * @param {Number} duration - Amount of time to transition from current viewport to the \r\n\t * endingScene's viewport.\r\n\t */\r\n\tthis.transitionScene = (endingScene, duration) => {\r\n\t\tif (currentScene) {\r\n\t\t\tconst currentCamera = currentScene.getZincCameraControls();\r\n\t\t\tconst boundingBox = endingScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t\tconst radius = boundingBox.min.distanceTo(boundingBox.max)/2.0;\r\n\t\t\t\tconst centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\r\n\t\t\t\tconst centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\r\n\t\t\t\tconst centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\r\n\t\t\t\tconst clip_factor = 4.0;\r\n\t\t\t\tconst endingViewport = currentCamera.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor );\r\n\t\t\t\tconst startingViewport = currentCamera.getCurrentViewport();\r\n\t\t\t\tcurrentCamera.cameraTransition(startingViewport, endingViewport, duration);\r\n\t\t\t\tcurrentCamera.enableCameraTransition();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n","module.exports = require(\"css-element-queries/src/ResizeSensor\");","const THREE = require('three');\nconst SceneLoader = require('./sceneLoader').SceneLoader;\nconst SceneExporter = require('./sceneExporter').SceneExporter;\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 zincObjects = [];\n let videoHandler = undefined;\n let sceneLoader = new SceneLoader(this);\n let minimap = undefined;\n const scene = new THREE.Scene();\n /**\n * A {@link THREE.DirectionalLight} object for controlling lighting of this scene.\n */\n this.directionalLight = undefined;\n /**\n * a {@link THREE.AmbientLight} for controlling the ambient lighting of this scene.\n */\n this.ambient = undefined;\n this.camera = undefined;\n let duration = 6000;\n let zincCameraControls = undefined;\n this.sceneName = undefined;\n let stereoEffectFlag = false;\n let stereoEffect = undefined;\n this.autoClearFlag = true;\n this.displayMarkers = false;\n this.displayMinimap = false;\n this.minimapScissor = {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-left\",\n updateRequired: true\n };\n let scissor = {x: 0, y: 0};\n let metadata = defaultMetadata();\n let _markerTarget = new THREE.Vector2();\n\n const getDrawingWidth = () => {\n if (container)\n if (typeof container.clientWidth !== \"undefined\")\n return container.clientWidth;\n else\n return container.width;\n return 0;\n }\n\n const getDrawingHeight = () => {\n if (container)\n if (typeof container.clientHeight !== \"undefined\")\n return container.clientHeight;\n else\n return container.height;\n return 0;\n }\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n return sceneLoader.getDownloadProgress();\n }\n\n //called from Renderer when panel has been resized\n this.onWindowResize = () => {\n zincCameraControls.onResize();\n this.camera.aspect = getDrawingWidth() / getDrawingHeight();\n this.camera.updateProjectionMatrix();\n this.minimapScissor.updateRequired = true;\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 = ({ nearPlane, farPlane, eyePosition, targetPosition, upVector}) => {\n const viewPort = new (require('./controls').Viewport)();\n viewPort.nearPlane = nearPlane;\n viewPort.farPlane = farPlane;\n viewPort.eyePosition = eyePosition;\n viewPort.targetPosition = targetPosition;\n viewPort.upVector = upVector;\n zincCameraControls.setDefaultCameraSettings(viewPort);\n zincCameraControls.resetView();\n return true;\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 let boundingBox1 = undefined, boundingBox2 = undefined;\n for (let i = 0; i < zincObjects.length; i++) {\n boundingBox2 = zincObjects[i].getBoundingBox();\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2;\n } else {\n if (boundingBox2)\n boundingBox1.union(boundingBox2);\n }\n }\n return boundingBox1;\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 for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].isGeometry)\n callbackFunction(zincObjects[i]);\n }\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 for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].isGlyphset)\n callbackFunction(zincObjects[i]);\n }\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 for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].isPointset)\n callbackFunction(zincObjects[i]);\n }\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 for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].isLines)\n callbackFunction(zincObjects[i]);\n }\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 const geometriesArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isGeometry &&\n (zincObjects[i].groupName == GroupName)) {\n geometriesArray.push(zincObjects[i]);\n }\n }\n return geometriesArray;\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 const pointsetsArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isPointset &&\n (zincObjects[i].groupName == GroupName)) {\n \t pointsetsArray.push(zincObjects[i]);\n }\n }\n return pointsetsArray;\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 const glyphsetsArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isGlyphset &&\n (zincObjects[i].groupName == GroupName)) {\n glyphsetsArray.push(zincObjects[i]);\n }\n }\n return glyphsetsArray;\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 const linesArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isLines &&\n (zincObjects[i].groupName == GroupName)) {\n \t linesArray.push(zincObjects[i]);\n }\n }\n return linesArray;\n }\n\n this.findObjectsWithGroupName = GroupName => {\n const objectsArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].groupName == GroupName) {\n \t objectsArray.push(zincObjects[i]);\n }\n }\n return objectsArray;\n }\n\n this.findObjectsWithAnatomicalId = anatomicalId => {\n const objectsArray = [];\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].anatomicalId == anatomicalId) {\n \t objectsArray.push(zincObjects[i]);\n }\n }\n return objectsArray;\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 scene.add(zincObject.morph);\n zincObjects.push(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(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(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(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(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(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(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(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(url, finishCallback, options);\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 this.addZincGeometry = (\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 this.addZincObject(newGeometry);\n newGeometry.setDuration(duration);\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGeometry);\n if (!videoHandler && newGeometry.videoHandler)\n videoHandler = newGeometry.videoHandler;\n return newGeometry;\n }\n return undefined;\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 if (zincObjects[0] != undefined) {\n return zincObjects[0].getCurrentTime();\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 for (let i = 0; i < zincObjects.length; i++) {\n zincObjects[i].setMorphTime(time);\n }\n }\n\n /**\n * Check if any object in this scene 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 if (videoHandler && videoHandler.video && !videoHandler.video.error) {\n \treturn true;\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) => {\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 var 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\t\t\t\t for (let i = 0; i < zincObjects.length; i++) {\n\t\t\t\t\t zincObjects[i].setMorphTime(currentTime);\n\t\t\t\t\t zincObjects[i].render(0, playAnimation);\n\t\t\t\t }\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\t\t\t for (let i = 0; i < zincObjects.length; i++) {\n\t\t\t\t zincObjects[i].render(playRate * delta, playAnimation, options);\n }\n\t\t } else {\n\t\t\t zincCameraControls.update(0);\n\t\t }\n }\n //process markers visibility and size\n if (this.displayMarkers && (playAnimation === false)) {\n if (options.markerDepths.length > 0) {\n let min = Math.min(...options.markerDepths);\n let max = Math.max(...options.markerDepths);\n\t\t\t for (let i = 0; i < zincObjects.length; i++) {\n\t\t\t\t zincObjects[i].processMarkerVisual(min, max, options);\n }\n }\n }\n }\n\n /**\n * Return the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\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 duration = durationIn;\n for (let i = 0; i < zincObjects.length; i++) {\n zincObjects[i].setDuration(duration);\n }\n zincCameraControls.setPathDuration(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 for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n return true;\n }\n }\n return false;\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 for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n scene.remove(zincObject.morph);\n zincObjects.splice(i, 1);\n zincObject.dispose();\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n return;\n }\n }\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.getPickableThreeJSObjects = () => {\n let returnedObjects = [];\n for (let i = zincObjects.length - 1; i >= 0; i--) {\n if (zincObjects[i].morph && (zincObjects[i].morph.visible === true)) {\n if (this.displayMarkers) {\n let marker = zincObjects[i].marker;\n if (marker && marker.isEnabled()) {\n returnedObjects.push(marker.morph);\n }\n } else {\n returnedObjects.push(zincObjects[i].morph);\n }\n }\n }\n return returnedObjects;\n }\n\n /**\n * Get the Normalised coordinates on minimap if mouse event is\n * inside the minimap \n */\n this.getNormalisedMinimapCoordinates = (renderer, event) => {\n if (this.displayMinimap) {\n const target = new THREE.Vector2();\n renderer.getSize(target);\n let offsetY = target.y - event.clientY;\n if (((scissor.x + this.minimapScissor.width) > event.clientX) &&\n (event.clientX > scissor.x) && \n ((scissor.y + this.minimapScissor.height) > offsetY) &&\n (offsetY > scissor.y)) {\n let x = ((event.clientX - scissor.x) /\n this.minimapScissor.width) * 2.0 - 1.0;\n let y = ((offsetY - scissor.y) /\n this.minimapScissor.height) * 2.0 - 1.0;\n return {\"x\": x, \"y\": y};\n }\n }\n return undefined;\n }\n\n /**\n * Get the coordinates difference of the current viewing\n * point and projected coordinates.\n */\n this.getMinimapDiffFromNormalised = (x, y) => {\n if (minimap)\n return minimap.getDiffFromNormalised(x, y);\n return undefined;\n }\n\n /**\n * Remove all objects that are created with ZincJS APIs and it will free the memory allocated.\n * This does not remove obejcts that are added using the addObject APIs.\n */\n this.clearAll = () => {\n for (let i = zincObjects.length - 1; i >= 0; i--) {\n scene.remove(zincObjects[i].morph);\n zincObjects[i].dispose();\n }\n zincObjects = [];\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","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\nconst JSONLoader = require('./loader').JSONLoader;\nconst STLLoader = require('three/examples/jsm/loaders/STLLoader').STLLoader;\nconst OBJLoader = require('three/examples/jsm/loaders/OBJLoader').OBJLoader;\nconst GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader').GLTFLoader;\n\nexports.SceneLoader = function (sceneIn) {\n const scene = sceneIn;\n this.toBeDownloaded = 0;\n this.progressMap = [];\n let viewLoaded = false;\n let errorDownload = false;\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n let totalSize = 0;\n let totalLoaded = 0;\n let unknownFound = false;\n\n for (const key in this.progressMap) {\n const progress = this.progressMap[key];\n\n totalSize += progress[1];\n totalLoaded += progress[0];\n\n if (progress[1] == 0)\n unknownFound = true;\n }\n if (unknownFound) {\n totalSize = 0;\n }\n return [ totalSize, totalLoaded, errorDownload ];\n }\n\n //Stores the current progress of downloads\n this.onProgress = id => {\n return xhr => {\n this.progressMap[id] = [ xhr.loaded, xhr.total ];\n };\n }\n\n this.onError = xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n };\n\n /**\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 if (scene.loadView(viewData)) {\n viewLoaded = true;\n }\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n --this.toBeDownloaded;\n }\n }\n requestURL = resolveURL(url);\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n/**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n const number = urls.length;\n this.toBeDownloaded += number;\n for (let i = 0; i < number; i++) {\n const filename = urls[i];\n const loader = new JSONLoader();\n let colour = require('./zinc').defaultMaterialColor;\n let opacity = require('./zinc').defaultOpacity;\n if (colours != undefined && colours[i] != undefined)\n colour = colours[i] ? true : false;\n if (opacities != undefined && opacities[i] != undefined)\n opacity = opacities[i];\n let localTimeEnabled = 0;\n if (timeEnabled != undefined && timeEnabled[i] != undefined)\n localTimeEnabled = timeEnabled[i] ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined && morphColour[i] != undefined)\n localMorphColour = morphColour[i] ? true : false;\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(filename), meshloader(colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, finishCallback), this.onProgress(i), this.onError);\n }\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (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(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 = (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 scene.addZincObject(newLines);\n newLines.setDuration(scene.getDuration());\n }\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newLines);\n };\n } \n\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n\t let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n\t if (timeEnabled != undefined)\n\t\t localTimeEnabled = timeEnabled ? true : false;\n\t let localMorphColour = 0;\n\t if (morphColour != undefined)\n\t\t localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n if (isInline) {\n var object = loader.parse( url );\n (linesloader(localTimeEnabled, localMorphColour, groupName, anatomicalId,\n renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, linesloader(localTimeEnabled, localMorphColour, groupName, \n anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError);\n }\n }\n\n const loadGlyphset = (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 scene.addZincObject(newGlyphset);\n };\n\n //Load a glyphset into this scene.\n const onLoadGlyphsetReady = (xmlhttp, glyphurl, groupName, finishCallback, options) => {\n return () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const glyphsetData = JSON.parse(xmlhttp.responseText);\n loadGlyphset(glyphsetData, glyphurl, groupName, finishCallback, options);\n }\n };\n };\n\n //Internal loader for a regular zinc geometry.\n const pointsetloader = (localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newPointset = new (require('./primitives/pointset').Pointset)();\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 5, sizeAttenuation: false });\n if (materials && materials[0]) {\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.color = materials[0].color;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n if (newPointset) {\n newPointset.createMesh(geometry, material, options);\n newPointset.setName(groupName);\n newPointset.anatomicalId = anatomicalId;\n scene.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 = (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(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 = (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(colour, opacity, false,\n false, groupName, undefined, undefined,finishCallback));\n }\n\n //Loader for the OBJ format, \n const objloader = (\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 scene.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 = (url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n let localTimeEnabled = 0;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let fileFormat = (options && options.fileFormat) ? options.fileFormat : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n if (fileFormat !== undefined) {\n if (fileFormat == \"STL\") {\n loader = new STLLoader();\n } else if (fileFormat == \"OBJ\") {\n loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, objloader(colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback), this.onProgress(i), this.onError);\n return;\n }\n }\n if (isInline) {\n var object = loader.parse( url );\n\t\t\t(meshloader(colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, meshloader(colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, finishCallback), this.onProgress(i), this.onError);\n }\n };\n\n //Object to keep track of number of items downloaded and when all items are downloaded\n //allCompletedCallback is called\n const metaFinishCallback = function (numberOfDownloaded, finishCallback, allCompletedCallback) {\n let downloadedItem = 0;\n return zincGeometry => {\n downloadedItem = downloadedItem + 1;\n if (zincGeometry && (finishCallback != undefined) && (typeof finishCallback == 'function')) {\n finishCallback(zincGeometry);\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 = (url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = new JSONLoader();\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (isInline) {\n var object = loader.parse( url );\n (pointsetloader(localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, finishCallback))(object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, pointsetloader(localTimeEnabled, localMorphColour,\n groupName, anatomicalId, renderOrder, finishCallback),\n this.onProgress(i), this.onError);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (metaurl, glyphurl, groupName, finishCallback, options) => {\n let isInline = (options && options.isInline) ? options.isInline : false;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : false;\n if (isInline) {\n loadGlyphset(metaurl, glyphurl, groupName, finishCallback, options);\n } else {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = onLoadGlyphsetReady(xmlhttp, glyphurl,\n groupName, finishCallback, options);\n xmlhttp.open(\"GET\", resolveURL(metaurl), true);\n xmlhttp.send();\n }\n }\n\n //Internal loader for a regular zinc geometry.\n const meshloader = (\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 = scene.addZincGeometry(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 = (referenceURL, item, order, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = (new URL(item.URL, referenceURL)).href;\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n let options = {\n isInline: isInline,\n fileFormat: item.FileFormat,\n anatomicalId: item.AnatomicalId,\n compression: item.compression,\n renderOrder: order\n };\n switch (item.Type) {\n case \"Surfaces\":\n loadSurfaceURL(newURL, item.MorphVertices, item.MorphColours, item.GroupName, finishCallback, options);\n break;\n case \"Glyph\":\n let newGeometryURL = undefined;\n if (!isInline) {\n newGeometryURL = item.GlyphGeometriesURL;\n newGeometryURL = (new URL(item.GlyphGeometriesURL, referenceURL)).href;\n } else {\n newGeometryURL = item.Inline.GlyphGeometriesURL;\n }\n if (item.DisplayLabels) {\n options.displayLabels = true;\n }\n this.loadGlyphsetURL(newURL, newGeometryURL, item.GroupName, finishCallback, options);\n break;\n case \"Points\":\n this.loadPointsetURL(newURL, item.MorphVertices, item.MorphColours, item.GroupName, finishCallback, options);\n break;\n case \"Lines\":\n this.loadLinesURL(newURL, item.MorphVertices, item.MorphColours, item.GroupName, finishCallback, options);\n break;\n default:\n break;\n }\n }\n };\n\n //Function to read the view item first\n const readViewAndSettingsItem = (referenceURL, item, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = (new URL(item.URL, referenceURL)).href;\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n switch (item.Type) {\n case \"View\":\n if (isInline) {\n if (scene.loadView(newURL)) {\n viewLoaded = true;\n }\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n else\n this.loadViewURL(newURL, finishCallback);\n break;\n case \"Settings\":\n this.loadSettings(item);\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n break;\n default:\n break;\n }\n }\n };\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGLTF = (url, finishCallback, options) => {\n const path = url.substring(0, url.lastIndexOf(\"/\") + 1);\n const filename = url.substring(url.lastIndexOf(\"/\") + 1, url.length);\n const loader = new GLTFLoader().setPath(path);\n loader.load( filename, function ( gltf ) {\n console.log(gltf)\n gltf.scene.children.forEach(child => {\n console.log(child)\n let localTimeEnabled = false;\n let localMorphColour = false;\n if (child.geometry && child.geometry.morphAttributes) {\n localTimeEnabled = child.geometry.morphAttributes.position ? true : false;\n localMorphColour = child.geometry.morphAttributes.color ? true : false;\n }\n const zincGeometry = new (require('./primitives/geometry').Geometry)();\n zincGeometry.setMesh(child.clone(), localTimeEnabled, localMorphColour);\n scene.addZincObject(zincGeometry);\n zincGeometry.groupName = zincGeometry.morph.name;\n console.log(zincGeometry)\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n });\n })\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 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 let numberOfObjects = metadata.length;\n // view file does not receive callback\n var callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n // Prioritise the view file and settings before loading anything else\n for (var i = 0; i < metadata.length; i++)\n readViewAndSettingsItem(referenceURL, metadata[i], callback);\n for (var i = 0; i < metadata.length; i++) {\n //Render order is set to i * 2 to account for front and back rendering\n readPrimitivesItem(referenceURL, metadata[i], i * 2, callback);\n }\n }\n }\n\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n}\n","module.exports = require(\"three/examples/jsm/loaders/STLLoader\");","module.exports = require(\"three/examples/jsm/loaders/OBJLoader\");","module.exports = require(\"three/examples/jsm/loaders/GLTFLoader\");","const GLTFExporter = require('./three/GLTFExporter').GLTFExporter;\n\n/**\n * Provides an object which uses for exporting the scene\n * \n * @class\n * @author Alan Wu\n * @return {Zinc.Lines}\n */\nconst SceneExporter = function (sceneIn) {\n const scene = sceneIn;\n\n\tthis.exportGLTF = (binary) => {\n const exporter = new GLTFExporter();\n const options = { binary };\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\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' ) {\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\tconst gltfAttributeName = attributeName.toUpperCase();\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 = attribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n\t\t\t\t\t\tfor ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\trelativeAttribute.setXYZ(\n\t\t\t\t\t\t\t\tj,\n\t\t\t\t\t\t\t\tattribute.getX( j ) - baseAttribute.getX( j ),\n\t\t\t\t\t\t\t\tattribute.getY( j ) - baseAttribute.getY( j ),\n\t\t\t\t\t\t\t\tattribute.getZ( j ) - baseAttribute.getZ( j )\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\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 ], input[ 0 ] );\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\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 };\n\tconst STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM: 4, TOUCH_PAN: 5, SCROLL: 6 };\n\tconst CLICK_ACTION = {};\n\tCLICK_ACTION.MAIN = STATE.ROTATE;\n\tCLICK_ACTION.AUXILIARY = STATE.ZOOM;\n\tCLICK_ACTION.SECONDARY = STATE.PAN;\n\tthis.cameraObject = object;\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\tthis.renderer = renderer;\n\tthis.scene = scene ;\n\tthis.tumble_rate = 1.5;\n\tthis.pointer_x = 0;\n\tthis.pointer_y = 0;\n\tthis.pointer_x_start = 0;\n\tthis.pointer_y_start = 0;\n\tthis.previous_pointer_x = 0;\n\tthis.previous_pointer_y = 0;\n\tthis.near_plane_fly_debt = 0.0;\n\tthis.touchZoomDistanceStart = 0;\n\tthis.touchZoomDistanceEnd = 0;\n\tthis.directionalLight = 0;\n\tthis.scrollRate = 50;\n\tlet duration = 6000;\n\tlet inbuildTime = 0;\n\tlet cameraPath = undefined;\n\tlet numberOfCameraPoint = undefined;\n\tlet updateLightWithPathFlag = false;\n\tlet playRate = 500;\n\tlet deviceOrientationControl = undefined;\n\tconst defaultViewport = new Viewport();\n\tlet currentMode = MODE.DEFAULT;\n\tlet smoothCameraTransitionObject = undefined;\n\tlet rotateCameraTransitionObject = undefined;\n\tlet cameraAutoTumbleObject = undefined;\n\tlet mouseScroll = 0;\n\tthis._state = STATE.NONE;\n\tlet zincRayCaster = undefined;\n\tthis.targetTouchId = -1;\n let rect = undefined;\n const _a = new THREE.Vector3();\n const _b = new THREE.Vector3();\n const _c = new THREE.Vector3();\n const _new_b = new THREE.Vector3();\n const _new_c = new THREE.Vector3();\n const _axis = new THREE.Vector3();\n const _v = new THREE.Vector3();\n const _rel_eye = new THREE.Vector3();\n const sceneSphere = new THREE.Sphere();\n const _tempEye = new THREE.Vector3();\n let maxDist = 0;\n\n\tif (this.cameraObject.target === undefined)\n\t\tthis.cameraObject.target = new THREE.Vector3( 0, 0, 0 );\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\t\n\tthis.onResize = () => {\n\t\tif (rect)\n\t\t\trect = undefined;\n\t}\n\t\n\tthis.setMouseButtonAction = (buttonName, actionName) => {\n\t\tCLICK_ACTION[buttonName] = STATE[actionName];\n }\n\n //Make sure the camera does not travel beyond limit\n const checkTravelDistance = () => {\n if (maxDist > 0) {\n const newDist = _tempEye.distanceTo(sceneSphere.center);\n return (maxDist > newDist || \n this.cameraObject.position.distanceTo(sceneSphere.center) > newDist );\n }\n return true;\n }\n \n const translateViewport = translation => {\n _tempEye.copy(this.cameraObject.position).add(translation);\n if (checkTravelDistance()) {\n this.cameraObject.target.add(translation);\n this.cameraObject.position.add(translation);\n this.updateDirectionalLight();\n }\n }\n\t\n\tconst onDocumentMouseDown = event => {\n\t\tif (rect === undefined)\n rect = this.domElement.getBoundingClientRect();\n // Check if mouse event hapens inside the minimap\n let minimapCoordinates = undefined;\n if (currentMode === MODE.DEFAULT)\n minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(\n this.renderer, event);\n if (!minimapCoordinates) {\n if (event.button == 0) {\n if (event.ctrlKey)\n this._state = CLICK_ACTION.AUXILIARY;\n else if (event.shiftKey)\n this._state = CLICK_ACTION.SECONDARY;\n else\n this._state = CLICK_ACTION.MAIN;\n } else if (event.button == 1) {\n event.preventDefault();\n this._state = CLICK_ACTION.AUXILIARY;\n } \n else if (event.button == 2) {\n this._state = CLICK_ACTION.SECONDARY;\n }\n this.pointer_x = event.clientX - rect.left;\n this.pointer_y = event.clientY - rect.top;\n this.pointer_x_start = this.pointer_x;\n this.pointer_y_start = this.pointer_y;\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y= this.pointer_y;\n } else {\n currentMode = MODE.MINIMAP;\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n }\n\n\tconst onDocumentMouseMove = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tthis.pointer_x = event.clientX - rect.left;\n\t\tthis.pointer_y = event.clientY - rect.top;\n if (currentMode === MODE.MINIMAP) {\n let minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(this.renderer, event);\n if (minimapCoordinates) {\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n } else {\n if ((this._state === STATE.NONE) && (zincRayCaster !== undefined)) {\n zincRayCaster.move(this, event.clientX, event.clientY, this.renderer);\n }\n }\n\t}\n\t\n\tconst onDocumentMouseUp = event => {\n this._state = STATE.NONE;\n if (currentMode == MODE.MINIMAP)\n currentMode = MODE.DEFAULT;\n\t\tif (zincRayCaster !== undefined) {\n\t\t\tif (this.pointer_x_start==(event.clientX - rect.left) && this.pointer_y_start==(event.clientY- rect.top)) {\n\t\t\t\tzincRayCaster.pick(this, event.clientX, event.clientY, this.renderer);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentMouseLeave = event => {\n\t\tthis._state = STATE.NONE;\n\t}\n\t\n\tconst onDocumentTouchStart = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis._state = STATE.TOUCH_ROTATE;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.pointer_x_start = this.pointer_x;\n\t\t\tthis.pointer_y_start = this.pointer_y;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\n\t\t} else if (len == 2) {\n\t\t\tthis._state = STATE.TOUCH_ZOOM;\n\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\tthis.touchZoomDistanceEnd = this.touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\t\t} else if (len == 3) {\n\t\t\tthis._state = STATE.TOUCH_PAN;\n\t\t\tthis.targetTouchId = event.touches[0].identifier;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchMove = event => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t} else if (len == 2) {\n\t\t\tif (this._state === STATE.TOUCH_ZOOM) {\n\t\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\t\tthis.touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\t\t\t}\n\t\t} else if (len == 3) {\n\t\t\tif (this._state === STATE.TOUCH_PAN) {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tif (event.touches[i].identifier == this.targetTouchId) {\n\t\t\t\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\t\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchEnd = event => {\n\t\tconst len = event.touches.length;\n\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd = 0;\n\t\tthis.targetTouchId = -1;\n\t\tthis._state = STATE.NONE;\n\t\tif (len == 1) {\n\t\t\tif (zincRayCaster !== undefined) {\n\t\t\t\tif (this.pointer_x_start==(event.touches[0].clientX- rect.left) && this.pointer_y_start==(event.touches[0].clientY- rect.top)) {\n\t\t\t\t\tzincRayCaster.pick(this.cameraObject, event.touches[0].clientX, event.touches[0].clientY, this.renderer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentWheelEvent = event => {\n\t\tif (rect === undefined)\n\t\t\trect = this.domElement.getBoundingClientRect();\n\t\tthis._state = STATE.SCROLL;\n\t\tlet changes = 0;\n\t\tif (event.deltaY > 0)\n\t\t\tchanges = this.scrollRate;\n\t\telse if (event.deltaY < 0)\n\t\t\tchanges = this.scrollRate * -1;\n\t\tmouseScroll = mouseScroll + changes;\n\t\tevent.preventDefault(); \n\t\tevent.stopImmediatePropagation(); \n\t}\t\n\n\n\tconst translate = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst height = rect.height;\n\t\t\tconst distance = this.cameraObject.position.distanceTo(this.cameraObject.target);\n\t\t\tlet fact = 0.0;\n\t\t\tif ((this.cameraObject.far > this.cameraObject.near) && (distance >= this.cameraObject.near) &&\n\t\t\t\t(distance <= this.cameraObject.far))\n\t\t\t{\n\t\t\t\t fact = (distance-this.cameraObject.near)/(this.cameraObject.far-this.cameraObject.near);\n }\n //_b == old_near, _c = old_far, _new_b = new_near, _new_c = new_far\n\t\t\t_b.set(this.previous_pointer_x,height - this.previous_pointer_y,0.0);\n\t\t\t_c.set(this.previous_pointer_x, height - this.previous_pointer_y,1.0);\n\t\t\t_new_b.set(this.pointer_x,height - this.pointer_y,0.0);\n\t\t\t_new_c.set(this.pointer_x,height - this.pointer_y,1.0);\n\t\t\t_b.unproject(this.cameraObject);\n\t\t\t_c.unproject(this.cameraObject);\n\t\t\t_new_b.unproject(this.cameraObject);\n\t\t\t_new_c.unproject( this.cameraObject);\n const translate_rate = -0.002;\n _new_b.sub(_b).multiplyScalar(1.0-fact);\n _new_c.sub(_c).multiplyScalar(fact);\n _new_b.add(_new_c).multiplyScalar(translate_rate);\n translateViewport(_new_b);\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\n\tthis.getVectorsFromRotateAboutLookAtPoints = (axis, angle) => {\n axis.normalize();\n\t _v.copy(this.cameraObject.position).sub(this.cameraObject.target);\n\t _rel_eye.copy(_v);\n\t _v.normalize()\n\t if (0.8 < Math.abs(_v.dot(axis))) {\n\t _v.copy(this.cameraObject.up);\n }\n _b.crossVectors(axis, _v).normalize();\n _c.crossVectors(axis, _b);\n\t const rel_eyea = axis.dot(_rel_eye);\n\t const rel_eyeb = _b.dot(_rel_eye);\n\t const rel_eyec = _c.dot(_rel_eye);\n\t const upa = axis.dot(this.cameraObject.up); \n\t const upb = _b.dot(this.cameraObject.up);\n\t const upc = _c.dot(this.cameraObject.up);\n\t const cos_angle = Math.cos(angle);\n\t const sin_angle = Math.sin(angle);\n _new_b.set(cos_angle*_b.x+sin_angle*_c.x,\n\t cos_angle*_b.y+sin_angle*_c.y,\n\t cos_angle*_b.z+sin_angle*_c.z);\n\t _new_c.set(cos_angle*_c.x-sin_angle*_b.x,\n\t cos_angle*_c.y-sin_angle*_b.y,\n\t cos_angle*_c.z-sin_angle*_b.z); \n _v.copy(this.cameraObject.target);\n\t _v.x = _v.x + axis.x*rel_eyea + _new_b.x*rel_eyeb+_new_c.x*rel_eyec;\n\t _v.y = _v.y + axis.y*rel_eyea + _new_b.y*rel_eyeb+_new_c.y*rel_eyec;\n\t _v.z = _v.z + axis.z*rel_eyea + _new_b.z*rel_eyeb+_new_c.z*rel_eyec;\n\t _a.set(axis.x*upa+_new_b.x*upb+_new_c.x*upc,\n axis.y*upa+_new_b.y*upb+_new_c.y*upc,\n axis.z*upa+_new_b.z*upb+_new_c.z*upc);\n\t return {position: _v, up: _a};\n\t}\n\t\n\tthis.rotateAboutLookAtpoint = (axis, angle) => {\n\t const returned_values = this.getVectorsFromRotateAboutLookAtPoints(axis, angle);\n\t this.cameraObject.position.copy(returned_values.position);\n\t this.updateDirectionalLight();\n\t this.cameraObject.up.copy(returned_values.up);\n\t}\n\n\tconst tumble = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n\t\t\tconst height = rect.height;\n\t\t\tif ((0<width)&&(0<height))\n\t\t\t{\n\t\t\t\tconst radius=0.25*(width+height);\n\t\t\t\tdelta_x=this.pointer_x-this.previous_pointer_x;\n\t\t\t\tdelta_y=this.previous_pointer_y-this.pointer_y;\n\t\t\t\tconst tangent_dist = Math.sqrt(delta_x*delta_x + delta_y*delta_y);\n\t\t\t\tif (tangent_dist > 0)\n\t\t\t\t{\n\t\t\t\t\tconst dx=-delta_y*1.0/tangent_dist;\n\t\t\t\t\tconst dy=delta_x*1.0/tangent_dist;\n\t\t\t\t\tlet d=dx*(this.pointer_x-0.5*(width-1))+dy*(0.5*(height-1)-this.pointer_y);\n\t\t\t\t\tif (d > radius)\t{\n\t\t\t\t\t\td = radius;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (d < -radius) {\n\t\t\t\t\t\t\td = -radius;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t\t\t\tconst angle=this.tumble_rate*tangent_dist/radius;\n\t\t\t\t\t_a.copy(this.cameraObject.position).sub(this.cameraObject.target).normalize();\n\t\t\t\t\t_b.copy(this.cameraObject.up).normalize();\n _c.copy(_b).cross(_a).normalize().multiplyScalar(dx);\n _b.multiplyScalar(dy);\n _axis.addVectors(_c, _b).multiplyScalar(Math.cos(phi));\n _a.multiplyScalar(Math.sin(phi));\n _axis.add(_a);\n\t\t\t\t\tthis.rotateAboutLookAtpoint(_axis, -angle);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\t\n\tconst calculateZoomDelta = () => {\n\t\tlet delta = 0;\n\t\tif (this._state === STATE.ZOOM)\n\t\t{\n\t\t\tdelta = this.previous_pointer_y-this.pointer_y;\n\t\t} else if (this._state === STATE.SCROLL) {\n\t\t\tdelta = mouseScroll;\n\t\t} else {\n\t\t\tdelta = -1.0 * (this.touchZoomDistanceEnd - this.touchZoomDistanceStart);\n\t\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd;\n\t\t}\n\t\treturn delta;\n }\n\n this.changeZoomByScrollRateUnit = unit => {\n const delta_y = unit * this.scrollRate;\n this.changeZoomByValue(delta_y);\n }\n \n this.changeZoomByValue = delta_y => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect.width;\n const height = rect.height;\n\n\t\t\tconst a = this.cameraObject.position.clone();\n\t\t\ta.sub(this.cameraObject.target);\n\t\t\tconst dist = a.length();\n\t\t\tconst dy = 1.5 * delta_y/height;\n\t\t\tif ((dist + dy*dist) > 0.01) {\n\t\t\t\ta.normalize()\n _tempEye.copy(this.cameraObject.position);\n\t\t\t\t_tempEye.x += a.x*dy*dist;\n\t\t\t\t_tempEye.y += a.y*dy*dist;\n\t\t\t\t_tempEye.z += a.z*dy*dist;\n if (checkTravelDistance()) {\n this.cameraObject.position.copy(_tempEye);\n this.updateDirectionalLight();\n const near_far_minimum_ratio = 0.00001;\n if ((near_far_minimum_ratio * this.cameraObject.far) <\n (this.cameraObject.near + dy*dist + this.near_plane_fly_debt)) {\n if (this.near_plane_fly_debt != 0.0)\t{\n this.near_plane_fly_debt += dy*dist;\n if (this.near_plane_fly_debt > 0.0) {\n this.cameraObject.near += this.near_plane_fly_debt;\n this.cameraObject.far += this.near_plane_fly_debt;\n this.near_plane_fly_debt = 0.0;\n }\n else {\n this.cameraObject.near += dy*dist;\n this.cameraObject.far += dy*dist;\n }\n }\t\t\t\n }\n else {\n if (this.near_plane_fly_debt == 0.0) {\n const diff = this.cameraObject.near - near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.near = near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.far -= diff;\n this.near_plane_fly_debt -= near_far_minimum_ratio * this.cameraObject.far;\n }\n this.near_plane_fly_debt += dy*dist;\n }\n }\n\t\t\t}\n\t\t}\n }\n\t\n\tconst flyZoom = () => {\n const delta_y = calculateZoomDelta();\n this.changeZoomByValue(delta_y);\n \n\t\tif (this._state === STATE.ZOOM) {\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y = this.pointer_y;\n\t\t}\n\t\tif (this._state === STATE.SCROLL) {\n\t\t\tmouseScroll = 0;\n\t\t}\n\t}\n\t\n\tthis.setDirectionalLight = directionalLightIn => {\n\t\tthis.directionalLight = directionalLightIn;\n\t};\n\t\n\tthis.updateDirectionalLight = () => {\n\t\tif (this.directionalLight != 0) {\n\t\t\tthis.directionalLight.position.set(this.cameraObject.position.x,\n\t\t\t\t\tthis.cameraObject.position.y,\n\t\t\t\t\tthis.cameraObject.position.z);\n\t\t}\n\t}\n\t\n\t\n\tthis.enable = function () {\n\t\tenabled = true;\n\t\tif (this.domElement && this.domElement.addEventListener) {\n\t\t\tthis.domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.addEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.addEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.addEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.addEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.addEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.addEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\t\n\tthis.disable = function () {\n\t\tenabled = false;\n\t\tif (this.domElement && this.domElement.removeEventListener) {\n\t\t\tthis.domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.removeEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t }\n\t}\n\n\tthis.loadPath = pathData => {\n\t\tcameraPath = pathData.CameraPath;\n\t\tnumberOfCameraPoint = pathData.NumberOfPoints;\n\t}\n\t\n\tthis.loadPathURL = (path_url, finishCallback) => {\n\t\tconst xmlhttp = new XMLHttpRequest();\n\t\txmlhttp.onreadystatechange = () => {\n\t\t if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n\t\t const pathData = JSON.parse(xmlhttp.responseText);\n\t\t this.loadPath(pathData);\n\t if (finishCallback != undefined && (typeof finishCallback == 'function'))\n\t finishCallback();\n\t\t }\n\t\t}\n\t\trequestURL = resolveURL(path_url);\n\t\txmlhttp.open(\"GET\", requestURL, true);\n\t\txmlhttp.send();\n\t}\n\t\n\tthis.setPathDuration = durationIn => {\n duration = durationIn;\n if (smoothCameraTransitionObject)\n smoothCameraTransitionObject.setDuration(duration);\n if (rotateCameraTransitionObject)\n rotateCameraTransitionObject.setDuration(duration);\n\t}\n\t\n\t this.getPlayRate = () => {\n\t return playRate;\n\t }\n\t\n\tthis.setPlayRate = playRateIn => {\n\t\tplayRate = playRateIn;\n\t}\n\t \n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = targetTime - duration\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\t this.getTime = () => {\n\t return inbuildTime;\n\t }\n\t\n\tthis.setTime = timeIn => {\n\t if (timeIn > duration)\n\t inbuildTime = duration;\n\t else if (timeIn < 0.0)\n\t inbuildTime = 0.0;\n\t else\n\t inbuildTime = timeIn;\n\t}\n\t\n\tthis.getNumberOfTimeFrame = () => {\n\t\treturn numberOfCameraPoint;\n\t}\n\t\n\tthis.getCurrentTimeFrame = () => {\n\t if (numberOfCameraPoint > 2) {\n \t\tconst current_time = inbuildTime/duration * (numberOfCameraPoint - 1);\n \t\tconst bottom_frame = Math.floor(current_time);\n \t\tconst proportion = 1 - (current_time - bottom_frame);\n \t\tconst top_frame = Math.ceil(current_time);\n \t\tif (bottom_frame == top_frame) {\n \t\t\tif (bottom_frame == numberOfCameraPoint - 1) {\n \t\t\t\treturn [bottom_frame - 1, top_frame, 0];\n \t\t\t} else {\n \t\t\t\treturn [bottom_frame, top_frame + 1, 1.0];\n \t\t\t}\n \t\t}\n \t\treturn [bottom_frame, top_frame, proportion];\n\t } else if (numberOfCameraPoint == 1) {\n\t return [0, 0, 0];\n\t }\n\t \n\t return undefined;\n\t}\n\t\n\tthis.setCurrentTimeFrame = targetTimeFrame => {\n\t if (numberOfCameraPoint > 2) {\n \t\tinbuildTime = duration * targetTimeFrame / (numberOfCameraPoint - 1);\n \t\tif (inbuildTime < 0.0)\n \t\t\tinbuildTime = 0.0;\n \t\tif (inbuildTime > duration)\n \t\t\tinbuildTime = duration;\n\t }\n\t}\n\n\tconst updatePath = delta => {\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdateTime(delta);\n\t\t\tif (cameraPath) {\n\t\t\t\tconst time_frame = this.getCurrentTimeFrame();\n\t\t\t\tconst bottom_frame = time_frame[0];\n\t\t\t\tconst top_frame = time_frame[1];\n\t\t\t\tconst proportion = time_frame[2];\n\t\t\t\tconst bot_pos = [cameraPath[bottom_frame*3], cameraPath[bottom_frame*3+1], cameraPath[bottom_frame*3+2]];\n\t\t\t\tconst top_pos = [cameraPath[top_frame*3], cameraPath[top_frame*3+1], cameraPath[top_frame*3+2]];\n\t\t\t\tconst current_positions = [];\n\t\t\t\tfor (let i = 0; i < bot_pos.length; i++) {\n\t\t\t\t\tcurrent_positions.push(proportion * bot_pos[i] + (1.0 - proportion) * top_pos[i]);\n\t\t\t\t}\n\t\t\t\tthis.cameraObject.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\tthis.cameraObject.target.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\tif (deviceOrientationControl)\n\t\t\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t\t\tif (updateLightWithPathFlag) {\n\t\t\t\t\tthis.directionalLight.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\t\tthis.directionalLight.target.position.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t};\n\t\n\tthis.calculatePathNow = () => {\n\t updatePath(0.0);\n\t}\n\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}\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\t\tthis.cameraObject.near = defaultViewport.nearPlane;\n\t\tthis.cameraObject.far = defaultViewport.farPlane;\n\t\tthis.cameraObject.position.set( defaultViewport.eyePosition[0], defaultViewport.eyePosition[1],\n\t\t\t\tdefaultViewport.eyePosition[2]);\n\t\tthis.cameraObject.target.set( defaultViewport.targetPosition[0],\n\t\t\t\tdefaultViewport.targetPosition[1], defaultViewport.targetPosition[2] );\n\t\tthis.cameraObject.up.set( defaultViewport.upVector[0], defaultViewport.upVector[1],\n\t\t\t\tdefaultViewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\t\n\tthis.setDefaultCameraSettings = newViewport => {\n\t\tif (newViewport.nearPlane)\n\t\t\tdefaultViewport.nearPlane = newViewport.nearPlane;\n\t\tif (newViewport.farPlane)\n\t\t\tdefaultViewport.farPlane = newViewport.farPlane;\n\t\tif (newViewport.eyePosition)\n\t\t\tdefaultViewport.eyePosition = newViewport.eyePosition;\n\t\tif (newViewport.targetPosition)\n\t\t\tdefaultViewport.targetPosition = newViewport.targetPosition;\n\t\tif (newViewport.upVector)\n\t\t\tdefaultViewport.upVector = newViewport.upVector;\t\n\t}\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\t\n\tthis.getDefaultViewport = () => {\n\t\treturn defaultViewport;\n\t}\n\t\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\t this.enableRaycaster = (sceneIn, callbackFunctionIn, hoverCallbackFunctionIn) => {\n\t if (zincRayCaster == undefined)\n\t zincRayCaster = new RayCaster(sceneIn, this.scene, callbackFunctionIn, hoverCallbackFunctionIn, this.renderer);\n\t }\n\t \n\t this.disableRaycaster = () => {\n\t zincRayCaster.disable();\n\t zincRayCaster = undefined;\n\t }\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\t\n \n const updateCameraSettings = delta => {\n const previousTime = inbuildTime;\n let targetTime = inbuildTime + delta;\n if (targetTime > duration)\n targetTime = duration;\n inbuildTime = targetTime;\n const actualDelta = inbuildTime - previousTime;\n const ratio = actualDelta / duration;\n const alpha = ratio * angle;\n targetCamera.rotateAboutLookAtpoint(axis, alpha);\n };\n \n this.update = delta => {\n\n if ( this.enabled === false ) return;\n \n updateCameraSettings(delta);\n \n if (inbuildTime == duration) {\n completed = true;\n }\n\n }\n \n this.isTransitionCompleted = () => {\n return completed;\n }\n}\n\nconst RayCaster = function (sceneIn, hostSceneIn, callbackFunctionIn, hoverCallbackFunctionIn, rendererIn) {\n const scene = sceneIn;\n const hostScene = hostSceneIn;\n\tconst renderer = rendererIn;\n\tconst callbackFunction = callbackFunctionIn;\n\tconst hoverCallbackFunction = hoverCallbackFunctionIn;\n\tconst enabled = true;\n\tconst raycaster = new THREE.Raycaster();\n\traycaster.params.Line.threshold = 0.1;\n\traycaster.params.Points.threshold = 0.1;\n const mouse = new THREE.Vector2();\n let lastHovered = undefined;\n let cooldown = false;\n\t\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\t\n\tconst getIntersectsObject = (zincCamera, x, y) => {\n\t\tconst rect = zincCamera.domElement.getBoundingClientRect();\n\t\tmouse.x = ((x - rect.left) / rect.width) * 2 - 1;\n mouse.y = -((y - rect.top) / rect.height) * 2 + 1;\n if (hostScene !== scene) {\n const threejsScene = scene.getThreeJSScene();\n renderer.render(threejsScene, zincCamera.cameraObject);\n }\n raycaster.setFromCamera( mouse, zincCamera.cameraObject);\n let objects = scene.getPickableThreeJSObjects();\n\t\treturn raycaster.intersectObjects( objects, true );\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tconst intersects = getIntersectsObject(zincCamera, x, y);\n\t\t\tcallbackFunction(intersects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n const intersects = getIntersectsObject(zincCamera, x, y);\n lastHovered = new Date();\n hoverCallbackFunction(intersects, x, y);\n }\n }\n\t\n\tthis.move = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n if (scene.displayMarkers) {\n hovered(zincCamera, x, y);\n } else {\n if (!cooldown) {\n let now = new Date();\n if (!lastHovered || ( (now.getTime() - lastHovered.getTime()) > 250)) {\n hovered(zincCamera, x, y);\n } else {\n cooldown = true;\n setTimeout(awaitMove(zincCamera, x, y), 250);\n }\n }\n }\n }\n }\n \n let awaitMove = (zincCamera,x,y) => {\n return function() {\n cooldown = false;\n hovered(zincCamera, x, y);\n }\n }\n};\n\nconst CameraAutoTumble = function (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, targetCameraIn) {\n\tconst tumbleAxis = new THREE.Vector3();\n\tconst angle = -tumbleRateIn;\n\tconst targetCamera = targetCameraIn;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tconst tumbleDirection = tumbleDirectionIn;\n\tthis.stopOnCameraInput = stopOnCameraInputIn;\n this.requireUpdate = true;\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n\t\n\tconst computeTumbleAxisAngle = tumbleDirection => {\n\t\tconst tangent_dist = Math.sqrt(tumbleDirection[0]*tumbleDirection[0] +\n\t\t\ttumbleDirection[1]*tumbleDirection[1]);\n\t\tconst width = Math.abs(tumbleDirection[0]) * 4.0;\n\t\tconst height = Math.abs(tumbleDirection[1]) * 4.0;\n\t\tconst radius = 0.25 * (width + height);\n\t\tconst dx = -tumbleDirection[1]/tangent_dist;\n\t\tconst dy = tumbleDirection[0]/tangent_dist;\n\t\tlet d = dx*(tumbleDirection[0])+dy*(-tumbleDirection[1]);\n\t\t\n\t\tif (d > radius)\n\t\t{\n\t\t\td = radius;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (d < -radius)\n\t\t\t{\n\t\t\t\td = -radius;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t/* get axis to rotate about */\n\t\ttumbleAxis.copy(targetCamera.cameraObject.position).sub(\n targetCamera.cameraObject.target).normalize();\n\t\tb.copy(targetCamera.cameraObject.up).normalize();\n c.crossVectors(b, tumbleAxis).normalize().multiplyScalar(dx);\n b.multiplyScalar(dy);\n b.add(c).multiplyScalar(Math.cos(phi));\n tumbleAxis.multiplyScalar(Math.sin(phi)).add(b);\n\t};\n\t\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tif (this.requireUpdate) {\n\t\t\tcomputeTumbleAxisAngle(tumbleDirection);\n\t\t\tthis.requireUpdate = false;\n\t\t}\n\t\ttargetCamera.rotateAboutLookAtpoint(tumbleAxis, angle * delta/1000);\n\n\t}\n\t\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\nStereoCameraZoomFixed = function () {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.cameraL = new THREE.PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new THREE.PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n};\n\nObject.assign( StereoCameraZoomFixed.prototype, {\n\n\tupdate: (() => {\n\n\t\tlet focus, fov, aspect, near, far, zoom;\n\n\t\tconst eyeRight = new THREE.Matrix4();\n\t\tconst eyeLeft = new THREE.Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tconst needsUpdate = focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tconst eyeSep = 0.064 / 2;\n\t\t\t\tconst eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tconst ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ) / camera.zoom;\n\t\t\t\tlet xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t})()\n\n} );\n\n/** the following StereoEffect is written by third party */\n/**\n * @author alteredq / http://alteredqualia.com/\n * @authod mrdoob / http://mrdoob.com/\n * @authod arodic / http://aleksandarrodic.com/\n * @authod fonserbc / http://fonserbc.github.io/\n*/\nconst StereoEffect = function ( renderer ) {\n\n\tconst _stereo = new StereoCameraZoomFixed();\n\t_stereo.aspect = 0.5;\n\n\tthis.setSize = (width, height) => {\n\n\t\trenderer.setSize( width, height );\n\n\t};\n\n\tthis.render = (scene, camera) => {\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t_stereo.update( camera );\n\n\t\tconst size = renderer.getSize();\n\n\t\trenderer.setScissorTest( true );\n\t\trenderer.clear();\n\n\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\trenderer.setScissorTest( false );\n\n\t};\n\n};\n\n\n/**\n * @author richt / http://richt.me\n * @author WestLangley / http://github.com/WestLangley\n *\n * W3C Device Orientation control (http://w3c.github.io/deviceorientation/spec-source-orientation.html)\n */\n\nModifiedDeviceOrientationControls = function ( object ) {\n\n\tconst scope = this;\n\n\tthis.object = object; \n\tthis.object.rotation.reorder( \"YXZ\" );\n\n\tthis.enabled = true;\n\n\tthis.deviceOrientation = {};\n\tthis.screenOrientation = 0;\n\n\tconst onDeviceOrientationChangeEvent = event => {\n\n\t\tscope.deviceOrientation = event;\n\n\t};\n\n\tconst onScreenOrientationChangeEvent = () => {\n\t if (typeof(window) !== 'undefined')\n\t scope.screenOrientation = window.orientation || 0;\n\n\t};\n\n\t// The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n\n\tconst setObjectQuaternion = (() => {\n\n\t\tconst zee = new THREE.Vector3( 0, 0, 1 );\n\n\t\tconst euler = new THREE.Euler();\n\n\t\tconst q0 = new THREE.Quaternion();\n\n\t\tconst q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis\n\n\t\treturn (cameraObject, alpha, beta, gamma, orient) => {\n\t\t\t\n\t\t\tconst vector = new THREE.Vector3(0, 0, 1);\n\t\t\t\n\t\t\tvector.subVectors(cameraObject.target, cameraObject.position);\n\n\t\t\teuler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us\n\n\t\t\tconst quaternion = new THREE.Quaternion();\n\t\t\t\n\t\t\tquaternion.setFromEuler( euler ); // orient the device\n\n\t\t\tquaternion.multiply( q1 ); // camera looks out the back of the device, not the top\n\n\t\t\tquaternion.multiply( q0.setFromAxisAngle( zee, - orient ) ); // adjust for screen orientation\n\t\t\t\n\t\t\tvector.applyQuaternion(quaternion);\n\t\t\t\t\n\t\t\tvector.addVectors(cameraObject.position, vector);\n\t\t\t\n\t\t\tcameraObject.lookAt(vector);\n\n\t\t};\n\n\t})();\n\n\tthis.connect = () => {\n\n\t\tonScreenOrientationChangeEvent(); // run once on load\n\t\tif (typeof(window) !== 'undefined') {\n\t\t window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t\t}\n\t\tscope.enabled = true;\n\n\t};\n\n\tthis.disconnect = () => {\n\t if (typeof(window) !== 'undefined') {\n\t window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t }\n\t\tscope.enabled = false;\n\n\t};\n\n\tthis.update = () => {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tconst alpha = scope.deviceOrientation.alpha ? THREE.Math.degToRad( scope.deviceOrientation.alpha ) : 0; // Z\n\t\tconst beta = scope.deviceOrientation.beta ? THREE.Math.degToRad( scope.deviceOrientation.beta ) : 0; // X'\n\t\tconst gamma = scope.deviceOrientation.gamma ? THREE.Math.degToRad( scope.deviceOrientation.gamma ) : 0; // Y''\n\t\tconst orient = scope.screenOrientation ? THREE.Math.degToRad( scope.screenOrientation ) : 0; // O\n\n\t\tsetObjectQuaternion( scope.object, alpha, beta, gamma, orient );\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tthis.disconnect();\n\n\t};\n\n\tthis.connect();\n\n};\n\nexports.Viewport = Viewport\nexports.CameraControls = CameraControls\nexports.SmoothCameraTransition = SmoothCameraTransition\nexports.RotateCameraTransition = RotateCameraTransition\nexports.RayCaster = RayCaster\nexports.CameraAutoTumble = CameraAutoTumble\nexports.StereoEffect = StereoEffect\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":""}