{"version":3,"sources":["webpack:///webpack/bootstrap 9574f68a68468e60be64","webpack:///./src/api/utils/cik/Utils.js","webpack:///./src/api/utils/cik/Signaler.js","webpack:///./src/api/utils/cik/config/datGUIConsole.js","webpack:///./src/api/utils/cik/Logger.js","webpack:///./src/api/components/assets/Asset.js","webpack:///./src/api/components/box/BoxEntry.js","webpack:///./src/api/components/common/CargoEntry.js","webpack:///./src/api/packer/container/Container.js","webpack:///./src/api/packer/cubX/core/Math2D.js","webpack:///./src/api/components/LightDispatcher.js","webpack:///./src/api/utils/cik/config/Config.js","webpack:///./src/api/packer/cubX/core/Region.js","webpack:///./src/api/App.js","webpack:///./src/api/packer/Packer.js","webpack:///./src/api/packer/container/ContainingVolume.js","webpack:///./src/api/packer/cubX/core/Components.js","webpack:///./src/api/view/SceneSetup.js","webpack:///./src/api/scene/Camera.js","webpack:///./src/api/utils/cik/Tween.js","webpack:///./src/api/utils/cik/Pool.js","webpack:///./src/api/view/CargoBoxView.js","webpack:///./src/api/view/CargoView.js","webpack:///./src/api/UX.js","webpack:///./src/api/view/CargoListView.js","webpack:///./src/api/utils/cik/config/Smart.js","webpack:///./src/api/components/box/Dimensions.js","webpack:///./src/api/debug/RuntimeTester.js","webpack:///./src/api/Resources.js","webpack:///./src/api/packer/CargoGroup.js","webpack:///./src/api/utils/cik/config/UIUtils.js","webpack:///./src/api/utils/cik/config/Control3D.js","webpack:///./src/api/packer/CargoList.js","webpack:///./src/api/packer/PackingSpace.js","webpack:///./src/api/packer/cubX/CUBDebug.js","webpack:///./src/api/packer/cubX/heuristics/Heuristic.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/api/utils/cik/input/UpdateComponent.js","webpack:///./src/api/utils/cik/input/RaycastGroup.js","webpack:///./src/api/scene/Controller.js","webpack:///./src/api/view/EntryInputView.js","webpack:///./src/api/components/common/TextField.js","webpack:///./src/api/view/components/TextLabelView.js","webpack:///./src/api/Constants.js","webpack:///./src/api/utils/cik/config/datGUIExtensions.js","webpack:///./src/api/packer/cubX/core/RegionsTree.js","webpack:///./src/api/debug/Debug.js","webpack:///./src/api/packer/cubX/core/PackedComponents.js","webpack:///./src/api/view/PackingSpaceView.js","webpack:///./src/api/view/ContainerView.js","webpack:///./src/api/view/PackResultView.js","webpack:///./src/api/view/dom/DomUI.js","webpack:///./src/api/components/CargoInput.js","webpack:///./src/api/components/PackingSpaceInput.js","webpack:///./src/api/components/PackerInterface.js","webpack:///./src/dev.js","webpack:///./src/FreightPacker.js","webpack:///./src/api/utils/Capabilities.js","webpack:///./src/api/utils/cik/input/Input.js","webpack:///./src/min-dependencies/lib/keypress.js","webpack:///./src/api/utils/cik/Quality.js","webpack:///./src/api/scene/Renderer.js","webpack:///./src/min-dependencies/lib/three/controls/OrbitControls.js","webpack:///./src/api/view/HUDView.js","webpack:///./src/api/scene/Transform.js","webpack:///./src/api/components/box/PackingProperty.js","webpack:///./src/api/components/assets/ColorTemplate.js","webpack:///./src/api/utils/cik/transitions/Transition.js","webpack:///./src/api/components/Visualization.js","webpack:///./src/api/components/User.js","webpack:///./src/api/packer/Cargo.js","webpack:///./src/api/view/components/FloatingShelf.js","webpack:///./src/api/view/components/Outline.js","webpack:///./src/min-dependencies/lib/three/controls/TransformControls.js","webpack:///./src/api/packer/container/Volume.js","webpack:///./src/api/packer/cubX/CUB.js","webpack:///./src/api/packer/afit/AFitTest.js","webpack:///./src/api/packer/afit/components/Item.js","webpack:///./src/api/packer/afit/components/Container.js","webpack:///./src/api/packer/cubX/heuristics/HeuRegular.js","webpack:///./src/api/packer/cubX/heuristics/HeuParametric1.js","webpack:///./src/api/view/View.js","webpack:///./src/api/view/PackedCargoBoxView.js","webpack:///./src/api/view/components/Musipack.js","webpack:///./src/api/view/OrthoviewsNavigator.js","webpack:///./src/api/utils/cik/NaNRecovery.js"],"names":["trimVariableRegex","RegExp","twopi","Math","PI","goldenRatio","sqrt","goldenRatioConjugate","typeofObject","Utils","object","constructor","classProperties","instanceProperties","prototype","def","Object","assign","defineProperties","getOwnPropertyDescriptors","target","source","keys","forEach","key","AssignUndefined","undefined","obj","JSON","parse","stringify","element","style","window","getComputedStyle","marginLeft","parseFloat","marginTop","paddingLeft","paddingTop","x","y","input","replace","str","length","substring","i","len","divisions","callback","da","a","cos","b","sin","nc","ns","t","c","d","color","THREE","Color","r","g","z","set","base","vector","fixed","toFixed","w","Signaler","signals","dispatches","event","args","On","push","eventCallbacks","once","splice","indexOf","callbacks","index","defaultGUIParams","publish","dat","guis","controllers","Controller","label","onChangeCallback","onChange","valueProp","get","value","defineProperty","list","isFunction","step","listen","updateDisplay","GUI","params","data","__controllers","__folders","add","controller","toString","addFolder","folder","open","domElement","document","createElement","result","iKey","listProp","destroy","logType","trace","normal","warn","logTypeLabel","defaultPrintFilter","programStartTime","Date","now","messages","warnOnce","Message","type","timestamp","content","arg","json","substr","err","Logger","message","_active","AddLog","_toConsole","_traceToConsole","groupCollapsed","console","groupEnd","log","id","Log","Warn","filter","output","ToString","active","SolidMaterialType","MeshStandardMaterial","TransparentMaterialType","InvisibleMaterialType","MeshBasicMaterial","defaultGeometry","CubeGeometry","defaultMeshMaterial","objectLoader","ObjectLoader","jsonLoader","JSONLoader","castShadow","receiveShadow","colorTemplates","Map","signaler","resourcesSet","_resources","Symbol","Asset","url","material","mapName","Promise","resolve","reject","OnIncludingPrior","texture","Texture","TextureLoader","load","resources","texturesPath","roughness","metalness","geometry","mesh","Mesh","modified","setHex","getHex","reduce","clamp","opacity","transparent","texturePath","CastReceiveShadow","traverse","child","colors","template","ColorTemplate","Dispatch","CreateColorTemplate","numEntries","getDefaultLabel","epsilon","pow","numberType","BoxEntry","dimensions","Dimensions","weight","quantity","properties","stacking","StackingProperty","rotation","RotationConstraint","translation","TranslationConstraint","descriptions","TextField","Reset","defaultContent","clear","entry","Copy","field","own","Clone","Assert","CargoEntry","_weight","uid","generateUUID","has","delete","combinedVolume","ContainingVolume","Container","volumes","WarnOnce","volume","numVolumes","minX","Number","MAX_SAFE_INTEGER","minY","minZ","maxX","MIN_SAFE_INTEGER","maxY","maxZ","combinedWeightCapacity","pos","position","dim","width","height","weightCapacity","container","Set","containingVolume","FromJSON","Add","smallValue","smallValueSqrt","segmentIntersect","x1","y1","x2","y2","x3","y3","x4","y4","denominator","abs","ua","ub","linesIntersect","ax","ay","bx","by","cx","cy","dx","dy","a1","b1","c1","a2","b2","c2","determinant","rectangleContainsPoint","offset","rx","ry","rw","rh","px","py","h","rectangleContainsRectangle","ox","oy","ow","oh","rectanglesFromPoints","points","toInt","round","xs","xCat","floor","point","ys","yCat","insert","iY","sortYCat","xsKeys","iX","sort","intersectedXs","xCat1","ys1","iX2","xCat2","ys2","yIntersect","xIntersect","iY1","iY2","rectangles","iIX","intersectedX","p1","p2","p3","p4","rectangle","reduceRectangles","iRect","ra","aw","ah","jRect","rb","bw","bh","max","segmentContainsPoint","vx","vy","vxa","vya","vxb","vyb","db","_signals","_dispatches","LightDispatcher","serializeModes","none","property","min","createKeyInfo","isFolderGrouped","propertyPath","split","slice","join","shift","owner","getKey","setKey","val","endKey","download","filename","file","Blob","navigator","msSaveOrOpenBlob","URL","createObjectURL","href","body","appendChild","click","setTimeout","removeChild","revokeObjectURL","defaultEditParams","save","debug","Shortcut","Config","shortcutsGUI","shortcuts","instances","ignoreKeys","isController","keyInfo","keyValue","ignoredKey","saveValue","isColor","parseInt","toJSON","Update","Snapshot","guiChanged","gui","require","default","autoPlace","editing","updateAll","find","addFunction","addColor","call","scope","editor","Save","Debug","Serialize","defaultsFolder","serializeMode","unrolled","subProperties","subProperty","category","shortcut","setRectangleWeights","rect","stackingCapacity","Array","maxWeightValue","Region","preferredX","SetWeights","region","l","tempCorners","tempPoints","pz","subRegion","rz","rl","other","grounded","tempRegion","fit","weightFit","minRegionAxis","newRegions","axis","size","east","west","over","south","ptsA","GetFloorPoints","ptsB","tempPoints2","adjacent","intersections","iA","nextA","az","nax","naz","iB","nextB","bz","nbx","nbz","intersection","rectA","rectB","format","nf","n","numberFormat","start","App","containerDiv","ux","cargoInput","packingSpaceInput","packerInterface","packerParams","packer","Packer","CargoInput","boxEntry","cargoList","modify","Modify","SolveAgain","remove","Remove","PackingSpaceInput","containerLoaded","packingSpace","AddContainer","PackerInterface","solveRequest","solverParams","Solve","domUI","DomUI","sceneSetup","SceneSetup","Init","then","Start","bind","viewParams","view","View","_Bind","resetColor","show","existingEntry","GetEntry","previewColorBackup","Description","hud","Preview","hideEntryPreview","hide","onPackUpdate","packingResult","_Notify","solved","packUpdate","onPackFailed","error","failed","packFailed","autoUpdatePack","solveAgain","ClearPackingResults","CUB","typeofHeuristicParams","heuristics","HeuParametric1","Params","extractHeuristicParams","cubParams","heuristicParams","scoringWeight","score_minLength","score_minWastedSpace","scoring","minWaste","PackedCargo","orientation","UnpackedCargo","unpackedQuantity","PackingResult","numTotalItems","runtime","packed","unpacked","defaultParams","_solverParams","PackingSpace","CargoList","solverExecutionsCount","algorithm","algorithmParams","SolveCUB","ready","Item","current","items","entries","groups","values","group","validOrientations","enabled","allowedOrientations","capacity","defaultStackingFactor","item","startTime","performance","heuristic","pack","cubRuntime","cubRuntime2Dec","packedItems","packedItem","ref","Vector3","packedWidth","packedHeight","packedLength","ResolveOrientation","packedCargo","unpackedItems","unpackedItem","unpackedCargo","_weightCapacity","SetUID","Volume","typeofNumber","_maxHeight","_validOrientations","orientations","xyz","zyx","yxz","yzx","zxy","xzy","q","vo","toLowerCase","maxHeight","GetOrientedDimensions","minDimensions","iItem","numItems","iOrient","init","started","paused","stopped","quality","Quality","Common","units","controllerParams","sceneController","rendererParams","clearColor","backgroundColor","sceneRenderer","Renderer","renderer","toneMappingExposure","cameraParams","fov","aspect","near","far","cameraController","Camera","OrbitControls","Input","camera","sceneRendererRef","appCameraRef","onResize","screen","ReconfigureViewport","hudParams","hudCameraParams","HUDView","hudCameraRef","AdjustCamera","autoClear","setupParams","gridHelper","SetTarget","GridHelper","AddDefault","configure","Configure","scene1","scene","camera1","scene2","camera2","animationFrameID","requestAnimationFrame","Render","clearDepth","screenNeedsUpdate","cameraNeedsUpdate","cancelAnimationFrame","Dispose","helpers","ambientLight","AmbientLight","directionalLight","DirectionalLight","ambientContainer","directionalLightComplem","onGUIChanged","dl","shadow","updateProjectionMatrix","UpdateShadowMaps","map","mapSize","manhattanDistanceTo","copy","dispose","dlHelper","update","dlCameraHelper","Smart","Control3D","smart","MakeShortcut","lightController","shadowControllers","shadowCameraControllers","Unroll","DirectionalLightHelper","CameraHelper","global","clone","appControl3D","control","hudControl3D","toggle","toggleOrbitOwner","orbitControls","Hold","Release","hudCam","print","config","VecToString","rotationProperties","rotationControllers","Multiple","tempCoords","ownCoords","center","tempVec3","tempVec3_b","change","userChange","PerspectiveCamera","name","changed","dollyAnimation","Tween","Combo","RequestN","functions","ease","easeInOutQuad","lookAt","onDollyAnimationComplete","onComplete","Hook","fovAnimation","onFOVAnimationComplete","fpsControls","Navigation","FirstPerson","speed","speedX","speedY","damping","momentum","limitPhi","moveSpeed","keyControls","controls","lookTarget","getWorldDirection","multiplyScalar","addEventListener","e","distanceTo","v","subVectors","saveState","reset","maxDistance","maxPolarAngle","autoRotate","LerpRotation","FirstPersonControls","quat","Quaternion","applyQuaternion","getWorldQuaternion","normalize","box3","distanceMultiplier","extent","getSize","frameSize","distance","getCenter","coords","CalcFrameCoords","duration","endCoords","TransitionFromToCoords","startCoords","SetDurations","p","SetStartValues","tp","SetDeltas","Restart","deltaFOV","startValue","delta","TweenCallback","time","TweenCompletedCallback","clock","Clock","poolNewFN","poolResetFN","tween","pool","Pool","linear","easeOutElastic","ts","tc","easeOutQuad","easeOutCubic","special","pingPong","TweenComboCompletedCallback","TweenCombo","tweens","completed","Unhook","Return","startValue0","delta0","startValue1","delta1","startValue2","delta2","tween0","Request","tween1","tween2","combo","getElapsedTime","endValue","_new","_reset","fnNew","fnReset","objects","unitCubeGeometry","BoxBufferGeometry","materialTemplate","flatShading","brightnessRange","hueBase","random","nextColor","setHSL","GoldenSeries","_materialSettings","_color","typeofString","CargoBoxView","colorHex","scale","vec3","labelView","s","SetScale","RestoreMaterial","SetMaterialFocus","focus","CargoView","dummyGeometry","SphereBufferGeometry","dummyMaterial","_entry","_focus","Object3D","tlvParams","font","backColor","fontColor","textAlign","sidePadding","ratioToX","TextLabelView","rotateY","rotateX","UpdateText","cargoView","scaleRefFigure","Constants","man","UX","app","visualization","Visualization","user","User","_selectedEntryUID","labels","tempBox","Box3","tempVec","select","deselect","interact","outlineOffset","CargoListView","templatesView","cargoTemplateViews","fsParams","padding","ColorTemplates","Apply","floatingShelf","FloatingShelf","raycastGroupItems","raycastGroup","RaycastGroup","OnInteract","outline","Outline","offsetFactor","slidingAnimation","originalPosition","onAnimationComplete","templateCargoView","ticketParams","Dummy","UpdateItems","Sort","ReflectEntry","SetOutline","raycastGroupIndex","box","entryUID","GetTemplate","targetY","deltaY","CargoGroup","cargoGroup","textColor","textLabelView","SortMapBySize","updateMatrixWorld","worldToLocal","Matrix4","getInverse","matrixWorld","cargoes","next","done","setFromObject","applyMatrix4","halfSize","Compare","onFocus","onFocusLost","draggable","Draggable","closeBtn","onclick","Hide","ui","Element","Delete","UpdateGUI","visible","SetCurrent","oldPos","GetPosition","SetPosition","Show","AddStyle","styles","UIWiggleAnim","folderName","Track","Edit","iFocus","folders","_vec3","RuntimeTester","Notify","Abs","Test","tests","TestLog","successes","failures","trial","title","maximumRuns","isNaN","trials","runsCount","testFunction","expectedResult","Trial","BindTo","Execute","success","Succeeded","Failed","succeeded","TrialLog","test","TryInstance","pass","successful","skipped","testValues","testRuns","testSuccessful","Resources","Cargo","currentQuantity","stopPropagation","stylesheet","createCSS","css","getElementsByTagName","innerHTML","UIFitContent","UIHideMenu","UIDraggable","UIDHeader","UIDCloseButton","_domElement","removeEventListener","RemoveStyle","text","attributes","_span","_Span","crel","eStyle","cssText","widths","small","medium","large","dom","move","xpos","ypos","left","top","diffX","diffY","eWi","eHe","cWi","cHe","onMouseMove","evt","posX","clientX","posY","clientY","aX","aY","startMoving","parentNode","divTop","divLeft","cursor","stopMoving","domStyle","head","header","onmousedown","onmouseup","close","Close","EnableChildInput","elt","spaces","world","local","modes","translate","rotate","defaultControls","TransformControls","renderOrder","attach","detach","Detach","space","setMode","stringType","groupAdded","groupRemoved","groupModified","containerAdded","_currentIndex","containers","currentIndex","sleep","debugLog","keypress","debugRegion","debugClear","debugging","ListenKeys","ms","force","execute","tid","clearTimeout","solid","checkered","debugUID","Viz","DrawVolume","Boolean","uids","RemoveObjectByUID","ClearAll","numberFormatDefault","nStr","HeuristicParams","HeuristicResult","containingRegion","packedRegion","_items","_packedContainer","_regionsTree","_workingItem","HeuristicWorkingSet","packedContainer","regionsTree","WeightPass","Validate","Find","FitFunction","NextItem","Error","Heuristic","workingSetType","workingSet","RemoveItem","WorkingSet","Result","UpdateComponent","interval","lastUpdateTime","collectionQuery","updateProperty","recursive","raycastItems","GetRaycastItems","rItem","Cik","raycastItem","raycaster","UpdateRaycastItems","intersects","intersectObjects","raycastItemIndex","BubbleUpForIndex","collection","nestLimit","numCollection","parent","itemsContainer","miscContainer","defaults","Scene","objName","getObjectByName","tempBox3","_scaleFigure","scaleFigure","woman","EntryInputView","preview","previewTypes","offsetX","side","DoubleSide","SetTextureMap","alphaMap","repeat","setX","refMesh","PlaneGeometry","bkgMesh","depthWrite","depthFunc","NeverDepth","transition","Transition","slideIn","Slide","slideOut","onTransitionComplete","transitionController","complete","valid","End","children","boxView","previewing","deltaTime","tlWatchTimer","tlWatchEntries","tlWatchUpdater","newValue","propertyName","savedValue","tl","addTLWatch","setInterval","_value","TextLabel","GetString","textLabel","canvas2d","context2d","getContext","fillStyle","fillRect","textBaseline","fillText","CanvasTexture","minFilter","LinearFilter","anisotropy","image","needsUpdate","OnChange","Label","guiExtensions","blockEvent","CreateCSS","datDisabled","_onGUIEvent","folderKeys","closed","onGUIEvent","hasAttribute","setAttribute","parentElement","removeAttribute","enumerable","enable","disabled","_tooltip","class","classList","setTooltip","tooltip","RegionsTree","root","regions","thisArg","numRegions","iRegion","search","Subtract","regionIndex","debugUIDs","coordID","levels","neighbours","regionA","jRegion","regionB","Intersects","numNeighbours","iNeighbour","neighbourA","jNeighbour","neighbourB","connectedNeighbours","ConnectFloorRects","levelsYCats","iYCat","numYCats","level","regionY","regionHeight","numRects","newRegion","volumeA","volumeB","ContainsRegion","sortFunction","delay","debugGeometry","debugMaterial","wrapS","wrapT","RepeatWrapping","debugBox","DebugBox","alphaHexMask","debugObjects","tVec3","tPos","tScale","DebugViz","wireframe","packingSpaceView","packResultView","cargoViews","o","AFitTest","Box","api","PackedItem","PackedContainer","cumulatedWeight","yRotation","makeRotationY","tempMatrix4","PackingSpaceView","containerViews","containerView","ContainerView","cv","containingVolumeUID","iCView","iCVolume","FindContainingVolume","identity","makeTranslation","ContainerBox","createContainerBoxes","boxes","CreateMesh","BackSide","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","views","WeakMap","initializationBox3","StandardSceneObject","containerBoxes","platformMesh","planeGeom","BoxGeometry","planeMaterial","CreateSolidMaterialMatte","ReceiveShadow","object3d","animationDuration","packedCargoView","PackedCargoBoxView","Extend","getOrientationAngles","getOrientationEuler","rad","Euler","packVizStart","packVizEnd","cargoVizCreate","cargoVizPack","cargoVizUnpack","PackResultView","cargoListView","animatingViews","Pizzicato","musipack","matrix","GetMatrix","decompose","packedQuantities","zEntry","numPackedItems","delayPerItem","cargoViewTemplate","packedQuantity","totalQuantity","UpdateLabel","SetRotationAngles","posTweenCombo","onTweenComplete","OnCargoFirstTweenComplete","extraData","unpackedOffset","numUnpackedItems","j","OnTweenComplete","scaleTweenCombo","DisableHighlights","Highlight","numCargoViews","cvEntry","halfHeight","low","high","animatingView","fn","nodeType","textContent","attrMapString","isNodeString","isElementString","isType","isNode","Node","ownerDocument","isElement","isArray","subChild","createTextNode","arguments","settings","childIndex","argumentsLength","attributeMap","attr","Proxy","proxy","defaultFormatParams","orthoViewSelected","orthoviews","home","front","icons","margin","dispatch","icon","right","imageURL","div","onmouseover","backgroundPositionX","onmouseout","preventDefault","_cargoList","boxEntryPool","renewBoxEntry","GetNextColor","entryMirror","IsVolume","commitedEntry","existing","sliderValueChange","sliderValueStop","createContainerView","model","thickness","PlatformVisibility","jsonObject","ResultSpace","ResultEntry","packingSpaces","totalPacked","totalUnpacked","solveDuration","toInterfaceResults","getSpace","containerUID","ps","packEntry","resultEntry","isFirst","defaultSolverParams","FreightPacker","utils","devSetup","domain","fp","toConsole","traceToConsole","SetViewParent","auto","uxParams","cargoInputParams","packingSpaceInputParams","appParams","webgl","Capabilities","IsWebGLReady","canvas","gl","WebGLRenderingContext","defaultKeysListen","concat","domContainer","_camera","_mouse","mouseScreen","Vector2","mouseViewport","mouseDelta","lastMouseDownTime","ComputeScreen","Raycaster","_raycastGroups","Update25","Update10","OnMouseDown","OnDoubleClick","OnMouseUp","OnRightClick","OnClick","updateComponents","fireOnce","onMouseDown","onMouseUp","onRightClick","onDoubleClick","onClick","onDrag","onDragEvent","mouseEvent","sx","sy","minDist","onDragStatus","doubleClickTime","OnMouseMove","thisOnMouseWheel","OnMouseWheel","attachEvent","OnScroll","OnResize","keyboard","Listener","on","simple_combo","unregister","unregister_combo","register_combo","prevent_repeat","on_keydown","on_keyup","getBoundingClientRect","bottom","button","UpdateScreenAndMouse","_dridMouseDown","AbortDelayedAction","_status","DelayedAction","_mouseDownDelayed","UpdateRaycast","ExecuteDelayedMD","distanceToSquared","noMouseDrag","m","wheelDelta","detail","lerp","eventType","iCallback","FireOnce","UpdateRaycaster","iUpdate","updateComponent","OnMouseDrag","LerpZoom","action","drid","_repeats","clearInterval","intersectObject","groupID","setFromCamera","raycastGroupsKeys","numRaycastGroups","reverse","iGroup","Raycast","_change_keycodes_by_browser","_compare_arrays","_compare_arrays_sorted","_convert_key_to_readable","_convert_to_shifted_key","_decide_meta_key","_factory_defaults","_filter_array","_index_of_in_array","_is_array_in_array","_is_array_in_array_sorted","_key_is_valid","_keycode_alternate_names","_keycode_dictionary","_keycode_shifted_keys","_log_error","_metakey","_modifier_event_mapping","_modifier_keys","_validate_combo","__hasProp","hasOwnProperty","__indexOf","is_unordered","is_counting","is_exclusive","is_solitary","prevent_default","dictionary","count","allows_key_repeat","keyup_fired","attach_handler","jQuery","should_suppress_event_defaults","should_force_event_defaults","sequence_delay","_registered_combos","_keys_down","_active_combos","_sequence","_sequence_timer","_prevent_capture","_defaults","handler","keydown_event","_this","_receive_input","_bug_catcher","keyup_event","blur_event","_i","_len","_ref","_key_up","remove_handler","removeEvent","_ref1","keyCode","_cmd_bug_check","combo_keys","_prevent_default","should_prevent","returnValue","_get_active_combos","active_combos","keys_down","down_key","_match_combo_arrays","match","_fuzzy_match_combo_arrays","_get_potential_combos","potentials","is_sequence","_add_to_active_combos","active_combo","active_key","active_keys","already_replaced","combo_key","should_prepend","should_replace","_j","_k","_len1","unshift","_remove_from_active_combos","_get_possible_sequences","matches","sequence","_ref2","_add_key_to_sequence","sequence_combos","_get_sequence","seq_key","is_keydown","_key_down","_fire","key_event","is_autorepeat","potential_match","match_handler","source_combo","_keys_remain","keys_remain","combos","event_mod","mod","potential","potential_combos","sequence_combo","shifted_key","_handle_combo_down","is_other_exclusive","potential_combo","active_combos_length","unshifted_key","_l","_len2","_ref3","shiftKey","_handle_combo_up","keys_remaining","counting_combo","count_callback","combo_dictionary","register_many","combo_array","_results","keys_or_combo","unregister_many","get_registered_combos","stop_listening","get_meta_key","userAgent","k","array","prev","apply","valid_key","_","alt_name","mod_key","non_modifier_keys","validated","define","exports","testCallback","composer","antialias","shadows","renderSizeMul","OnTestComplete","shadowMapType","PCFSoftShadowMap","shadowsAutoUpdate","WebGLRenderer","shadowMap","autoUpdate","physicallyCorrectLights","gammaInput","gammaOutput","toneMapping","Uncharted2ToneMapping","maxTextureSize","context","getParameter","MAX_TEXTURE_SIZE","pixelRatio","devicePixelRatio","setPixelRatio","setClearColor","ResizeRenderer","newWidth","newHeight","setSize","render","ResizeDomElement","UseComposer","EffectComposer","renderPass","RenderPass","renderToScreen","addPass","renderPasses","UseCamera","ignoredAreas","minDistance","Infinity","minZoom","maxZoom","minPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panningMode","ScreenSpacePanning","keyPanSpeed","autoRotateSpeed","enableKeys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","ORBIT","MOUSE","ZOOM","MIDDLE","PAN","target0","position0","zoom0","zoom","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","dispatchEvent","changeEvent","state","STATE","NONE","setFromUnitVectors","up","quatInverse","inverse","lastPosition","lastQuaternion","sub","setFromVector3","rotateLeft","getAutoRotationAngle","sphericalDelta","makeSafe","radius","panOffset","setFromSpherical","zoomChanged","EPS","dot","quaternion","onContextMenu","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onKeyDown","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY","TOUCH_PAN","Spherical","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","angle","rotateUp","panLeft","objectMatrix","setFromMatrixColumn","panUp","HorizontalPanning","crossVectors","pan","deltaX","isPerspectiveCamera","targetDistance","tan","clientHeight","isOrthographicCamera","clientWidth","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","handleMouseMoveDolly","handleMouseMovePan","handleMouseUp","handleMouseWheel","handleKeyDown","handleTouchStartRotate","touches","pageX","pageY","handleTouchStartDolly","handleTouchStartPan","handleTouchMoveRotate","handleTouchMoveDolly","handleTouchMovePan","handleTouchEnd","checkIgnoredAreas","rects","ContainsPoint","create","EventDispatcher","noZoom","noRotate","noPan","noKeys","staticMoving","dynamicDampingFactor","defaultCamTRS","Transform","cameraTransform","entryInputViewParams","entryInputView","_position","_rotation","transform","_enabled","PackingProperty","prop","Constraint","_allowedOrientations","allowX","allowY","allowZ","allowed","allowWH","allowLH","allowWL","findNearest","dMin","nearest","vz","tempColor","mapColor","Material","TransitionController","from","to","bounds","OnComplete","_controller","boundsView","transformView","_app","PackResults","Slice","visualizationSignals","packResults","highlightPackedInstances","Select","SelectEntry","boxEntryInteract","onCargoInteract","cargoEntry","PackingItem","cargo","targetView","cubeGeometry","outlineMaterial","depthTest","boxOutlineMaterial","offsetUnits","outlines","Disable","oChild","outlineReady","boxMaterial","boxMesh","addScalar","applyMatrix","GizmoMaterial","parameters","FrontSide","setValues","oldColor","oldOpacity","highlight","highlighted","setRGB","GizmoLineMaterial","LineBasicMaterial","linewidth","pickerMaterial","TransformGizmo","handles","pickers","planes","planeGeometry","PlaneBufferGeometry","activePlane","setupGizmos","gizmoMap","handleGizmos","pickerGizmos","updateMatrix","tempGeometry","eye","vec1","vec2","lookAtMatrix","setFromRotationMatrix","setFromEuler","TransformGizmoTranslate","arrowGeometry","Geometry","CylinderGeometry","merge","lineXGeometry","BufferGeometry","addAttribute","Float32BufferAttribute","lineYGeometry","lineZGeometry","X","Line","Y","Z","XYZ","OctahedronGeometry","XY","YZ","XZ","CylinderBufferGeometry","setActivePlane","tempMatrix","extractRotation","TransformGizmoRotate","CircleGeometry","facing","arc","vertices","E","XYZE","TorusBufferGeometry","eye2","worldRotation","tempQuaternion","unitX","unitY","unitZ","quaternionX","quaternionY","quaternionZ","makeRotationFromQuaternion","setFromAxisAngle","atan2","multiplyQuaternions","TransformGizmoScale","translationSnap","rotationSnap","_mode","_dragging","_gizmo","gizmoObj","mouseDownEvent","mouseUpEvent","mode","objectChangeEvent","ray","pointerVector","offsetRotation","tempVector","quaternionXYZ","quaternionE","oldPosition","oldScale","oldRotationMatrix","parentRotationMatrix","parentScale","worldPosition","worldRotationMatrix","camPosition","camRotation","onPointerDown","onPointerHover","onPointerMove","onPointerUp","getMode","setTranslationSnap","setRotationSnap","setSpace","setFromMatrixPosition","OrthographicCamera","pointer","changedTouches","intersect","planeIntersect","setFromMatrixScale","multiply","cross","angleTo","TouchEvent","_box3","setFromCenterAndSize","cub","SetItems","SetPackedContainer","SetRegionsTree","fallback","HeuRegular","firstRegion","harsh","itemVolume","regionRemains","Occupy","ProcessRegionsPerPackedItem","containerWidth","containerHeight","ProcessRegionsPreferredX","ProcessRegionsMergeExpand","ProcessRegionsForPackedItems","ProcessRegionsForZeroRegions","ProcessRegionsEnclosed","SortDeepestSmallest","Fit","placement","workingHeuristic","final","nextItem","ProcessRegions","FitUsingHeuristic","unpackItem","packItem","fitWith","Unpack","Pack","toItems","TestData","containerData","ID","Name","Length","Width","Height","itemsData","Quantity","WeightCapacity","StackingCapacity","almost","n1","n2","dim1","dim2","dim3","IsPacked","Dim1","Dim2","Dim3","CoordX","CoordY","CoordZ","PackDimX","PackDimY","PackDimZ","HeuRegularParams","HeuRegularSet","VolumeSort","workingItem","regionFitTest","FitTest","validItem","SetWorkingItem","ScoringParams","HeuParametric1Params","scoreConstructor","sortByN","orientationScoreTable","HeuParametric1Set","GetMinDimensions","minDimensionsNoWasteFactor","regionScoreTable","containerLength","minZScore","minWasteScore","scoreW","scoreH","scoreL","minZWeight","minWasteWeight","score","dummyRegion","RateFit","orientationScore","regionScore","pop","highestScore","transitionDuration","paddingZ","paddingY","orthoviewsNavigator","Navigate","OrthoviewsNavigator","DisplayPackingResult","CreateOrthoViewsIcons","OnOrthoViewSelected","lights","DefaultLights","light","dlData","Load","dlComp","orthoviewsNavParams","onContainerAdded","TransitionToFrame","containerSize","AddRaycastGroup","onCargoListViewChanged","listViewCenterX","getWorldPosition","centerX","onCargoGroupAdded","onCargoGroupRemoved","onCargoGroupModified","UpdateGroup","boundingView","HUDSetup","Clear","viewType","Toggle","unitCubeEdgeGeometry","EdgesGeometry","wireframeMaterialTemplate","_wireMaterialSettings","meshMaterial","blending","NormalBlending","wireMesh","LineSegments","tempRange","Range","halfLength","range","frequency","_playing","_iid","Note","wave","Sound","options","play","onNoteComplete","Stop","stop","note","Toner","ranges","divs","divLength","Evaluate","GetNote","Play","RelaseNote","Musipack","toner","Once","OnItemPacked","OnItemUnpacked","EvaluateItem","Coords","tempCamOffset","_cargoListView","_boundingView","_recovery","nanRecovery","NaNRecovery","changeFOV","neededRecovery","AssertUpdateRecover","slideDown","SlideUp","SlideDown","TransitionToFOV","Watch"],"mappings":"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","file":"FreightPacker-dev.js","sourcesContent":[" \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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 54);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9574f68a68468e60be64","\r\nconst trimVariableRegex = new RegExp(/(?:\\d|_|-)+$/);\r\nconst twopi = 2 * Math.PI;\r\nconst goldenRatio = (1 + Math.sqrt(5)) / 2;\r\nconst goldenRatioConjugate = goldenRatio - 1;\r\n\r\nconst typeofObject = 'object';\r\n\r\nclass Utils {\r\n\r\n static Redefine(object, constructor){\r\n var classProperties = object;\r\n var instanceProperties = object.prototype;\r\n \r\n var def = constructor(instanceProperties);\r\n \r\n Object.assign(def, classProperties);\r\n Object.assign(def.prototype, instanceProperties);\r\n Object.defineProperties(def, Object.getOwnPropertyDescriptors(classProperties));\r\n Object.defineProperties(def.prototype, Object.getOwnPropertyDescriptors(instanceProperties));\r\n\r\n return def;\r\n }\r\n\r\n /**\r\n * @template T\r\n * @param {T} target \r\n * @param {Object} source \r\n * @returns {T}\r\n */\r\n static AssignUndefined(target, source){\r\n if(typeof target !== typeofObject){\r\n target = {};\r\n Object.assign(target, source);\r\n return target;\r\n }\r\n\r\n var keys = Object.keys(source);\r\n keys.forEach(key => {\r\n if(typeof source[key] === typeofObject) Utils.AssignUndefined(target[key], source[key]);\r\n if(target[key] === undefined) target[key] = source[key];\r\n });\r\n return target;\r\n }\r\n\r\n static Snapshot(obj){\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n static GetRectOffset(element){\r\n var style = window.getComputedStyle(element),\r\n marginLeft = parseFloat(style.marginLeft),\r\n marginTop = parseFloat(style.marginTop),\r\n paddingLeft = parseFloat(style.paddingLeft),\r\n paddingTop = parseFloat(style.paddingTop);\r\n return {x: marginLeft + paddingLeft, y: marginTop + paddingTop};\r\n }\r\n\r\n static TrimVariable(input){\r\n return input.replace(trimVariableRegex, '');\r\n }\r\n\r\n static LimitString(str, length){\r\n if(str.length > length) str = str.substring(str.length - length);\r\n return str;\r\n }\r\n\r\n static LoopIndex(i, len){\r\n i = i % len;\r\n if(i < 0) i = len + i;\r\n return i;\r\n }\r\n\r\n static FastCircleLoop(divisions, callback){\r\n // ref: http://iquilezles.org/www/articles/sincos/sincos.htm\r\n var da = twopi / divisions;\r\n var a = Math.cos(da);\r\n var b = Math.sin(da);\r\n var cos = 1;\r\n var sin = 0;\r\n for( var i = 0; i < divisions; i++ )\r\n {\r\n var nc = a*cos - b*sin;\r\n var ns = b*cos + a*sin;\r\n cos = nc;\r\n sin = ns;\r\n callback(cos, sin);\r\n }\r\n }\r\n\r\n static ColorPaletteAsVec3(t, a, b, c, d, color){\r\n // ref: http://iquilezles.org/www/articles/palettes/palettes.htm\r\n // return a + b * cos( 6.28318 * ( c * t + d ) );\r\n color = color || new THREE.Color();\r\n var r = a.x + b.x * Math.cos( twopi * (c.x * t + d.x) ), \r\n g = a.y + b.y * Math.cos( twopi * (c.y * t + d.y) ),\r\n b = a.z + b.z * Math.cos( twopi * (c.z * t + d.z) );\r\n return color.set(r, g, b);\r\n }\r\n\r\n /**\r\n * Returns the next value [0, 1] in the golden series\r\n * @param {Number} base \r\n */\r\n static GoldenSeries(base){\r\n\t\treturn (base + goldenRatioConjugate) % 1;\r\n }\r\n\r\n static VecToString(vector, fixed){\r\n fixed = fixed || 8;\r\n return vector.x.toFixed(fixed) + ', ' + vector.y.toFixed(fixed) + (vector.z !== undefined ? ', ' + vector.z.toFixed(fixed) + (vector.w !== undefined ? ', ' + vector.w.toFixed(fixed) : '') : '');\r\n }\r\n}\r\n\r\nexport default Utils;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/Utils.js","\r\n/** SignalerCallback \r\n * @callback SignalerCallback\r\n * @param {Array<*>} args\r\n */\r\n\r\nclass Signaler {\r\n constructor(){\r\n /** @type {Array} */\r\n this.signals = {};\r\n /** @type {Array} */\r\n this.dispatches = {};\r\n }\r\n\r\n /** @param {string} event @param {SignalerCallback} callback */\r\n OnIncludingPrior(event, callback){\r\n let args = this.dispatches[event];\r\n if(args){\r\n callback(...args);\r\n }\r\n else{\r\n this.On(event, callback);\r\n }\r\n }\r\n\r\n /** @param {string} event @param {SignalerCallback} callback */\r\n On(event, callback){\r\n if(this.signals[event] === undefined){\r\n this.signals[event] = [];\r\n }\r\n this.signals[event].push(callback);\r\n }\r\n\r\n /** @param {string} event @param {SignalerCallback} callback */\r\n Once(event, callback){\r\n if(this.signals[event] === undefined){\r\n this.signals[event] = [];\r\n }\r\n let eventCallbacks = this.signals[event];\r\n let once;\r\n once = function(...args){\r\n eventCallbacks.splice(eventCallbacks.indexOf(once), 1);\r\n callback(...args);\r\n };\r\n eventCallbacks.push(once);\r\n }\r\n\r\n /** @param {string} event @param {SignalerCallback} callback */\r\n Off(event, callback){\r\n let callbacks = this.signals[event];\r\n if(callbacks){\r\n let index = callbacks.indexOf(callback);\r\n if(index != -1){\r\n callbacks.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n /** @param {string} event @param {Array<*>} [args] */\r\n Dispatch(event, ...args){\r\n this.dispatches[event] = args;\r\n let callbacks = this.signals[event];\r\n if(callbacks){\r\n for(let i = 0, len = callbacks.length; i < len; i++){\r\n callbacks[i](...args);\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Signaler;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/Signaler.js","\r\n// dat.GUI console mirroring\r\n// Access with >> dat.list\r\n\r\nimport Utils from \"../Utils\";\r\n\r\nvar defaultGUIParams = {publish: true, key: ''};\r\n\r\nvar dat = {\r\n guis: [],\r\n\r\n controllers: {\r\n Controller: function(target, key){\r\n\r\n this.label = key;\r\n\r\n var onChangeCallback;\r\n this.onChange = function(callback){\r\n onChangeCallback = callback;\r\n };\r\n\r\n let valueProp = {\r\n get: function(){\r\n return target[key];\r\n },\r\n set: function(value){\r\n target[key] = value;\r\n if(onChangeCallback)\r\n onChangeCallback();\r\n }\r\n };\r\n Object.defineProperty(this, 'value', valueProp);\r\n\r\n Object.defineProperties(this, {\r\n list: {\r\n get: (function(){\r\n let isFunction = typeof target[key] === 'function';\r\n if(isFunction){\r\n return function(){\r\n return {\r\n get: function(){\r\n target[key]();\r\n return target[key];\r\n }\r\n };\r\n };\r\n }\r\n else{\r\n return function(){\r\n return valueProp;\r\n };\r\n }\r\n })()\r\n }\r\n });\r\n\r\n this.step = function(){return this;};\r\n this.listen = function(){return this;};\r\n this.updateDisplay = function(){return this;};\r\n }\r\n },\r\n\r\n GUI: function(params){\r\n this.i = 0;\r\n this.data = {};\r\n this.__controllers = [];\r\n this.__folders = [];\r\n\r\n params = Utils.AssignUndefined(params, defaultGUIParams);\r\n\r\n this.label = params.label;\r\n\r\n if(params.publish)\r\n dat.guis.push(this);\r\n\r\n this.add = function(target, key){\r\n let controller = new dat.controllers.Controller(target, key);\r\n this.__controllers.push(controller);\r\n let isFunction = typeof target[key] === 'function';\r\n this.data[(this.i++).toString() + ') ' + controller.label + (isFunction ? '()' : '')] = controller;\r\n return controller;\r\n };\r\n\r\n this.addFolder = function(label){\r\n let folder = new dat.GUI({publish: false, key: label});\r\n this.__folders.push(folder);\r\n this.data[(this.i++).toString() + ') >> ' + label] = folder;\r\n return folder;\r\n };\r\n\r\n this.open = function(){return this;};\r\n\r\n Object.defineProperties(this, {\r\n domElement: {\r\n get: function(){\r\n return document.createElement('div');\r\n }\r\n },\r\n list: {\r\n get: function(){\r\n let result = {};\r\n let keys = Object.keys(this.data);\r\n let data = this.data;\r\n for(var iKey = 0; iKey < keys.length; iKey++){\r\n let key = keys[iKey];\r\n let listProp = data[key].list;\r\n Object.defineProperty(result, key, listProp.get ? \r\n listProp :\r\n {\r\n get: function(){\r\n return listProp;\r\n }\r\n }\r\n );\r\n }\r\n return result;\r\n }\r\n }\r\n });\r\n\r\n this.destroy = function(){\r\n var index = dat.guis.indexOf(this);\r\n if(index !== -1)\r\n dat.guis.splice(index, 1);\r\n };\r\n }\r\n};\r\n\r\nObject.defineProperties(dat, {\r\n list: {\r\n get: function(){\r\n let result = [];\r\n for(var i = 0; i < this.guis.length; i++){\r\n result[i] = this.guis[i].list;\r\n }\r\n return result;\r\n }\r\n }\r\n});\r\n\r\nexport default dat;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/config/datGUIConsole.js","import Utils from \"./Utils\";\r\n\r\nconst logType = {\r\n trace: 0,\r\n normal: 1,\r\n warn: 2\r\n};\r\n\r\nconst logTypeLabel = {\r\n 0: 'Trace',\r\n 1: 'Log',\r\n 2: 'Warn'\r\n};\r\n\r\nconst defaultPrintFilter = {\r\n 0: true,\r\n 1: true,\r\n 2: true\r\n};\r\n\r\nvar programStartTime = Date.now();\r\nvar messages = [];\r\nvar warnOnce = {};\r\n\r\nclass Message {\r\n constructor(type, ...args){\r\n this.type = type;\r\n this.timestamp = Date.now();\r\n this.content = [];\r\n args.forEach(arg => {\r\n if(typeof arg === 'string'){\r\n this.content.push(arg);\r\n }\r\n else{\r\n try{\r\n var json = JSON.stringify(arg).substr(0, 2000);\r\n this.content.push(json);\r\n }\r\n catch(err){\r\n this.content.push(' parse error: ' + err);\r\n }\r\n }\r\n });\r\n }\r\n\r\n ToString(){\r\n return ((this.timestamp - programStartTime) / 1000).toFixed(2) + ' ' + logTypeLabel[this.type];\r\n }\r\n}\r\n\r\nclass Logger {\r\n\r\n static set active(value){\r\n this._active = value;\r\n }\r\n\r\n static set toConsole(value){\r\n this._toConsole = value;\r\n }\r\n\r\n static set traceToConsole(value){\r\n this._traceToConsole = value;\r\n }\r\n\r\n static AddLog(message){\r\n messages.push(message);\r\n }\r\n\r\n static Trace(...args){\r\n if(this._active){\r\n var message = new Message(logType.trace, ...args);\r\n this.AddLog(message);\r\n if(this._toConsole || this._traceToConsole){\r\n console.groupCollapsed(...args);\r\n console.trace('stack');\r\n console.groupEnd();\r\n }\r\n }\r\n }\r\n\r\n static Log(...args){\r\n if(this._active){\r\n var message = new Message(logType.normal, ...args);\r\n this.AddLog(message);\r\n if(this._toConsole){\r\n console.log(...args);\r\n }\r\n }\r\n }\r\n\r\n static Warn(...args){\r\n if(this._active){\r\n var message = new Message(logType.warn, ...args);\r\n this.AddLog(message);\r\n if(this._toConsole) console.warn(...args);\r\n }\r\n }\r\n\r\n static LogOnce(id, ...args){\r\n if(this._active && !warnOnce[id]){\r\n warnOnce[id] = true;\r\n Logger.Log(...args);\r\n }\r\n }\r\n\r\n static WarnOnce(id, ...args){\r\n if(this._active && !warnOnce[id]){\r\n warnOnce[id] = true;\r\n Logger.Warn(...args);\r\n }\r\n }\r\n\r\n static Print(filter){\r\n Utils.AssignUndefined(filter, defaultPrintFilter);\r\n\r\n var output = 'Log:\\n';\r\n messages.forEach(message => {\r\n if(filter[message.type]){\r\n output += message.ToString() + '\\n';\r\n }\r\n });\r\n\r\n return output;\r\n }\r\n}\r\n\r\nLogger.active = true;\r\n\r\nexport default Logger;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/Logger.js","import ColorTemplate from \"./ColorTemplate\";\r\nimport Signaler from \"../../utils/cik/Signaler\";\r\nimport Resources from \"../../Resources\";\r\n\r\nconst SolidMaterialType = THREE.MeshStandardMaterial;\r\nconst TransparentMaterialType = THREE.MeshStandardMaterial;\r\nconst InvisibleMaterialType = THREE.MeshBasicMaterial;\r\n\r\nconst defaultGeometry = new THREE.CubeGeometry(1, 1, 1);\r\nconst defaultMeshMaterial = new SolidMaterialType({color: 0xaaaaaa});\r\n\r\nconst objectLoader = new THREE.ObjectLoader();\r\nconst jsonLoader = new THREE.JSONLoader();\r\n\r\nconst castShadow = true;\r\nconst receiveShadow = true;\r\n\r\n/** @type {Map} */\r\nvar colorTemplates = new Map();\r\n\r\nvar signaler = new Signaler();\r\nconst signals = {\r\n resourcesSet: 'resourcesSet'\r\n};\r\n\r\nconst _resources = Symbol('resources');\r\n\r\nclass Asset {\r\n constructor(){\r\n\r\n }\r\n\r\n /** @param {Resources} value */\r\n static set resources(value){\r\n Asset[_resources] = value;\r\n signaler.Dispatch(signals.resourcesSet);\r\n }\r\n\r\n static get resources(){ return Asset[_resources]; }\r\n\r\n /**\r\n * @param {string} url \r\n * @param {THREE.Material} material \r\n * @param {string} mapName \r\n * @returns {Promise}\r\n */\r\n static SetTextureMap(url, material, mapName){\r\n return new Promise( (resolve, reject) => {\r\n signaler.OnIncludingPrior(signals.resourcesSet, () => {\r\n let texture = material[mapName];\r\n if(texture instanceof THREE.Texture || texture === null){\r\n material[mapName] = new THREE.TextureLoader().load(Asset.resources.texturesPath + url, resolve, undefined, reject);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * @param {Number} color hex\r\n */\r\n static CreateSolidMaterialMatte(color){\r\n return new Asset.SolidMaterialType({color: color, roughness: 1, metalness: .2});\r\n }\r\n\r\n /**\r\n * \r\n * @param {THREE.Geometry|THREE.BufferGeometry} geometry \r\n * @param {THREE.Material} [material]\r\n */\r\n static CreateMesh(geometry, material){\r\n geometry = geometry || defaultGeometry;\r\n material = material || defaultMeshMaterial;\r\n\r\n var mesh = new THREE.Mesh(geometry, material);\r\n return mesh;\r\n }\r\n\r\n static RestoreMaterial(material, modified){\r\n if(modified === undefined) return;\r\n\r\n let keys = Object.keys(modified);\r\n for(let i = 0; i < keys.length; i++){\r\n let key = keys[i];\r\n if(material[key] !== undefined){\r\n if(material[key].setHex){\r\n /** @type {THREE.Color} */\r\n let color = material.color;\r\n color.setHex(modified[key]);\r\n }\r\n else{\r\n material[key] = modified[key];\r\n }\r\n }\r\n }\r\n }\r\n\r\n static SetMaterialFocus(material, value, modified){\r\n\r\n /** @type {THREE.Color} */\r\n let color = material.color;\r\n if(color !== undefined){\r\n if(modified) modified.color = color.getHex();\r\n\r\n let reduce = (value - 1) / 4;\r\n color.r = THREE.Math.clamp(color.r - reduce, 0, 1);\r\n color.g = THREE.Math.clamp(color.g - reduce, 0, 1);\r\n color.b = THREE.Math.clamp(color.b - reduce, 0, 1);\r\n }\r\n\r\n /** @type {Number} */\r\n let opacity = material.opacity;\r\n if(opacity !== undefined){\r\n if(modified){\r\n modified.opacity = opacity;\r\n modified.transparent = material.transparent;\r\n }\r\n\r\n material.opacity = THREE.Math.clamp(material.opacity * value, 0, 1);;\r\n material.transparent = material.opacity < 1;\r\n }\r\n }\r\n\r\n /**\r\n * @typedef GeometryJSONReturn\r\n * @property {THREE.Geometry|THREE.BufferGeometry} geometry\r\n * @property {Array} [materials]\r\n * \r\n * @param {Object} json - Representing Geometry or BufferGeometry json data\r\n * @param {string} [texturePath] - optional texture url \r\n * @returns {GeometryJSONReturn}\r\n */\r\n static FromGeometryJSON(json, texturePath){\r\n return jsonLoader.parse(json, texturePath);\r\n }\r\n\r\n /**\r\n * @param {Object} json \r\n * @returns {THREE.Object3D}\r\n */\r\n static FromJSON(json){\r\n return objectLoader.parse(json);\r\n }\r\n\r\n /** @param {THREE.Object3D} object */\r\n static StandardSceneObject(object){\r\n Asset.CastReceiveShadow(object);\r\n }\r\n\r\n /** @param {THREE.Object3D} object @param {Boolean} [value] */\r\n static CastReceiveShadow(object, value){\r\n object.traverse(function(child){\r\n if(child instanceof THREE.Mesh){\r\n child.castShadow = value === undefined ? castShadow : value;\r\n child.receiveShadow = value === undefined ? receiveShadow : value;\r\n }\r\n });\r\n }\r\n\r\n /** @param {THREE.Object3D} object @param {Boolean} [value] */\r\n static ReceiveShadow(object, value){\r\n if(value === undefined) value = receiveShadow;\r\n object.traverse(function(child){\r\n if(child instanceof THREE.Mesh){\r\n child.receiveShadow = value;\r\n }\r\n });\r\n }\r\n\r\n /** @param {THREE.Object3D} object @param {Boolean} [value] */\r\n static CastShadow(object, value){\r\n if(value === undefined) value = castShadow;\r\n object.traverse(function(child){\r\n if(child instanceof THREE.Mesh){\r\n child.castShadow = value;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @param {string} key \r\n * @param {Array} colors \r\n */\r\n static CreateColorTemplate(key, ...colors){\r\n var template = new ColorTemplate(...colors);\r\n colorTemplates.set(key, template);\r\n }\r\n\r\n /**\r\n * @param {string} key \r\n */\r\n static ColorTemplates(key){\r\n return colorTemplates.get(key);\r\n }\r\n\r\n}\r\n\r\nAsset.SolidMaterialType = SolidMaterialType;\r\nAsset.TransparentMaterialType = TransparentMaterialType;\r\nAsset.InvisibleMaterialType = InvisibleMaterialType;\r\n\r\nAsset.CreateColorTemplate('Containers', 0x020202, 0x7f7f7f, 0xffffff);\r\n\r\nexport default Asset;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/assets/Asset.js","import { StackingProperty, RotationConstraint, TranslationConstraint } from \"./PackingProperty\";\r\nimport Dimensions from \"./Dimensions\";\r\nimport TextField from \"../common/TextField\";\r\nimport CargoEntry from \"../common/CargoEntry\";\r\n\r\n/**\r\n * @typedef {Object} BoxEntryProperties\r\n * @property {StackingProperty} stacking\r\n * @property {RotationConstraint} rotation\r\n * @property {TranslationConstraint} translation\r\n */\r\n\r\nvar numEntries = 0;\r\nfunction getDefaultLabel(){\r\n return 'Box ' + numEntries.toString();\r\n}\r\n\r\nconst epsilon = Math.pow(2, -52);\r\nconst numberType = 'number';\r\n\r\nclass BoxEntry extends CargoEntry {\r\n constructor(){\r\n numEntries++;\r\n\r\n super();\r\n this.type = 'BoxEntry';\r\n\r\n this.dimensions = new Dimensions(0, 0, 0);\r\n\r\n this.weight = 0;\r\n this.quantity = 1;\r\n \r\n /**\r\n * @type {BoxEntryProperties}\r\n */\r\n this.properties;\r\n\r\n this.properties.stacking = new StackingProperty();\r\n this.properties.rotation = new RotationConstraint();\r\n this.properties.translation = new TranslationConstraint();\r\n \r\n this.descriptions.set('label', new TextField('label', getDefaultLabel()));\r\n }\r\n\r\n set weight(value){ super.weight = value; }\r\n get weight(){\r\n return super.weight;\r\n }\r\n\r\n /**\r\n * @returns {string}\r\n */\r\n get label(){\r\n var field = this.descriptions.get('label');\r\n return field ? field.content : undefined;\r\n }\r\n\r\n set label(value){\r\n var field = this.descriptions.get('label');\r\n if(field)\r\n field.content = value;\r\n else\r\n this.descriptions.set('label', new TextField('label', value));\r\n }\r\n\r\n Reset(){\r\n this.weight = 0;\r\n this.quantity = 1;\r\n\r\n this.properties.stacking.Reset();\r\n this.properties.rotation.Reset();\r\n this.properties.translation.Reset();\r\n\r\n var label = this.descriptions.get('label');\r\n label.content = TextField.defaultContent;\r\n this.descriptions.clear();\r\n this.descriptions.set('label', label);\r\n }\r\n\r\n /**\r\n * @param {BoxEntry} entry \r\n */\r\n Copy(entry){\r\n this.dimensions.Copy(entry.dimensions);\r\n this.weight = entry.weight;\r\n this.quantity = entry.quantity;\r\n\r\n this.properties.stacking.Copy(entry.properties.stacking);\r\n this.properties.rotation.Copy(entry.properties.rotation);\r\n this.properties.translation.Copy(entry.properties.translation);\r\n\r\n for(var [key, field] of entry.descriptions){\r\n let own = this.descriptions.get(key);\r\n if(own)\r\n own.Copy(field);\r\n else\r\n this.descriptions.set(key, field.Clone());\r\n }\r\n }\r\n\r\n Clone(){\r\n var entry = new BoxEntry();\r\n \r\n entry.dimensions = this.dimensions.Clone();\r\n\r\n entry.weight = this.weight;\r\n entry.quantity = this.quantity;\r\n\r\n entry.properties.stacking = this.properties.stacking.Clone();\r\n entry.properties.rotation = this.properties.rotation.Clone();\r\n entry.properties.translation = this.properties.translation.Clone();\r\n\r\n for(var [key, field] of this.descriptions){\r\n entry.descriptions.set(key, field.Clone());\r\n }\r\n\r\n return entry;\r\n }\r\n\r\n ToString(){\r\n return '\\'' + this.descriptions.get('label').content + '\\': ' + this.dimensions.ToString();\r\n }\r\n\r\n /**\r\n * @param {BoxEntry} entry \r\n */\r\n static Assert(entry){\r\n return entry instanceof BoxEntry\r\n && Dimensions.Assert(entry.dimensions)\r\n && entry.properties\r\n && entry.descriptions\r\n && entry.weight !== undefined\r\n && entry.quantity !== undefined\r\n && typeof entry.weight === numberType\r\n && typeof entry.quantity === numberType\r\n && StackingProperty.Assert(entry.properties.stacking)\r\n && RotationConstraint.Assert(entry.properties.rotation)\r\n && TranslationConstraint.Assert(entry.properties.translation)\r\n ;\r\n }\r\n}\r\n\r\nBoxEntry.StackingProperty = StackingProperty;\r\nBoxEntry.RotationConstraint = RotationConstraint;\r\nBoxEntry.TranslationConstraint = TranslationConstraint;\r\n\r\nexport default BoxEntry;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/box/BoxEntry.js","import TextField from \"./TextField\";\r\nimport Logger from \"../../utils/cik/Logger\";\r\n\r\nconst _weight = Symbol('weight');\r\n\r\nclass CargoEntry {\r\n constructor(){\r\n this.type = 'CargoEntry';\r\n\r\n this.quantity = 0;\r\n this.properties = {};\r\n this.uid = '';\r\n this[_weight] = 0;\r\n\r\n /**\r\n * @type {Map}\r\n */\r\n this.descriptions = new Map();\r\n }\r\n\r\n /** @returns {Number} */\r\n get weight(){ return this[_weight]; }\r\n set weight(value){ this[_weight] = value; }\r\n\r\n /**\r\n * @param {string} [uid] - You'll rarely need to provide this\r\n */\r\n SetUID(uid){\r\n this.uid = uid || THREE.Math.generateUUID();\r\n return this.uid;\r\n }\r\n\r\n /** @param {string} key @param {string} [value] ommit value param to get description content instead of setting it */\r\n Description(key, value){\r\n let d = this.descriptions.get(key);\r\n if(d){\r\n if(value === undefined) return d.content;\r\n\r\n d.content = value;\r\n }\r\n else{\r\n if(value === undefined) return false;\r\n\r\n d = new TextField(key, value);\r\n this.descriptions.set(key, d);\r\n }\r\n }\r\n\r\n /** @param {string} key */\r\n DeleteDescription(key){\r\n if( this.descriptions.has(key) ) this.descriptions.delete(key);\r\n }\r\n\r\n Copy(entry){\r\n Logger.Warn('CargoEntry.Copy is not implemented');\r\n }\r\n\r\n Clone(){\r\n Logger.Warn('CargoEntry.Clone is not implemented');\r\n }\r\n\r\n ToString(){\r\n \r\n }\r\n}\r\n\r\nexport default CargoEntry;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/common/CargoEntry.js","import ContainingVolume from \"./ContainingVolume\";\r\nimport Logger from \"../../utils/cik/Logger\";\r\n\r\nconst type = 'Container';\r\n\r\nvar combinedVolume = new ContainingVolume();\r\n\r\nclass Container {\r\n constructor(){\r\n /**\r\n * Containing volumes array\r\n * @type {Array}\r\n */\r\n this.volumes = [];\r\n\r\n Logger.WarnOnce('Container.constructor', 'label not implemented');\r\n }\r\n\r\n /** @param {ContainingVolume} volume */\r\n Add(volume){\r\n this.volumes.push(volume);\r\n }\r\n\r\n /**\r\n * @param {string} [uid] - You'll rarely need to provide this\r\n */\r\n SetUID(uid){\r\n this.uid = uid || THREE.Math.generateUUID();\r\n return this.uid;\r\n }\r\n\r\n get combinedVolume(){\r\n let minX = Number.MAX_SAFE_INTEGER,\r\n minY = Number.MAX_SAFE_INTEGER,\r\n minZ = Number.MAX_SAFE_INTEGER;\r\n\r\n let maxX = Number.MIN_SAFE_INTEGER,\r\n maxY = Number.MIN_SAFE_INTEGER,\r\n maxZ = Number.MIN_SAFE_INTEGER;\r\n\r\n let combinedWeightCapacity = 0;\r\n \r\n this.volumes.forEach(volume => {\r\n let pos = volume.position;\r\n let dim = volume.dimensions;\r\n if(pos.x < minX) minX = pos.x;\r\n if(pos.y < minY) minY = pos.y;\r\n if(pos.z < minZ) minZ = pos.z;\r\n if(pos.x + dim.width > maxX) maxX = pos.x + dim.width;\r\n if(pos.y + dim.height > maxY) maxY = pos.y + dim.height;\r\n if(pos.z + dim.length > maxZ) maxZ = pos.z + dim.length;\r\n\r\n combinedWeightCapacity += volume.weightCapacity;\r\n });\r\n\r\n combinedVolume.container = this;\r\n combinedVolume.dimensions.Set(maxX - minX, maxZ - minZ, maxY - minY);\r\n combinedVolume.position.set((maxX + minX) / 2, (maxZ + minZ) / 2, (maxY + minY) / 2);\r\n combinedVolume.weightCapacity = combinedWeightCapacity;\r\n \r\n return combinedVolume;\r\n }\r\n\r\n toJSON(){\r\n return {\r\n type: type,\r\n volumes: this.volumes\r\n };\r\n }\r\n\r\n ToString(){\r\n var result = type + '[';\r\n for(var i = 0, numVolumes = this.volumes.length; i < numVolumes; i++){\r\n result += this.volumes[i].ToString() + (i < numVolumes - 1 ? ', ' : ']');\r\n }\r\n return result;\r\n }\r\n\r\n static FromJSON(data){\r\n if(data.type !== type) console.warn('Data supplied is not: ' + type);\r\n\r\n var container = new Container();\r\n for(var i = 0, numVolumes = data.volumes.length; i < numVolumes; i++){\r\n var containingVolume = ContainingVolume.FromJSON(data.volumes[i]);\r\n containingVolume.container = container;\r\n container.Add(containingVolume);\r\n }\r\n\r\n return container;\r\n }\r\n\r\n get volume(){\r\n var index = this.volumes.length - 1;\r\n return this.volumes[index];\r\n }\r\n}\r\n\r\nexport default Container;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/container/Container.js","\r\n/** @typedef Vec2 @property {Number} x @property {Number} y */\r\n/** @typedef Rectangle @property {Vec2} p1 @property {Vec2} p2 @property {Vec2} p3 @property {Vec2} p4 */\r\n\r\nconst epsilon = Math.pow(2, -52);\r\nconst smallValue = .000001;\r\nconst smallValueSqrt = .001;\r\n\r\n// line intercept math by Paul Bourke http://paulbourke.net/geometry/pointlineplane/\r\n// Determine the intersection point of two line segments\r\n// Return FALSE if the lines don't intersect\r\nfunction segmentIntersect(x1, y1, x2, y2, x3, y3, x4, y4) {\r\n\r\n // Check if none of the lines are of length 0\r\n if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {\r\n return false;\r\n }\r\n \r\n var denominator = ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\r\n \r\n // Lines are parallel\r\n if (Math.abs(denominator) < epsilon) {\r\n return false;\r\n }\r\n \r\n var ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\r\n var ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;\r\n \r\n // is the intersection along the segments\r\n if (ua > 0 || ua < 1 || ub > 0 || ub < 1) return false;\r\n \r\n // Return a object with the x and y coordinates of the intersection\r\n var x = x1 + ua * (x2 - x1);\r\n var y = y1 + ua * (y2 - y1);\r\n\r\n return {x, y};\r\n}\r\n\r\nfunction linesIntersect(ax, ay, bx, by, cx, cy, dx, dy){\r\n // Line AB represented as a1x + b1y = c1\r\n var a1 = by - ay,\r\n b1 = ax - bx;\r\n var c1 = a1 * ax + b1 * ay;\r\n \r\n // Line CD represented as a2x + b2y = c2\r\n var a2 = dy - cy,\r\n b2 = cx - dx;\r\n var c2 = a2 * cx + b2 * cy;\r\n \r\n var determinant = a1 * b2 - a2 * b1;\r\n \r\n // The lines are parallel\r\n if (Math.abs(determinant) < smallValue) return false;\r\n\r\n var x = (b2 * c1 - b1 * c2) / determinant;\r\n var y = (a1 * c2 - a2 * c1) / determinant;\r\n return {x: x, y: y};\r\n}\r\n\r\nfunction rectangleContainsPoint(offset, rx, ry, rw, rh, px, py){\r\n var x = rx - offset, y = ry - offset, w = rw + offset * 2, h = rh + offset * 2;\r\n return px > x && px < x + w\r\n && py > y && py < y + h;\r\n}\r\n\r\n/** @param {Number} offset offsets the region by this before checking * @param {Region} subRegion */\r\nfunction rectangleContainsRectangle(offset, rx, ry, rw, rh, ox, oy, ow, oh){\r\n var x = rx - offset, y = ry - offset, w = rw + offset * 2, h = rh + offset * 2;\r\n return ox > x && ox + ow < x + w\r\n && oy > y && oy + oh < y + h;\r\n}\r\n\r\n/**\r\n * @param {Array} points\r\n */\r\nfunction rectanglesFromPoints(points){\r\n // Separate points in lists of 'y' coordinate, grouped by 'x' coordinate\r\n const toInt = Math.round(1 / smallValue);\r\n var xs = {};\r\n points.forEach(point => {\r\n let xCat = Math.floor(point.x * toInt);\r\n if(xs[xCat] === undefined) xs[xCat] = {x: point.x, ys: []};\r\n let ys = xs[xCat].ys;\r\n let yCat = Math.floor(point.y * toInt);\r\n let insert = true;\r\n for(let iY = 0; iY < ys.length; iY++){\r\n if(ys[iY].yCat === yCat) insert = false;\r\n }\r\n if(insert) ys.push({yCat: yCat, y: point.y});\r\n });\r\n\r\n //console.log('xs:', xs);\r\n\r\n // Intersect lists\r\n function sortYCat(a, b){\r\n if(a.yCat < b.yCat) return -1;\r\n if(a.yCat > b.yCat) return 1;\r\n return 0;\r\n }\r\n var xsKeys = Object.keys(xs);\r\n for(let iX = 0; iX < xsKeys.length; iX++){\r\n let xCat = xs[xsKeys[iX]];\r\n xCat.ys.sort(sortYCat);\r\n }\r\n\r\n /** @typedef IntersectedX @property {Number} x1 @property {Number} x2 @property {Array} ys */\r\n /** @type {Array} */\r\n var intersectedXs = [];\r\n for(let iX = 0; iX < xsKeys.length; iX++){\r\n let xCat1 = xs[xsKeys[iX]];\r\n let ys1 = xCat1.ys;\r\n for(let iX2 = iX + 1; iX2 < xsKeys.length; iX2++){\r\n let xCat2 = xs[xsKeys[iX2]];\r\n let ys2 = xCat2.ys;\r\n\r\n let yIntersect = [];\r\n let xIntersect = {x1: xCat1.x, x2: xCat2.x, ys: yIntersect};\r\n for(let iY1 = 0; iY1 < ys1.length; iY1++){\r\n for(let iY2 = 0; iY2 < ys2.length; iY2++){\r\n if(ys1[iY1].yCat === ys2[iY2].yCat){\r\n yIntersect.push(ys1[iY1].y);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if(yIntersect.length > 1) intersectedXs.push(xIntersect);\r\n }\r\n }\r\n\r\n //console.log(intersectedXs);\r\n\r\n /** @type {Array} */\r\n var rectangles = [];\r\n for(let iIX = 0; iIX < intersectedXs.length; iIX++){\r\n let intersectedX = intersectedXs[iIX];\r\n let ys = intersectedX.ys;\r\n let x1 = intersectedX.x1, x2 = intersectedX.x2;\r\n for(let iY1 = 0; iY1 < ys.length; iY1++){\r\n for(let iY2 = iY1 + 1; iY2 < ys.length; iY2++){\r\n let p1 = {x: x1, y: ys[iY1]},\r\n p2 = {x: x2, y: ys[iY1]},\r\n p3 = {x: x2, y: ys[iY2]},\r\n p4 = {x: x1, y: ys[iY2]};\r\n \r\n let rectangle = {p1: p1, p2: p2, p3: p3, p4: p4};\r\n rectangles.push(rectangle);\r\n }\r\n }\r\n }\r\n\r\n return rectangles;\r\n}\r\n\r\n/**\r\n * @param {Array} rectangles \r\n * @returns {Array} the array is edited in-place\r\n */\r\nfunction reduceRectangles(rectangles){\r\n for(let iRect = 0; iRect < rectangles.length; iRect++){\r\n let ra = rectangles[iRect];\r\n let ax = ra.p1.x, ay = ra.p1.y;\r\n let aw = ra.p3.x - ax, ah = ra.p3.y - ay;\r\n for(let jRect = 0; jRect < rectangles.length; jRect++){\r\n if(iRect !== jRect){\r\n let rb = rectangles[jRect];\r\n let bx = rb.p1.x, by = rb.p1.y;\r\n let bw = rb.p3.x - bx, bh = rb.p3.y - by;\r\n if(rectangleContainsRectangle(smallValue, ax, ay, aw, ah, bx, by, bw, bh)){\r\n rectangles.splice(jRect, 1);\r\n jRect--;\r\n iRect = Math.max(0, jRect - 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return rectangles;\r\n}\r\n\r\n/** @param {Number} ax @param {Number} ay @param {Number} bx @param {Number} by @param {Number} x @param {Number} y */\r\nfunction segmentContainsPoint(ax, ay, bx, by, x, y){\r\n var vx = bx - ax, vy = by - ay,\r\n vxa = x - ax, vya = y - ay,\r\n vxb = x - bx, vyb = y - by;\r\n var d = Math.sqrt(vx * vx + vy * vy),\r\n da = Math.sqrt(vxa * vxa + vya * vya),\r\n db = Math.sqrt(vxb * vxb + vyb * vyb);\r\n return Math.abs( d - (da + db) ) < smallValueSqrt;\r\n}\r\n\r\nexport {\r\n epsilon,\r\n smallValue,\r\n smallValueSqrt,\r\n linesIntersect,\r\n rectangleContainsPoint,\r\n rectangleContainsRectangle,\r\n reduceRectangles,\r\n rectanglesFromPoints\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/core/Math2D.js","\r\n/** SignalerCallback \r\n * @callback SignalerCallback\r\n * @param {Array<*>} args\r\n */\r\n\r\nconst _signals = Symbol('signals');\r\nconst _dispatches = Symbol('dispatches');\r\n\r\nclass LightDispatcher {\r\n constructor(){\r\n this[_signals] = {};\r\n this[_dispatches] = {};\r\n }\r\n\r\n /** @param {string} event @param {SignalerCallback} callback */\r\n On(event, callback){\r\n if(this[_signals][event] === undefined){\r\n this[_signals][event] = [];\r\n }\r\n this[_signals][event].push(callback);\r\n }\r\n\r\n /** @param {string} event @param {SignalerCallback} callback */\r\n Off(event, callback){\r\n var callbacks = this[_signals][event];\r\n if(callbacks){\r\n var index = callbacks.indexOf(callback);\r\n if(index != -1){\r\n callbacks.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n /** @param {string} event @param {Array<*>} [args] */\r\n Dispatch(event, ...args){\r\n this[_dispatches][event] = args;\r\n var callbacks = this[_signals][event];\r\n if(callbacks){\r\n for(var i = 0, len = callbacks.length; i < len; i++){\r\n callbacks[i](...args);\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default LightDispatcher;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/LightDispatcher.js","import Utils from \"../Utils\";\r\n\r\nconst serializeModes = {\r\n none: 'none',\r\n json: 'json'\r\n};\r\n\r\n/**\r\n * @typedef ConfigParams\r\n * @property {Boolean} debug\r\n * @property {Boolean} save\r\n * @property {serializeModes} serializeMode\r\n */\r\n\r\n\r\nclass Controller {\r\n constructor(property, min, max, step, onChange){\r\n this.property = property;\r\n this.min = min;\r\n this.max = max;\r\n this.step = step;\r\n this.onChange = onChange;\r\n }\r\n\r\n /**\r\n * @returns {Array}\r\n */\r\n static Multiple(properties, min, max, step, onChange){\r\n var controllers = [];\r\n properties.forEach(property => {\r\n controllers.push(new Controller(property, min, max, step, onChange));\r\n });\r\n return controllers;\r\n }\r\n}\r\n\r\nfunction createKeyInfo(obj, key){\r\n var isFolderGrouped = key[0] == \"#\";\r\n if(isFolderGrouped)\r\n key = key.substr(1);\r\n \r\n var propertyPath = key;\r\n \r\n key = key.split('.');\r\n var folder = isFolderGrouped ? key.slice(0, key.length - 1).join('.') : undefined;\r\n while (key.length > 1) obj = obj[key.shift()];\r\n return {\r\n id: (folder ? folder + '.' : '') + key[0],\r\n folder: folder,\r\n owner: obj,\r\n key: key[0],\r\n propertyPath: propertyPath\r\n };\r\n}\r\n\r\nfunction getKey(obj, key){\r\n return key.split('.').reduce(function(a, b){\r\n return a && a[b];\r\n }, obj);\r\n}\r\n\r\nfunction setKey(obj, key, val){\r\n key = key.split('.');\r\n while (key.length > 1) obj = obj[key.shift()];\r\n var endKey = key.shift();\r\n if(obj[endKey].setHex){\r\n obj[endKey].setHex(val);\r\n }\r\n else{\r\n obj[endKey] = val;\r\n }\r\n return obj[endKey];\r\n}\r\n\r\nfunction download(data, filename, type) {\r\n // https://stackoverflow.com/a/30832210/1712403\r\n var file = new Blob([data], {type: (type || 'text/plain')});\r\n if (window.navigator.msSaveOrOpenBlob) // IE10+\r\n window.navigator.msSaveOrOpenBlob(file, filename);\r\n else { // Others\r\n var a = document.createElement(\"a\"),\r\n url = URL.createObjectURL(file);\r\n a.href = url;\r\n a.download = filename;\r\n document.body.appendChild(a);\r\n a.click();\r\n setTimeout(function() {\r\n document.body.removeChild(a);\r\n window.URL.revokeObjectURL(url); \r\n }, 0); \r\n }\r\n}\r\n\r\nconst defaultEditParams = {\r\n save: true, debug: true\r\n};\r\n\r\n/** \r\n * @typedef GUI\r\n * @property {HTMLElement} domElement\r\n */\r\n\r\nclass Shortcut{\r\n /**\r\n * @param {string} label \r\n */\r\n constructor(label){\r\n this.label = label;\r\n\r\n ///** @type {Map} */\r\n //this.folders = new Map();\r\n\r\n this.controller = {};\r\n }\r\n\r\n Add(label, target){\r\n label = label.replace(new RegExp(' ', 'g'), '_');\r\n this.controller[label] = target;\r\n Config.shortcutsGUI.add(this.controller, label);\r\n //console.log('added ' + label + ' shortcut to ' + this.label);\r\n }\r\n}\r\n\r\n/** @type {GUI} */\r\nvar shortcutsGUI;\r\n\r\n/** @type {Map} */\r\nvar shortcuts = new Map();\r\n\r\n/** @type {Map} */\r\nvar instances = new Map();\r\n\r\n\r\nclass Config {\r\n constructor(target){\r\n if(!Config.debug) \r\n Config.debug = instances;\r\n instances.set(target, this);\r\n\r\n this.target = target;\r\n this.keys = [];\r\n }\r\n\r\n Track(...args){\r\n var keys = this.keys;\r\n args.forEach(key => {\r\n keys.push(key);\r\n });\r\n }\r\n\r\n Snapshot(ignoreKeys){\r\n var data = {};\r\n var target = this.target;\r\n this.keys.forEach(key => {\r\n var isController = key instanceof Controller;\r\n var keyInfo = createKeyInfo(target, isController ? key.property : key);\r\n var keyValue = keyInfo.owner[keyInfo.key];\r\n if(typeof keyValue !== 'function'){\r\n data[keyInfo.id] = keyValue;\r\n }\r\n else if(ignoreKeys !== undefined){\r\n var warn = true;\r\n ignoreKeys.forEach(ignoredKey => {\r\n if(ignoredKey === keyInfo.id){\r\n warn = false;\r\n }\r\n });\r\n if(warn) console.log('Config.Snapshot warning: \"' + keyInfo.id + '\" changes will be lost');\r\n }\r\n });\r\n return data;\r\n }\r\n\r\n Serialize(){\r\n var data = {};\r\n this.keys.forEach(key => {\r\n let isController = key instanceof Controller;\r\n let keyInfo = createKeyInfo(this.target, isController ? key.property : key);\r\n let keyValue = keyInfo.owner[keyInfo.key];\r\n if(typeof keyValue !== 'function'){\r\n var saveValue = keyInfo.owner[keyInfo.key].isColor ? '0x' + Number.parseInt(keyValue.toJSON()).toString(16) : keyValue;\r\n data[keyInfo.propertyPath] = saveValue;\r\n }\r\n });\r\n return data;\r\n }\r\n\r\n Save(){\r\n if(this.Update){\r\n this.Update();\r\n this.data = this.Snapshot();\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param {Function} guiChanged \r\n * @param {string} label \r\n * @param {string} gui - or a dat.GUI object\r\n * @param {ConfigParams} params \r\n */\r\n Edit(guiChanged, label, gui, params){\r\n\r\n params = Utils.AssignUndefined(params, defaultEditParams);\r\n\r\n var controllers = [];\r\n var target = this.target;\r\n if(gui === undefined) {\r\n \r\n gui = new (window.dat || require(\"./datGUIConsole\").default).GUI({\r\n autoPlace: true\r\n });\r\n }\r\n else if(label){\r\n gui = gui.addFolder(label);\r\n }\r\n\r\n if(this.editing === undefined){\r\n this.editing = {};\r\n \r\n this.Update = function(){\r\n require(\"./datGUIExtensions\");\r\n \r\n gui.updateAll();\r\n guiChanged();\r\n };\r\n \r\n gui.add(this, 'Update');\r\n }\r\n\r\n this.keys.forEach(key => {\r\n var isController = key instanceof Controller;\r\n var keyInfo = createKeyInfo(target, isController ? key.property : key);\r\n if(this.editing[keyInfo.id] !== true){\r\n var folder = gui;\r\n if(keyInfo.folder){\r\n require(\"./datGUIExtensions\");\r\n\r\n if(gui.find)\r\n folder = gui.find(keyInfo.folder);\r\n else\r\n console.warn('gui extensions not found!');\r\n \r\n if(!folder)\r\n folder = gui.addFolder(keyInfo.folder);\r\n }\r\n var addFunction = keyInfo.owner[keyInfo.key].isColor ? folder.addColor : folder.add;\r\n controllers.push(\r\n ( isController && key.min !== undefined ? \r\n addFunction.call(folder, \r\n keyInfo.owner, keyInfo.key, key.min, key.max, key.step\r\n ) :\r\n addFunction.call(folder, \r\n keyInfo.owner, keyInfo.key\r\n )\r\n ) .onChange(key.onChange === undefined ? guiChanged : \r\n (function(){\r\n key.onChange.call(keyInfo.owner);\r\n guiChanged();\r\n })\r\n )\r\n );\r\n this.editing[keyInfo.id] = true;\r\n }\r\n });\r\n\r\n var scope = this;\r\n var editor = {\r\n Save: function(){\r\n scope.Save();\r\n var filename = label !== undefined ? (label + (label.indexOf('.json') === -1 ? '.json' : '')) : 'config.json';\r\n download(scope.data, filename);\r\n },\r\n\r\n Debug: function(){\r\n console.log(scope.target);\r\n },\r\n\r\n Serialize: function(){\r\n if(scope.Update){\r\n scope.Update();\r\n var data = scope.Serialize();\r\n var json = JSON.stringify(data);\r\n console.log(data, json);\r\n }\r\n }\r\n }\r\n if(params.save){\r\n if(this.defaultsFolder === undefined) this.defaultsFolder = gui.addFolder('...');\r\n if(this.editing['editor.Save'] !== true){\r\n this.defaultsFolder.add(editor, 'Save');\r\n this.editing['editor.Save'] = true;\r\n }\r\n }\r\n if(params.debug){\r\n if(this.defaultsFolder === undefined) this.defaultsFolder = gui.addFolder('...');\r\n if(this.editing['editor.Debug'] !== true){\r\n this.defaultsFolder.add(editor, 'Debug');\r\n this.editing['editor.Debug'] = true;\r\n }\r\n }\r\n\r\n switch(params.serializeMode){\r\n default: break;\r\n case serializeModes.json:\r\n if(this.defaultsFolder === undefined) this.defaultsFolder = gui.addFolder('...');\r\n if(this.editing['editor.Serialize'] !== true){\r\n this.defaultsFolder.add(editor, 'Serialize');\r\n this.editing['editor.Serialize'] = true;\r\n }\r\n break;\r\n }\r\n\r\n this.gui = gui;\r\n }\r\n\r\n toJSON(){\r\n if(this.data === undefined) console.warn(this.target, 'is being saved with undefined data.');\r\n return this.data;\r\n }\r\n\r\n static get serializeModes(){\r\n return serializeModes;\r\n }\r\n\r\n static get shortcuts(){\r\n return shortcuts;\r\n }\r\n\r\n static get shortcutsGUI(){\r\n if(shortcutsGUI === undefined) shortcutsGUI = new (window.dat || require(\"./datGUIConsole\").default).GUI({\r\n autoPlace: false\r\n });\r\n return shortcutsGUI;\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} property - #property marks a folder\r\n * @param {Array} subProperties \r\n * @returns returns the subProperties full paths\r\n */\r\n static Unroll(property, ...subProperties){\r\n var unrolled = [];\r\n subProperties.forEach(subProperty => {\r\n unrolled.push(property + '.' + subProperty);\r\n });\r\n return unrolled;\r\n }\r\n\r\n /**\r\n * @param {*} target \r\n * @param {*} data \r\n */\r\n static Load(target, data){\r\n var keys = Object.keys(data);\r\n keys.forEach(key => {\r\n setKey(target, key, data[key]);\r\n });\r\n\r\n if(instances.has(target) && instances.get(target).Update)\r\n instances.get(target).Update();\r\n }\r\n\r\n /**\r\n * @param {string} category\r\n * @param {string} label \r\n * @param {Function} target \r\n */\r\n static MakeShortcut(category, label, target){\r\n if(shortcuts.has(category) === false) shortcuts.set(category, new Shortcut(category));\r\n var shortcut = shortcuts.get(category);\r\n shortcut.Add(label, target);\r\n }\r\n}\r\n\r\nConfig.Controller = Controller;\r\n\r\nexport default Config;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/config/Config.js","import { epsilon, smallValue, smallValueSqrt, rectanglesFromPoints, linesIntersect, rectangleContainsPoint, reduceRectangles } from \"./Math2D\";\r\n\r\n/** @typedef Rectangle @property {Vec2} p1 @property {Vec2} p2 @property {Vec2} p3 @property {Vec2} p4 \r\n * @property {Number} weight @property {Number} weightCapacity @property {Number} stackingCapacity \r\n */\r\n\r\n/**\r\n * @param {Rectangle | Array} rect \r\n * @param {Number} weight \r\n * @param {Number} weightCapacity \r\n * @param {Number} stackingCapacity \r\n */\r\nfunction setRectangleWeights(rect, weight, weightCapacity, stackingCapacity){\r\n if(rect instanceof Array){\r\n for(let i = 0; i < rect.length; i++){\r\n rect[i].weight = weight;\r\n rect[i].weightCapacity = weightCapacity;\r\n rect[i].stackingCapacity = stackingCapacity;\r\n }\r\n }\r\n else{\r\n rect.weight = weight;\r\n rect.weightCapacity = weightCapacity;\r\n rect.stackingCapacity = stackingCapacity;\r\n }\r\n}\r\n\r\nconst maxWeightValue = Number.MAX_SAFE_INTEGER;\r\n\r\nclass Region{\r\n /**\r\n * @param {Number} x * @param {Number} y * @param {Number} z * @param {Number} width * @param {Number} height * @param {Number} length * @param {Number} preferredX \r\n */\r\n constructor(x, y, z, width, height, length, preferredX){\r\n this.Set(x, y, z, width, height, length, preferredX);\r\n this.SetWeights(0, maxWeightValue, maxWeightValue);\r\n }\r\n\r\n /**\r\n * @param {Number} x * @param {Number} y * @param {Number} z * @param {Number} width * @param {Number} height * @param {Number} length * @param {Number} preferredX \r\n */\r\n Set(x, y, z, width, height, length, preferredX){\r\n this.x = x; this.y = y; this.z = z;\r\n this.width = width; this.height = height; this.length = length;\r\n this.preferredX = preferredX;\r\n return this;\r\n }\r\n \r\n /**\r\n * @param {Number} weight \r\n * @param {Number} weightCapacity \r\n * @param {Number} stackingCapacity \r\n */\r\n SetWeights(weight, weightCapacity, stackingCapacity){\r\n this.weight = weight;\r\n this.weightCapacity = weightCapacity;\r\n this.stackingCapacity = stackingCapacity;\r\n }\r\n\r\n /** @param {Region} region */\r\n Copy(region){\r\n this.Set(region.x, region.y, region.z, region.width, region.height, region.length, region.preferredX);\r\n this.SetWeights(this.weight, this.weightCapacity, this.stackingCapacity);\r\n return this;\r\n }\r\n\r\n get volume(){\r\n return this.width * this.height * this.length;\r\n }\r\n\r\n /**\r\n * @param {Number} offset offsets the region by this before calculating corners \r\n * @returns {Array} 8 corners, length = 24 + center point [24, 25, 26]\r\n */\r\n GetCorners(offset){\r\n var x = this.x - offset, y = this.y - offset, z = this.z - offset, w = this.width + offset * 2, h = this.height + offset * 2, l = this.length + offset * 2;\r\n\r\n tempCorners[0] = x; tempCorners[1] = y; tempCorners[2] = z; // 0:\r\n tempCorners[3] = x + w; tempCorners[4] = y; tempCorners[5] = z; // 0:w\r\n tempCorners[6] = x; tempCorners[7] = y + h; tempCorners[8] = z; // 0:h\r\n tempCorners[9] = x + w; tempCorners[10] = y + h; tempCorners[11] = z; // 0:wh\r\n\r\n tempCorners[12] = x; tempCorners[13] = y; tempCorners[14] = z + l; // 1:\r\n tempCorners[15] = x + w; tempCorners[16] = y; tempCorners[17] = z + l; // 1:w\r\n tempCorners[18] = x; tempCorners[19] = y + h; tempCorners[20] = z + l; // 1:h\r\n tempCorners[21] = x + w; tempCorners[22] = y + h; tempCorners[23] = z + l; // 1:wh\r\n\r\n tempCorners[24] = x + w/2;tempCorners[25] = y + h/2;tempCorners[26] = z + l/2; // center\r\n\r\n return tempCorners;\r\n }\r\n\r\n /**\r\n * @param {Array} result\r\n * @returns {Array} 4 corners, length = 12\r\n */\r\n GetFloorPoints(result){\r\n if(result === undefined) result = tempPoints;\r\n var x = this.x, y = this.y, z = this.z, w = this.width, l = this.length;\r\n\r\n result[0] = x; result[1] = y; result[2] = z;\r\n result[3] = x + w; result[4] = y; result[5] = z;\r\n result[6] = x + w; result[7] = y; result[8] = z + l;\r\n result[9] = x; result[10] = y; result[11] = z + l;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * @param {Number} offset offsets the region by this before checking * @param {Number} px * @param {Number} py * @param {Number} pz \r\n */\r\n ContainsPoint(offset, px, py, pz){\r\n var x = this.x - offset, y = this.y - offset, z = this.z - offset, w = this.width + offset * 2, h = this.height + offset * 2, l = this.length + offset * 2;\r\n return px > x && px < x + w\r\n && py > y && py < y + h\r\n && pz > z && pz < z + l;\r\n }\r\n\r\n /** @param {Number} offset offsets the region by this before checking * @param {Region} subRegion */\r\n ContainsRegion(offset, subRegion){\r\n var x = this.x - offset, y = this.y - offset, z = this.z - offset, w = this.width + offset * 2, h = this.height + offset * 2, l = this.length + offset * 2;\r\n var rx = subRegion.x, ry = subRegion.y, rz = subRegion.z, rw = subRegion.width, rh = subRegion.height, rl = subRegion.length;\r\n return rx > x && rx + rw < x + w\r\n && ry > y && ry + rh < y + h\r\n && rz > z && rz + rl < z + l;\r\n }\r\n\r\n /** @param {Number} offset offsets the region by this before checking * @param {Region} other */\r\n Intersects(offset, other){\r\n var x = this.x - offset, y = this.y - offset, z = this.z - offset, w = this.width + offset * 2, h = this.height + offset * 2, l = this.length + offset * 2;\r\n \r\n return x <= other.x + other.width && x + w >= other.x\r\n && y <= other.y + other.height && y + h >= other.y \r\n && z <= other.z + other.length && z + l >= other.z;\r\n }\r\n\r\n /** @param {Number} offset offsets the region by this before checking * @param {Number} width * @param {Number} height * @param {Number} length\r\n * @param {Number} weight @param {Boolean} grounded\r\n * @param {Region} [result]\r\n */\r\n FitTest(offset, width, height, length, weight, grounded, result){\r\n if(!result) result = tempRegion;\r\n\r\n if(grounded && this.y > smallValue) return false;\r\n\r\n // Check that all dimensions fit\r\n let fit = width < this.width + offset * 2 && height < this.height + offset * 2 && length < this.length + offset * 2;\r\n if(fit){\r\n\r\n let weightFit = weight <= this.weightCapacity;\r\n if(weightFit){\r\n\r\n // Calculate x based on preferred side\r\n let x = this.preferredX !== 0 ? this.x + this.width - width : this.x;\r\n result.Set(x, this.y, this.z, width, height, length, this.preferredX);\r\n result.SetWeights(weight, 0, maxWeightValue);\r\n return result;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @param {Region} region * @param {Number} minRegionAxis */\r\n Subtract(region, minRegionAxis){\r\n /** @type {Array} */\r\n var newRegions;\r\n \r\n // Calculate a new east region\r\n let axis = region.x + region.width;\r\n let size = this.x + this.width - axis;\r\n if(size > minRegionAxis){\r\n let east = new Region(axis, this.y, this.z, size, this.height, this.length, 0);\r\n east.SetWeights(0, this.weightCapacity, this.stackingCapacity);\r\n if(newRegions === undefined) newRegions = [];\r\n newRegions.push(east);\r\n }\r\n\r\n // Calculate a new west region\r\n axis = this.x;\r\n size = region.x - axis;\r\n if(size > minRegionAxis){\r\n let west = new Region(axis, this.y, this.z, size, this.height, this.length, 1);\r\n west.SetWeights(0, this.weightCapacity, this.stackingCapacity);\r\n if(newRegions === undefined) newRegions = [];\r\n newRegions.push(west);\r\n }\r\n\r\n // Calculate a new over/up region\r\n axis = region.y + region.height;\r\n size = this.y + this.height - axis;\r\n if(size > minRegionAxis){\r\n let over = new Region(region.x, axis, region.z, region.width, size, region.length, 0); // todo: add overhang var? // togglePreferredX based on pre-packed weight distribution?\r\n over.SetWeights(0, region.stackingCapacity, region.stackingCapacity);\r\n if(newRegions === undefined) newRegions = [];\r\n newRegions.push(over);\r\n }\r\n\r\n // Calculate a new south region\r\n axis = this.z;\r\n size = region.z - axis;\r\n if(false && size > minRegionAxis){\r\n let south = new Region(this.x, this.y, axis, this.width, this.height, size, 0); // todo togglePreferredX based on pre-packed weight distribution?\r\n south.SetWeights(0, this.weightCapacity, this.stackingCapacity);\r\n if(newRegions === undefined) newRegions = [];\r\n newRegions.push(south);\r\n }\r\n\r\n // Set this as new north/front region\r\n axis = region.z + region.length;\r\n size = this.z + this.length - axis;\r\n this.z = axis;\r\n this.length = size;\r\n this.SetWeights(0, this.weightCapacity, this.stackingCapacity);\r\n\r\n return newRegions;\r\n }\r\n\r\n /** @param {Region} other */\r\n ConnectFloorRects(other){\r\n var ptsA = this.GetFloorPoints(tempPoints),\r\n ptsB = other.GetFloorPoints(tempPoints2);\r\n\r\n var adjacent = 0;\r\n var intersections = [];\r\n for(let iA = 0; iA < 12; iA += 3){\r\n let nextA = iA + 3 === 12 ? 0 : iA + 3;\r\n let ax = ptsA[iA], az = ptsA[iA + 2], nax = ptsA[nextA], naz = ptsA[nextA + 2];\r\n\r\n for(let iB = 0; iB < 12; iB += 3){\r\n let nextB = iB + 3 === 12 ? 0 : iB + 3;\r\n let bx = ptsB[iB], bz = ptsB[iB + 2], nbx = ptsB[nextB], nbz = ptsB[nextB + 2];\r\n\r\n if(\r\n rectangleContainsPoint(smallValue, ptsA[0], ptsA[2], ptsA[6] - ptsA[0], ptsA[8] - ptsA[2], bx, bz)\r\n || rectangleContainsPoint(smallValue, ptsB[0], ptsB[2], ptsB[6] - ptsB[0], ptsB[8] - ptsB[2], ax, az)\r\n ){\r\n adjacent++;\r\n }\r\n\r\n let intersection = linesIntersect(ax, az, nax, naz, bx, bz, nbx, nbz);\r\n if(intersection &&\r\n (\r\n rectangleContainsPoint(smallValue, ptsA[0], ptsA[2], ptsA[6] - ptsA[0], ptsA[8] - ptsA[2], intersection.x, intersection.y)\r\n || rectangleContainsPoint(smallValue, ptsB[0], ptsB[2], ptsB[6] - ptsB[0], ptsB[8] - ptsB[2], intersection.x, intersection.y)\r\n )\r\n ){\r\n intersections.push(intersection);\r\n }\r\n }\r\n }\r\n\r\n if(adjacent > 1){\r\n for(let i = 0; i < 12; i += 3) intersections.push({x: ptsA[i], y: ptsA[i + 2]}, {x: ptsB[i], y: ptsB[i + 2]});\r\n }\r\n else{\r\n intersections.length = 0;\r\n }\r\n\r\n var rectangles = rectanglesFromPoints(intersections);\r\n\r\n let rectA = { p1: {x: ptsA[0], y: ptsA[2]}, p2: {x: ptsA[3], y: ptsA[5]}, p3: {x: ptsA[6], y: ptsA[8]}, p4: {x: ptsA[9], y: ptsA[11]} };\r\n let rectB = { p1: {x: ptsB[0], y: ptsB[2]}, p2: {x: ptsB[3], y: ptsB[5]}, p3: {x: ptsB[6], y: ptsB[8]}, p4: {x: ptsB[9], y: ptsB[11]} };\r\n rectangles.push(rectA, rectB);\r\n\r\n reduceRectangles(rectangles);\r\n\r\n setRectangleWeights(rectangles, this.weight + other.weight, this.weightCapacity + other.weightCapacity, this.stackingCapacity + other.stackingCapacity);\r\n \r\n return rectangles;\r\n }\r\n\r\n ToString(){\r\n return format('R(p:[@, @, @], d:[@, @, @], w:@, wCap:@, sCap:@)', {nf: function(n){\r\n return numberFormat(n, 2);\r\n }},\r\n this.x, this.y, this.z,\r\n this.width, this.height, this.length,\r\n this.weight, this.weightCapacity, this.stackingCapacity\r\n );\r\n }\r\n \r\n /**\r\n * Deepest to front, smallest to largest\r\n * @param {Region} a * @param {Region} b \r\n */\r\n static SortDeepestSmallest(a, b){\r\n if(a.z < b.z) return -1;\r\n if(a.z > b.z)return 1;\r\n if(a.volume < b.volume) return -1;\r\n if(a.volume > b.volume) return 1;\r\n return 0;\r\n }\r\n}\r\n\r\nvar tempRegion = new Region();\r\nvar tempCorners = [0];\r\nvar tempPoints = [0];\r\nvar tempPoints2 = [0];\r\n\r\nexport default Region;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/core/Region.js","\r\nimport SceneSetup from './view/SceneSetup';\r\nimport Packer, { PackerParams } from './packer/Packer';\r\nimport View from './view/View';\r\nimport CargoInput from './components/CargoInput';\r\nimport PackingSpaceInput from './components/PackingSpaceInput';\r\nimport UX from './UX';\r\nimport Logger from './utils/cik/Logger';\r\nimport Signaler from './utils/cik/Signaler';\r\nimport PackerInterface, { SolverParams } from './components/PackerInterface';\r\nimport BoxEntry from './components/box/BoxEntry';\r\nimport Container from './packer/container/Container';\r\nimport Resources from './Resources';\r\nimport Asset from './components/assets/Asset';\r\nimport DomUI from './view/dom/DomUI';\r\n\r\nconst signals = {\r\n start: 'start'\r\n};\r\n\r\n/**\r\n * @typedef AppParams\r\n * @property {UX} ux\r\n * @property {CargoInput} cargoInput\r\n * @property {PackingSpaceInput} packingSpaceInput\r\n * @property {PackerInterface} packerInterface\r\n * @property {Resources} resources\r\n */\r\n\r\nclass App extends Signaler{\r\n\r\n /**\r\n * \r\n * @param {HTMLDivElement} containerDiv\r\n * @param {AppParams} params\r\n */\r\n constructor(containerDiv, params) {\r\n\r\n super();\r\n\r\n let scope = this;\r\n\r\n this.ux = params.ux;\r\n this.cargoInput = params.cargoInput;\r\n this.packingSpaceInput = params.packingSpaceInput;\r\n this.packerInterface = params.packerInterface;\r\n this.resources = params.resources;\r\n Asset.resources = this.resources;\r\n\r\n /** @type {PackerParams} */\r\n let packerParams = this.packerInterface.params;\r\n packerParams.ux = this.ux;\r\n this.packer = new Packer(packerParams);\r\n \r\n this.cargoInput.On(CargoInput.signals.insert, \r\n /** @param {BoxEntry} boxEntry */\r\n function(boxEntry){\r\n scope.packer.cargoList.Add(boxEntry);\r\n });\r\n\r\n this.cargoInput.On(CargoInput.signals.modify, \r\n /** @param {BoxEntry} boxEntry */\r\n function(boxEntry){\r\n scope.packer.cargoList.Modify(boxEntry);\r\n scope.SolveAgain();\r\n });\r\n\r\n this.cargoInput.On(CargoInput.signals.remove, \r\n /** @param {BoxEntry} boxEntry */\r\n function(boxEntry){\r\n scope.packer.cargoList.Remove(boxEntry.uid);\r\n scope.SolveAgain();\r\n });\r\n \r\n this.packingSpaceInput.On(PackingSpaceInput.signals.containerLoaded, \r\n /** @param {Container} container */\r\n function(container){\r\n scope.packer.packingSpace.AddContainer(container);\r\n });\r\n\r\n this.packerInterface.On(PackerInterface.signals.solveRequest, \r\n /** @param {SolverParams} solverParams */\r\n function(solverParams){\r\n scope.Solve(solverParams);\r\n });\r\n\r\n this.domUI = new DomUI(containerDiv, this.ux);\r\n this.sceneSetup = new SceneSetup(this.domUI.domElement ? this.domUI.domElement : containerDiv, this.ux);\r\n this.sceneSetup.Init().then(this.Start.bind(this));\r\n }\r\n\r\n\r\n Start(){\r\n let scope = this;\r\n let packerInterface = this.packerInterface;\r\n\r\n /** @type {import('./view/View').ViewParams} */\r\n let viewParams = { ux: this.ux };\r\n this.view = new View(this.packer, this.sceneSetup, this.domUI, viewParams);\r\n this.sceneSetup.Start();\r\n\r\n this.ux._Bind(this);\r\n this.cargoInput._Bind(this);\r\n this.packingSpaceInput._Bind(this);\r\n\r\n let resetColor = function(){};\r\n this.cargoInput.On(CargoInput.signals.show, \r\n /** @param {BoxEntry} boxEntry */\r\n function(boxEntry){\r\n let existingEntry = scope.cargoInput.GetEntry(boxEntry.uid);\r\n if(existingEntry){\r\n resetColor();\r\n let previewColorBackup = boxEntry.Description('color');\r\n resetColor = function(){ boxEntry.Description('color', previewColorBackup); }\r\n boxEntry.Description('color', existingEntry.Description('color'));\r\n }\r\n scope.view.sceneSetup.hud.Preview(boxEntry);\r\n });\r\n\r\n function hideEntryPreview(){\r\n resetColor();\r\n scope.view.sceneSetup.hud.Preview(false);\r\n }\r\n this.cargoInput.On(CargoInput.signals.hide, hideEntryPreview);\r\n this.cargoInput.On(CargoInput.signals.insert, hideEntryPreview);\r\n this.cargoInput.On(CargoInput.signals.modify, hideEntryPreview);\r\n this.cargoInput.On(CargoInput.signals.remove, hideEntryPreview);\r\n\r\n /** @param {Packer.PackingResult} packingResult */\r\n function onPackUpdate(packingResult){\r\n packerInterface._Notify(PackerInterface.signals.solved, packingResult);\r\n }\r\n this.packer.On(Packer.signals.packUpdate, onPackUpdate);\r\n\r\n /** @param {*} error */\r\n function onPackFailed(error){\r\n packerInterface._Notify(PackerInterface.signals.failed, error);\r\n }\r\n this.packer.On(Packer.signals.packFailed, onPackFailed);\r\n\r\n this.Dispatch(signals.start);\r\n }\r\n\r\n SolveAgain(){\r\n if(this.ux.params.autoUpdatePack && this.packer.solveAgain) this.Solve();\r\n }\r\n\r\n /** @param {SolverParams} [solverParams] */\r\n Solve(solverParams){\r\n this.view.ClearPackingResults();\r\n this.packer.Solve(solverParams);\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n \r\n}\r\n\r\nexport default App;\r\n \n\n\n// WEBPACK FOOTER //\n// ./src/api/App.js","import CargoList from \"./CargoList\";\r\nimport PackingSpace from \"./PackingSpace\";\r\nimport BoxEntry from \"../components/box/BoxEntry\";\r\nimport Utils from \"../utils/cik/Utils\";\r\nimport Signaler from \"../utils/cik/Signaler\";\r\nimport ContainingVolume from \"./container/ContainingVolume\";\r\n\r\nconst CUB = require('./cubX/CUB');\r\n\r\n/** @typedef CUBParams\r\n * @property {Number} score_minLength [0, 1] influence position of cargo in length\r\n * \r\n * (higher values means the algorithm will try to pack as tightly as possible in length)\r\n * \r\n * @property {Number} score_minWastedSpace [0, 1] influence orientation of cargo \r\n * \r\n * (higher values means the algorithm will try to minimize orientation that results in 'unuseable' unpacked volumes)\r\n */\r\n\r\nconst typeofHeuristicParams = CUB.heuristics.HeuParametric1.Params;\r\n\r\n/** @param {CUBParams} cubParams @param {typeofHeuristicParams} heuristicParams */\r\nfunction extractHeuristicParams(cubParams, heuristicParams){\r\n if(heuristicParams === undefined) heuristicParams = new typeofHeuristicParams();\r\n\r\n let scoringWeight = cubParams.score_minLength + cubParams.score_minWastedSpace;\r\n\r\n heuristicParams.scoring.minZ = cubParams.score_minLength / scoringWeight;\r\n heuristicParams.scoring.minWaste = cubParams.score_minWastedSpace / scoringWeight;\r\n return heuristicParams;\r\n}\r\n\r\n/**\r\n * @typedef {Object} PackerParams\r\n * @property {import('../UX').default} ux\r\n * @property {Number} defaultStackingFactor\r\n */ \r\n\r\n/** @typedef SolverParams\r\n * @property {CUBParams} algorithmParams\r\n * @property {string} algorithm default = 'cub'\r\n */\r\n\r\nclass PackedCargo {\r\n /**\r\n * @param {BoxEntry} entry \r\n * @param {ContainingVolume} containingVolume \r\n * @param {THREE.Vector3} position \r\n * @param {Number} orientation \r\n */\r\n constructor(entry, containingVolume, position, orientation){\r\n this.entry = entry;\r\n this.containingVolume = containingVolume;\r\n this.position = position;\r\n this.orientation = orientation;\r\n }\r\n}\r\n\r\nclass UnpackedCargo {\r\n /**\r\n * @param {BoxEntry} entry \r\n * @param {Number} unpackedQuantity\r\n */\r\n constructor(entry, unpackedQuantity){\r\n this.entry = entry;\r\n this.unpackedQuantity = unpackedQuantity;\r\n }\r\n}\r\n\r\nclass PackingResult{\r\n /** @param {Number} numTotalItem @param {Number} runtime */\r\n constructor(numTotalItems, runtime){\r\n /** @type {Array} */\r\n this.packed = [];\r\n\r\n /** @type {Array} */\r\n this.unpacked = [];\r\n\r\n this.numTotalItems = numTotalItems || 0;\r\n\r\n this.runtime = runtime || -1;\r\n }\r\n}\r\n\r\n/** @type {PackerParams} */\r\nconst defaultParams = {};\r\nconst signals = {\r\n packUpdate: 'packUpdate',\r\n packFailed: 'packFailed'\r\n};\r\n\r\nconst _solverParams = Symbol('solverParams');\r\n\r\nconst epsilon = Math.pow(2, -52);\r\n\r\nclass Packer extends Signaler {\r\n /** @param {PackerParams} params */\r\n constructor(params){\r\n super();\r\n\r\n /** Shared object with PackerInterface's params */\r\n this.params = params;\r\n\r\n this.packingSpace = new PackingSpace();\r\n this.cargoList = new CargoList();\r\n\r\n this.solverExecutionsCount = 0;\r\n }\r\n\r\n /** @param {SolverParams} params */\r\n Solve(params){\r\n params = params || this[_solverParams];\r\n this[_solverParams] = params;\r\n\r\n this.solverExecutionsCount++;\r\n\r\n let algorithm = params.algorithm;\r\n let algorithmParams = params.algorithmParams;\r\n if(algorithm === 'cub')\r\n this.SolveCUB(algorithmParams);\r\n }\r\n\r\n /** @param {CUBParams} params */\r\n async SolveCUB(params){\r\n\r\n if(this.packingSpace.ready === false){\r\n this.Dispatch(signals.packFailed, 'Packing space not ready');\r\n return;\r\n }\r\n\r\n if(this.cargoList.ready === false){\r\n this.Dispatch(signals.packFailed, 'Cargo list not ready');\r\n return;\r\n }\r\n\r\n const Container = CUB.Container;\r\n const Item = CUB.Item;\r\n\r\n var containingVolume = this.packingSpace.current.volume;\r\n var d = containingVolume.dimensions;\r\n var container = new Container(containingVolume.uid, d.width, d.height, d.length, containingVolume.weightCapacity);\r\n\r\n var numTotalItems = 0;\r\n\r\n /** @type {Array} */\r\n var items = [];\r\n var entries = {};\r\n for(let group of this.cargoList.groups.values()){\r\n /** @type {BoxEntry} */\r\n let entry = group.entry;\r\n entries[entry.uid] = entry;\r\n d = entry.dimensions;\r\n let validOrientations = entry.properties.rotation.enabled ? entry.properties.rotation.allowedOrientations : undefined;\r\n let stackingCapacity = entry.properties.stacking.enabled ? entry.properties.stacking.capacity : (entry.weight > epsilon ? entry.weight * this.params.defaultStackingFactor : Number.MAX_SAFE_INTEGER - 10);\r\n let grounded = entry.properties.translation.enabled ? entry.properties.translation.grounded : false;\r\n let item = new Item(entry.uid, d.width, d.height, d.length, entry.weight, entry.quantity, validOrientations, stackingCapacity, grounded);\r\n items.push(item);\r\n numTotalItems += entry.quantity;\r\n }\r\n\r\n var startTime = performance.now();\r\n let heuristicParams = extractHeuristicParams(params);\r\n let heuristic = new CUB.heuristics.HeuParametric1(heuristicParams);\r\n var result = await CUB.pack(container, items, heuristic);\r\n var cubRuntime = performance.now() - startTime;\r\n\r\n var cubRuntime2Dec = Math.round(cubRuntime / 1000 * 100) / 100;\r\n var packingResult = new PackingResult(numTotalItems, cubRuntime2Dec);\r\n result.packedItems.forEach(packedItem => {\r\n let entry = entries[packedItem.ref.id];\r\n let position = new THREE.Vector3(\r\n packedItem.x + packedItem.packedWidth / 2,\r\n packedItem.y + packedItem.packedHeight / 2,\r\n packedItem.z + packedItem.packedLength / 2\r\n );\r\n let orientation = Item.ResolveOrientation(packedItem.orientation);\r\n let packedCargo = new PackedCargo(entry, containingVolume, position, orientation);\r\n packingResult.packed.push(packedCargo);\r\n });\r\n\r\n result.unpackedItems.forEach(unpackedItem => {\r\n let entry = entries[unpackedItem.id];\r\n let unpackedQuantity = unpackedItem.quantity;\r\n let unpackedCargo = new UnpackedCargo(entry, unpackedQuantity);\r\n packingResult.unpacked.push(unpackedCargo);\r\n });\r\n\r\n this.Dispatch(signals.packUpdate, packingResult);\r\n }\r\n\r\n get solveAgain(){\r\n return this.solverExecutionsCount > 0;\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n\r\n}\r\n\r\nPacker.PackingResult = PackingResult;\r\nPacker.PackedCargo = PackedCargo;\r\nPacker.UnpackedCargo = UnpackedCargo;\r\n\r\nexport default Packer;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/Packer.js","import Volume from \"./Volume\";\r\nimport Container from \"./Container\";\r\n\r\nconst _weightCapacity = Symbol('weightCapacity');\r\nconst type = 'ContainingVolume';\r\n\r\nclass ContainingVolume extends Volume {\r\n /** @param {Container} container */\r\n constructor(container){\r\n super();\r\n \r\n this.container = container;\r\n this.weightCapacity = 0;\r\n\r\n this.SetUID();\r\n }\r\n\r\n set weightCapacity(value){ this[_weightCapacity] = value; }\r\n get weightCapacity(){ return this[_weightCapacity]; }\r\n\r\n /**\r\n * @param {string} [uid] - You'll rarely need to provide this\r\n */\r\n SetUID(uid){\r\n this.uid = uid || THREE.Math.generateUUID();\r\n return this.uid;\r\n }\r\n\r\n toJSON(){\r\n var json = super.toJSON();\r\n json.type = type;\r\n json.weightCapacity = this.weightCapacity;\r\n return json;\r\n }\r\n\r\n ToString(){\r\n return super.ToString();\r\n }\r\n\r\n static FromJSON(data){\r\n if(data.type !== type) console.warn('Data supplied is not: ' + type);\r\n\r\n var containingVolume = new ContainingVolume();\r\n containingVolume.weightCapacity = data.weightCapacity;\r\n Volume.FromJSON(data, containingVolume);\r\n\r\n return containingVolume;\r\n }\r\n}\r\n\r\nexport default ContainingVolume;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/container/ContainingVolume.js","\r\nconst typeofNumber = 'number';\r\n\r\nconst _maxHeight = Symbol('maxHeight');\r\nconst _validOrientations = Symbol('validOrientations');\r\n\r\nconst orientations = [ 'xyz', 'zyx', 'yxz', 'yzx', 'zxy', 'xzy' ];\r\nvar dimensions = [0, 0, 0];\r\n\r\nclass Item{\r\n /**\r\n * @param {string} id \r\n * @param {Number} width \r\n * @param {Number} height \r\n * @param {Number} length \r\n * @param {Number} weight \r\n * @param {Number} quantity \r\n * @param {Array} validOrientations\r\n * @param {Number} stackingCapacity \r\n * @param {Boolean} grounded \r\n */\r\n constructor(id, width, height, length, weight, quantity, validOrientations, stackingCapacity, grounded){\r\n this.id = id;\r\n this.width = width;\r\n this.height = height;\r\n this.length = length;\r\n this.weight = weight;\r\n /** @type {Number} */\r\n this.volume = width * height * length;\r\n this.quantity = quantity;\r\n\r\n this.validOrientations = validOrientations;\r\n\r\n this.stackingCapacity = stackingCapacity;\r\n this.grounded = grounded;\r\n }\r\n\r\n /** @returns {Array} */\r\n get validOrientations(){ return this[_validOrientations]; }\r\n set validOrientations(value){\r\n if(!value) value = orientations;\r\n\r\n let validOrientations = [];\r\n for(let i = 0; i < value.length; i++){\r\n let vo = value[i];\r\n let orientation = (typeof vo === typeofNumber) ? vo : orientations.indexOf(vo.toLowerCase());\r\n if(orientation !== -1) validOrientations.push(orientation);\r\n }\r\n\r\n if(validOrientations.length === 0) validOrientations[0] = 'xyz' || orientations[0];\r\n\r\n this[_validOrientations] = validOrientations;\r\n this[_maxHeight] = undefined;\r\n }\r\n\r\n get xyz(){ dimensions[0] = this.width; dimensions[1] = this.height; dimensions[2] = this.length; return dimensions; }\r\n get zyx(){ dimensions[0] = this.length; dimensions[1] = this.height; dimensions[2] = this.width; return dimensions; }\r\n get yxz(){ dimensions[0] = this.height; dimensions[1] = this.width; dimensions[2] = this.length; return dimensions; }\r\n get yzx(){ dimensions[0] = this.height; dimensions[1] = this.length; dimensions[2] = this.width; return dimensions; }\r\n get zxy(){ dimensions[0] = this.length; dimensions[1] = this.width; dimensions[2] = this.height; return dimensions; }\r\n get xzy(){ dimensions[0] = this.width; dimensions[1] = this.length; dimensions[2] = this.height; return dimensions; }\r\n\r\n /** @returns {Number} */\r\n get maxHeight(){\r\n if(this[_maxHeight] === undefined){\r\n let maxHeight = 0;\r\n for(let i = 0; i < this.validOrientations.length; i++){\r\n let dimensions = this.GetOrientedDimensions(this.validOrientations[i]);\r\n if(dimensions[1] > maxHeight) maxHeight = dimensions[1];\r\n }\r\n this[_maxHeight] = maxHeight;\r\n }\r\n \r\n return this[_maxHeight];\r\n }\r\n\r\n /** @param {Number} orientation */\r\n GetOrientedDimensions(orientation){\r\n switch(orientation){\r\n case 0: return this.xyz;\r\n case 1: return this.zyx;\r\n case 2: return this.yxz;\r\n case 3: return this.yzx;\r\n case 4: return this.zxy;\r\n case 5: return this.xzy;\r\n }\r\n }\r\n\r\n ToString(){\r\n let q = this.quantity, \r\n d = this.width.toFixed(2) + 'x' + this.height.toFixed(2) + 'x' + this.length.toFixed(2),\r\n id = this.id;\r\n return q + 'x (' + d + ') - ' + id;\r\n }\r\n\r\n /** @param {Number} orientation */\r\n static ResolveOrientation(orientation){\r\n return orientations[orientation];\r\n }\r\n\r\n /** @param {Array} items */\r\n static GetMinDimensions(items){\r\n var minDimensions = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER];\r\n\r\n for(let iItem = 0, numItems = items.length; iItem < numItems; iItem++){\r\n let item = items[iItem];\r\n var validOrientations = item.validOrientations;\r\n for(let iOrient = 0; iOrient < validOrientations.length; iOrient++){\r\n let orientation = validOrientations[iOrient];\r\n let dimensions = item.GetOrientedDimensions(orientation);\r\n if(dimensions[0] < minDimensions[0]) minDimensions[0] = dimensions[0];\r\n if(dimensions[1] < minDimensions[1]) minDimensions[1] = dimensions[1];\r\n if(dimensions[2] < minDimensions[2]) minDimensions[2] = dimensions[2];\r\n }\r\n }\r\n\r\n return minDimensions;\r\n }\r\n\r\n /**\r\n * @param {Item} a \r\n * @param {Item} b \r\n */\r\n static VolumeSort(a, b){\r\n if(a.volume < b.volume) return -1;\r\n if(a.volume > b.volume) return 1;\r\n return 0;\r\n }\r\n\r\n /**\r\n * @param {Item} a \r\n * @param {Item} b \r\n */\r\n static HeightSort(a, b){\r\n if(a.maxHeight < b.maxHeight) return -1;\r\n if(a.maxHeight > b.maxHeight) return 1;\r\n if(a.volume < b.volume) return -1;\r\n if(a.volume > b.volume) return 1;\r\n return 0;\r\n }\r\n}\r\n\r\nclass Container{\r\n /**\r\n * @param {string} id \r\n * @param {Number} width \r\n * @param {Number} height \r\n * @param {Number} length \r\n * @param {Number} weightCapacity \r\n */\r\n constructor(id, width, height, length, weightCapacity){\r\n this.id = id;\r\n this.width = width;\r\n this.height = height;\r\n this.length = length;\r\n this.weightCapacity = weightCapacity;\r\n }\r\n}\r\n\r\nexport {\r\n Item,\r\n Container\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/core/Components.js","\r\nimport Input from '../utils/cik/input/Input';\r\nimport Quality from '../utils/cik/Quality';\r\nimport Controller from '../scene/Controller';\r\nimport Renderer from '../scene/Renderer';\r\nimport Camera from '../scene/Camera';\r\nimport HUDView from './HUDView';\r\nimport UX from '../UX';\r\nimport Utils from '../utils/cik/Utils';\r\nimport Signaler from '../utils/cik/Signaler';\r\n\r\nconst signals = {\r\n init: 'init',\r\n started: 'started',\r\n paused: 'paused',\r\n stopped: 'stopped'\r\n};\r\n\r\nclass SceneSetup extends Signaler {\r\n /**\r\n * \r\n * @param {HTMLDivElement} containerDiv \r\n * @param {UX} ux \r\n */\r\n constructor(containerDiv, ux){\r\n super();\r\n \r\n this.domElement = containerDiv;\r\n this.ux = ux;\r\n }\r\n\r\n Init(){\r\n \r\n var quality = new Quality().Common(2);\r\n\r\n var units = this.ux.params.units;\r\n var controllerParams = {};\r\n this.sceneController = new Controller(controllerParams);\r\n\r\n /** @type {import('../scene/Renderer').RendererParams} */\r\n var rendererParams = {clearColor: this.ux.params.backgroundColor};\r\n Object.assign(rendererParams, quality);\r\n this.sceneRenderer = new Renderer(rendererParams);\r\n this.sceneRenderer.renderer.toneMappingExposure = 1.6;\r\n this.domElement.appendChild(this.sceneRenderer.renderer.domElement);\r\n\r\n /** @type {import('./Camera').CameraParams} */\r\n var cameraParams = {fov: this.ux.params.fov, aspect: 1, near: 1 * units, far: 6000 * units};\r\n this.cameraController = new Camera(cameraParams);\r\n this.cameraController.OrbitControls(this.sceneRenderer.renderer.domElement);\r\n\r\n this.input = new Input(this.domElement);\r\n this.input.camera = this.cameraController.camera;\r\n\r\n var sceneRendererRef = this.sceneRenderer;\r\n var appCameraRef = this.cameraController.camera;\r\n this.input.onResize.push(function(screen){\r\n sceneRendererRef.ReconfigureViewport(screen, appCameraRef);\r\n });\r\n\r\n // hud\r\n if(this.ux.params.hud){\r\n /** @type {import('../view/HUDView').HUDViewParams} */\r\n var hudParams = {ux: this.ux, sceneSetup: this, container: this.sceneRenderer.renderer.domElement};\r\n /** @type {import('./Camera').CameraParams} */\r\n var hudCameraParams = Utils.AssignUndefined({fov: 15}, cameraParams);\r\n this.hud = new HUDView(hudParams, hudCameraParams);\r\n var hudCameraRef = this.hud.cameraController.camera;\r\n this.input.onResize.push(function(screen){\r\n sceneRendererRef.AdjustCamera(screen, hudCameraRef);\r\n });\r\n\r\n this.sceneRenderer.renderer.autoClear = false;\r\n }\r\n // /hud\r\n\r\n // Comeplete setup\r\n var setupParams = {\r\n gridHelper: false,\r\n }\r\n\r\n // Initial camera move\r\n\t\tthis.cameraController.position.x = 100 * units;\r\n\t\tthis.cameraController.position.y = 100 * units;\r\n this.cameraController.position.z = 100 * units;\r\n this.cameraController.SetTarget(new THREE.Vector3());\r\n\r\n // Env\r\n if(setupParams.gridHelper){\r\n var gridHelper = new THREE.GridHelper(200 * units, 20);\r\n this.sceneController.AddDefault(gridHelper);\r\n }\r\n\r\n if(this.ux.params.configure){\r\n this.Configure();\r\n }\r\n\r\n var scope = this;\r\n return new Promise((resolve, reject) => {\r\n scope.Dispatch(signals.init);\r\n resolve();\r\n });\r\n }\r\n\r\n Start(){\r\n if(this.Update === undefined){\r\n let scope = this;\r\n let sceneRenderer = this.sceneRenderer;\r\n let scene1 = this.sceneController.scene,\r\n camera1 = this.cameraController.camera;\r\n \r\n if(this.ux.params.hud){\r\n let hud = this.hud;\r\n let scene2 = hud.scene,\r\n camera2 = hud.cameraController.camera;\r\n \r\n this.Update = function(timestamp){\r\n scope.animationFrameID = requestAnimationFrame(scope.Update);\r\n\r\n scope.input.Update();\r\n scope.cameraController.Update();\r\n hud.Update(timestamp);\r\n\r\n sceneRenderer.renderer.clear();\r\n sceneRenderer.Render(scene1, camera1);\r\n sceneRenderer.renderer.clearDepth();\r\n sceneRenderer.Render(scene2, camera2);\r\n };\r\n }\r\n else{\r\n this.Update = function(timestamp){\r\n scope.animationFrameID = requestAnimationFrame(scope.Update);\r\n\r\n scope.input.Update();\r\n scope.cameraController.Update();\r\n\r\n sceneRenderer.Render(scene1, camera1);\r\n };\r\n }\r\n }\r\n\r\n this.Update();\r\n this.input.screenNeedsUpdate = true;\r\n this.input.cameraNeedsUpdate = true;\r\n\r\n this.Dispatch(signals.started);\r\n }\r\n\r\n Pause(){\r\n if(this.animationFrameID){\r\n cancelAnimationFrame(this.animationFrameID);\r\n }\r\n\r\n this.Dispatch(signals.paused);\r\n }\r\n\r\n Stop(){\r\n if(this.animationFrameID){\r\n cancelAnimationFrame(this.animationFrameID);\r\n }\r\n this.input.Dispose();\r\n this.sceneRenderer.Dispose();\r\n\r\n this.Dispatch(signals.stopped);\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n\r\n DefaultLights(controller, configure, helpers){\r\n\r\n var units = this.ux.params.units;\r\n\r\n var ambientLight = new THREE.AmbientLight( 0x404040 );\r\n\r\n var directionalLight = new THREE.DirectionalLight(0xfeeedd);\r\n directionalLight.position.set(300 * units, 300 * units, 125 * units);\r\n \r\n controller.ambientContainer.add(ambientLight);\r\n controller.ambientContainer.add(directionalLight);\r\n\r\n var directionalLightComplem = new THREE.DirectionalLight(0xfeeedd);\r\n directionalLightComplem.position.set(-200 * units, 175 * units, 125 * units);\r\n \r\n controller.ambientContainer.add(directionalLightComplem);\r\n\r\n if(this.ux.params.configure && configure){\r\n let Smart = require('../utils/cik/config/Smart').default;\r\n let Config = require('../utils/cik/config/Config').default;\r\n let Control3D = require('../utils/cik/config/Control3D').default;\r\n\r\n let dl = directionalLight;\r\n let smart = new Smart(dl, 'Directional light');\r\n smart.MakeShortcut('Configure');\r\n \r\n let lightController = ['color', 'intensity', 'castShadow'];\r\n let shadowControllers = ['shadow.bias', 'shadow.radius', 'shadow.mapSize.x', 'shadow.mapSize.y'];\r\n //let sc = dl.shadow.camera as THREE.OrthographicCamera;\r\n let shadowCameraControllers = Config.Unroll('#shadow.camera', 'left', 'top', 'right', 'bottom', 'near', 'far');\r\n\r\n let dlHelper, dlCameraHelper;\r\n if(helpers){\r\n dlHelper = new THREE.DirectionalLightHelper(dl, 5);\r\n this.sceneController.AddDefault(dlHelper);\r\n dlCameraHelper = new THREE.CameraHelper(dl.shadow.camera);\r\n this.sceneController.AddDefault(dlCameraHelper);\r\n }\r\n\r\n let sceneRenderer = this.sceneRenderer;\r\n global.sceneRenderer = sceneRenderer;\r\n let mapSize = dl.shadow.mapSize.clone();\r\n function onGUIChanged(){\r\n dl.shadow.camera.updateProjectionMatrix();\r\n sceneRenderer.UpdateShadowMaps();\r\n if(dl.shadow.map){\r\n if(dl.shadow.mapSize.manhattanDistanceTo(mapSize) > 0.0001){\r\n mapSize.copy(dl.shadow.mapSize);\r\n dl.shadow.map.dispose();\r\n dl.shadow.map = null;\r\n }\r\n }\r\n\r\n if(helpers){\r\n dlHelper.update();\r\n dlCameraHelper.update();\r\n }\r\n }\r\n\r\n smart.Config('Directional light + shadow', dl, onGUIChanged, Smart.serializeModes.json,\r\n ...lightController,\r\n ...shadowControllers,\r\n ...shadowCameraControllers\r\n );\r\n }\r\n\r\n return [ambientLight, directionalLight, directionalLightComplem];\r\n }\r\n\r\n Configure(){\r\n\r\n var Smart = require('../utils/cik/config/Smart').default;\r\n var Config = require('../utils/cik/config/Config').default;\r\n var Control3D = require('../utils/cik/config/Control3D').default;\r\n\r\n var scope = this;\r\n\r\n var appControl3D = Control3D.Configure('app', this.cameraController.camera, this.sceneRenderer.renderer.domElement);\r\n this.sceneController.AddDefault(appControl3D.control);\r\n\r\n if(this.ux.params.hud){\r\n var hudControl3D = Control3D.Configure('hud', this.hud.cameraController.camera, this.sceneRenderer.renderer.domElement);\r\n this.hud.AddDefault(hudControl3D.control);\r\n\r\n var hud = this.hud;\r\n function onGUIChanged(){\r\n console.log('Camera changed');\r\n }\r\n\r\n var toggle = false;\r\n var control = {\r\n toggleOrbitOwner: function(){\r\n if(toggle){\r\n if(!hud.cameraController.orbitControls){\r\n hud.cameraController.OrbitControls(scope.sceneRenderer.renderer.domElement);\r\n }\r\n scope.cameraController.Hold();\r\n hud.cameraController.Release();\r\n }\r\n else{\r\n scope.cameraController.Release();\r\n hud.cameraController.Hold();\r\n }\r\n toggle = !toggle;\r\n },\r\n hudCam: hud.cameraController,\r\n print: function(){\r\n smart.config.Update();\r\n console.group('hudCam properties');\r\n console.log('position', Utils.VecToString(hud.cameraController.position, 1));\r\n console.log('rotation', Utils.VecToString(hud.cameraController.rotation, 3));\r\n console.groupEnd();\r\n }\r\n };\r\n\r\n control.toggleOrbitOwner();\r\n \r\n var smart = new Smart(this, 'HUDView');\r\n smart.MakeShortcut('Configure');\r\n var rotationProperties = Config.Unroll('#hudCam.rotation', 'x', 'y', 'z');\r\n var rotationControllers = Config.Controller.Multiple(rotationProperties, 0, 2 * Math.PI, 2 * Math.PI / 360);\r\n smart.Config(null, control, onGUIChanged, Smart.serializeModes.none,\r\n 'toggleOrbitOwner',\r\n 'print',\r\n 'hudCam.camera.fov', \r\n ...Config.Unroll('#hudCam.position', 'x', 'y', 'z'), \r\n ...rotationControllers\r\n );\r\n\r\n console.log('HUDView config', smart.config.gui.list || smart);\r\n }\r\n }\r\n}\r\n\r\nexport default SceneSetup;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/SceneSetup.js","import Tween from \"../utils/cik/Tween\";\r\nimport Signaler from \"../utils/cik/Signaler\";\r\n\r\nrequire('../../min-dependencies/lib/three/controls/OrbitControls');\r\n\r\nconst epsilon = Math.pow(2, -52);\r\n\r\n/**\r\n * @typedef {Object} CameraParams\r\n * @property {Number} fov\r\n * @property {Number} aspect\r\n * @property {Number} near\r\n * @property {Number} far\r\n */\r\n\r\n/** @typedef FrameCoords @property {THREE.Vector3} position @property {THREE.Vector3} center */\r\n\r\n/** @type {FrameCoords} */\r\nvar tempCoords = {};\r\n/** @type {FrameCoords} */\r\nvar ownCoords = {position: new THREE.Vector3(), center: new THREE.Vector3()};\r\n\r\nvar tempVec3 = new THREE.Vector3(),\r\n tempVec3_b = new THREE.Vector3();\r\n\r\nconst signals = {\r\n change: 'change',\r\n userChange: 'userChange'\r\n};\r\n\r\nclass Camera extends Signaler {\r\n /**\r\n * @param {CameraParams} params \r\n */\r\n constructor(params){\r\n super();\r\n\r\n this.params = params;\r\n\r\n this.camera = new THREE.PerspectiveCamera(this.params.fov, this.params.aspect, this.params.near, this.params.far);\r\n this.camera.name = 'UserCamera';\r\n\r\n this.changed = false;\r\n\r\n this.dollyAnimation = {\r\n enabled: false,\r\n position: Tween.Combo.RequestN(Tween.functions.ease.easeInOutQuad, .5, 0, 0, 0, 0, 0, 0),\r\n lookAt: Tween.Combo.RequestN(Tween.functions.ease.easeInOutQuad, .5, 0, 0, 0, 0, 0, 0)\r\n };\r\n\r\n let scope = this;\r\n function onDollyAnimationComplete(){\r\n scope.dollyAnimation.enabled = false;\r\n }\r\n this.dollyAnimation.position.onComplete = onDollyAnimationComplete;\r\n this.dollyAnimation.lookAt.onComplete = onDollyAnimationComplete;\r\n\r\n this.dollyAnimation.position.Hook(this.position, 'x', 'y', 'z');\r\n\r\n this.fovAnimation = {\r\n enabled: false,\r\n fov: new Tween(Tween.functions.ease.easeInOutQuad, 0, 0, 0)\r\n };\r\n\r\n function onFOVAnimationComplete(){\r\n scope.fovAnimation.enabled = false;\r\n }\r\n this.fovAnimation.fov.onComplete = onFOVAnimationComplete;\r\n this.fovAnimation.fov.Hook(this.camera, 'fov');\r\n }\r\n\r\n get position(){ return this.camera.position; }\r\n set position(value){ this.camera.position.copy(value); this.changed = true; }\r\n get rotation(){ return this.camera.rotation; }\r\n set rotation(value){ this.camera.rotation.copy(value); this.changed = true; }\r\n\r\n FirstPersonControls(container, params){\r\n if(this.fpsControls === undefined && container !== undefined){\r\n this.fpsControls = new App.Navigation.FirstPerson(this.camera, container);\r\n\r\n this.fpsControls.Hold = function(){\r\n this.enabled = false;\r\n };\r\n this.fpsControls.Release = function(){\r\n this.enabled = true;\r\n };\r\n }\r\n \r\n if(this.fpsControls !== undefined){\r\n if(params !== undefined){\r\n this.fpsControls.speed.set(params.speedX, params.speedY);\r\n this.fpsControls.damping = params.damping;\r\n this.fpsControls.momentum = params.momentum;\r\n this.fpsControls.limitPhi = params.limitPhi;\r\n this.fpsControls.moveSpeed = params.moveSpeed;\r\n this.fpsControls.keyControls = true;\r\n }\r\n\r\n this.controls = this.fpsControls;\r\n }\r\n }\r\n\r\n OrbitControls(container, params){\r\n if(this.orbitControls === undefined && container !== undefined){\r\n\r\n var lookTarget = new THREE.Vector3();\r\n this.camera.getWorldDirection(lookTarget);\r\n lookTarget.multiplyScalar(200).add(this.camera.position);\r\n\r\n /** @type {THREE.EventDispatcher} */\r\n this.orbitControls = new THREE.OrbitControls(this.camera, container);\r\n this.orbitControls.target.copy(lookTarget);\r\n\r\n this.dollyAnimation.lookAt.Hook(this.orbitControls.target, 'x', 'y', 'z');\r\n\r\n let scope = this;\r\n this.orbitControls.addEventListener('change', function(e){\r\n scope.changed = true;\r\n });\r\n this.orbitControls.addEventListener('start', function(e){\r\n scope.Dispatch(signals.userChange);\r\n });\r\n \r\n this.orbitControls.Update = function(){\r\n if(this.enabled){\r\n if(this.object.position.distanceTo(this.target) < 50){\r\n var v = new THREE.Vector3().subVectors(this.target, this.object.position).multiplyScalar(.5);\r\n this.target.add(v);\r\n }\r\n this.update();\r\n }\r\n };\r\n this.orbitControls.Hold = function(){\r\n this.saveState();\r\n this.enabled = false;\r\n };\r\n this.orbitControls.Release = function(){\r\n this.reset();\r\n this.enabled = true;\r\n };\r\n }\r\n\r\n \r\n params = params || {\r\n maxDistance: 9000.0 * /*units*/1,\r\n maxPolarAngle: Math.PI * 0.895\r\n }\r\n if(params !== undefined){\r\n this.orbitControls.maxDistance = params.maxDistance;\r\n this.orbitControls.maxPolarAngle = params.maxPolarAngle;\r\n this.orbitControls.autoRotate = false;\r\n }\r\n\r\n this.controls = this.orbitControls;\r\n }\r\n\r\n ToggleControls(){\r\n this.Hold();\r\n\r\n if(this.controls === this.orbitControls){\r\n if(this.fpsControls){\r\n this.fpsControls.LerpRotation(this.camera, 1);\r\n this.FirstPersonControls();\r\n }\r\n }\r\n else{\r\n if(this.orbitControls){\r\n this.OrbitControls();\r\n\r\n // target\r\n var maxDistance = 100;\r\n\r\n var point = new THREE.Vector3(0, 0, -1);\r\n var quat = new THREE.Quaternion();\r\n point.applyQuaternion(this.camera.getWorldQuaternion(quat)).normalize().multiplyScalar(maxDistance * .5).add(this.camera.position);\r\n\r\n this.SetTarget(point);\r\n }\r\n }\r\n\r\n this.Release();\r\n }\r\n\r\n /** @param {THREE.Vector3} position */\r\n SetTarget(position){\r\n if(this.controls instanceof THREE.OrbitControls){\r\n this.controls.target.copy(position);\r\n this.changed = true;\r\n }\r\n else {\r\n console.warn('SetTarget not implemented for control type:', this.controls);\r\n }\r\n }\r\n\r\n /** @returns {THREE.Vector3} */\r\n GetTarget(){\r\n if(this.controls instanceof THREE.OrbitControls){\r\n return this.controls.target;\r\n }\r\n else {\r\n console.warn('GetTarget not implemented for control type:', this.controls);\r\n }\r\n }\r\n\r\n Update(){\r\n if(this.dollyAnimation.enabled){\r\n this.dollyAnimation.position.Update();\r\n this.dollyAnimation.lookAt.Update();\r\n this.changed = true;\r\n }\r\n\r\n if(this.fovAnimation.enabled){\r\n this.fovAnimation.fov.Update();\r\n this.camera.updateProjectionMatrix();\r\n this.changed = true;\r\n }\r\n\r\n if(this.controls !== undefined){\r\n this.controls.Update();\r\n }\r\n }\r\n\r\n Hold(){\r\n if(this.enabled && this.controls !== undefined && this.controls.Hold){\r\n this.controls.Hold();\r\n }\r\n }\r\n\r\n Release(){\r\n if(!this.enabled && this.controls !== undefined && this.controls.Release){\r\n this.controls.Release();\r\n }\r\n }\r\n\r\n /**\r\n * @param {THREE.Box3} box3 \r\n * @param {Number} [distanceMultiplier]\r\n * @param {THREE.Vector3} [orientation]\r\n * @param {Number} [fov] fov in degrees\r\n * @returns {FrameCoords}\r\n */\r\n CalcFrameCoords(box3, distanceMultiplier, orientation, fov){\r\n if(distanceMultiplier === undefined) distanceMultiplier = .75;\r\n\r\n fov = (fov || this.camera.fov) * (Math.PI / 180);\r\n\r\n let extent = tempVec3;\r\n box3.getSize(extent);\r\n let frameSize = Math.max(extent.x, extent.y, extent.z, 1);\r\n let distance = Math.abs(frameSize / Math.sin(fov / 2)) * distanceMultiplier;\r\n \r\n let center = tempVec3_b;\r\n box3.getCenter(center);\r\n \r\n let position = tempVec3;\r\n orientation = orientation ? orientation : position.subVectors(this.camera.position, center); \r\n position.copy(orientation).normalize().multiplyScalar(distance).add(center);\r\n position.y = Math.abs(position.y);\r\n\r\n tempCoords.position = position;\r\n tempCoords.center = center;\r\n return tempCoords;\r\n }\r\n\r\n /**\r\n * @param {THREE.Box3} box3 \r\n * @param {Number} [distanceMultiplier]\r\n */\r\n Frame(box3, distanceMultiplier){\r\n let coords = this.CalcFrameCoords(box3, distanceMultiplier);\r\n\r\n this.camera.position.copy(coords.position);\r\n this.SetTarget(coords.center);\r\n }\r\n\r\n /**\r\n * @param {Number} duration\r\n * @param {THREE.Box3} box3 \r\n * @param {Number} [distanceMultiplier]\r\n */\r\n TransitionToFrame(duration, box3, distanceMultiplier){\r\n let endCoords = this.CalcFrameCoords(box3, distanceMultiplier);\r\n this.TransitionFromToCoords(duration, undefined, endCoords);\r\n }\r\n\r\n /**\r\n * @param {Number} duration\r\n * @param {FrameCoords} startCoords \r\n * @param {FrameCoords} endCoords \r\n */\r\n TransitionFromToCoords(duration, startCoords, endCoords){\r\n\r\n if(!startCoords){\r\n startCoords = ownCoords;\r\n startCoords.position.copy(this.position);\r\n startCoords.center.copy(this.orbitControls.target);\r\n }\r\n\r\n this.dollyAnimation.position.SetDurations(duration, duration, duration);\r\n this.dollyAnimation.lookAt.SetDurations(duration, duration, duration);\r\n\r\n let p = startCoords.position;\r\n this.dollyAnimation.position.SetStartValues(p.x, p.y, p.z);\r\n let tp = endCoords.position;\r\n this.dollyAnimation.position.SetDeltas(tp.x - p.x, tp.y - p.y, tp.z - p.z);\r\n\r\n p = startCoords.center;\r\n this.dollyAnimation.lookAt.SetStartValues(p.x, p.y, p.z);\r\n tp = endCoords.center;\r\n this.dollyAnimation.lookAt.SetDeltas(tp.x - p.x, tp.y - p.y, tp.z - p.z);\r\n\r\n this.dollyAnimation.position.Restart();\r\n this.dollyAnimation.lookAt.Restart();\r\n this.dollyAnimation.enabled = true;\r\n }\r\n\r\n /** @param {Number} duration @param {Number} fov */\r\n TransitionToFOV(duration, fov){\r\n let deltaFOV = fov - this.camera.fov;\r\n if(Math.abs(deltaFOV) < epsilon) return;\r\n\r\n this.fovAnimation.fov.duration = duration;\r\n this.fovAnimation.fov.startValue = this.camera.fov;\r\n this.fovAnimation.fov.delta = deltaFOV;\r\n this.fovAnimation.fov.Restart();\r\n this.fovAnimation.enabled = true;\r\n }\r\n\r\n /**\r\n * @returns {Boolean}\r\n */\r\n get enabled(){\r\n return this.controls && this.controls.enabled;\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nexport default Camera;\n\n\n// WEBPACK FOOTER //\n// ./src/api/scene/Camera.js","import Pool from \"./Pool\";\r\n\r\n/** \r\n * Tween update function\r\n * @param {Number} time \r\n * @param {Number} startValue \r\n * @param {Number} delta \r\n * @param {Number} duration\r\n * @returns {Number} value\r\n */\r\nfunction TweenCallback(time, startValue, delta, duration){}\r\n\r\n/**\r\n * On completed callback\r\n * @param {Tween} target\r\n */\r\nfunction TweenCompletedCallback(target){}\r\n\r\nvar clock = new THREE.Clock();\r\n\r\nfunction poolNewFN(){\r\n return new Tween();\r\n}\r\n/** @param {Tween} tween */\r\nfunction poolResetFN(tween){\r\n return tween;\r\n}\r\nvar pool = new Pool(poolNewFN, poolResetFN);\r\n\r\nconst functions = {\r\n /** @type {TweenCallback} */\r\n linear: function(t, b, c, d){\r\n return b + c * (t / d);\r\n },\r\n\r\n ease: {\r\n /** @type {TweenCallback} */\r\n easeOutElastic: function(t, b, c, d) {\r\n var ts=(t/=d)*t;\r\n var tc=ts*t;\r\n return b+c*(33*tc*ts + -106*ts*ts + 126*tc + -67*ts + 15*t);\r\n },\r\n\r\n /** @type {TweenCallback} */\r\n easeOutQuad: function (t, b, c, d) {\r\n return -c *(t/=d)*(t-2) + b;\r\n },\r\n\r\n /** @type {TweenCallback} */\r\n easeOutCubic: function (t, b, c, d) {\r\n return c*((t=t/d-1)*t*t + 1) + b;\r\n },\r\n\r\n easeInOutQuad: function (t, b, c, d) {\r\n if ((t/=d/2) < 1) return c/2*t*t + b;\r\n return -c/2 * ((--t)*(t-2) - 1) + b;\r\n }\r\n },\r\n\r\n special: {\r\n /** @type {TweenCallback} */\r\n pingPong: function (t, b, c, d) {\r\n return Math.sin(t / d * Math.PI) * c + b;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * On completed callback\r\n * @param {TweenCombo} target\r\n */\r\nfunction TweenComboCompletedCallback(target){}\r\n\r\nclass TweenCombo{\r\n /**\r\n * \r\n * @param {Array} tweens \r\n */\r\n constructor(...tweens){\r\n this.tweens = tweens;\r\n\r\n /** @type {TweenComboCompletedCallback} */\r\n this.onComplete;\r\n this.completed = false;\r\n }\r\n\r\n /** @param {Array} args */\r\n SetDurations(...args){ for(var i = 0; i < this.tweens.length; i++) this.tweens[i].duration = args[i]; }\r\n\r\n /** @param {Array} args */\r\n SetDeltas(...args){ for(var i = 0; i < this.tweens.length; i++) this.tweens[i].delta = args[i]; }\r\n\r\n /** @param {Array} args */\r\n SetStartValues(...args){ for(var i = 0; i < this.tweens.length; i++) this.tweens[i].startValue = args[i]; }\r\n\r\n /**\r\n * @param {Object} object \r\n * @param {Array} properties \r\n */\r\n Hook(object, ...properties){\r\n for(var i = 0; i < this.tweens.length; i++){\r\n this.tweens[i].Hook(object, properties[i]);\r\n };\r\n }\r\n\r\n Unhook(){\r\n this.tweens.forEach(tween => tween.Unhook());\r\n }\r\n\r\n /** Restarts time */\r\n Restart(){\r\n this.tweens.forEach(tween => tween.Restart());\r\n }\r\n\r\n /**\r\n * Update tween\r\n * @param {Number} [t] [0, duration]\r\n */\r\n Update(t){\r\n var completed = true;\r\n this.tweens.forEach(tween => {\r\n if(tween.completed === false)\r\n tween.Update(t);\r\n\r\n completed = completed && tween.completed;\r\n });\r\n\r\n this.completed = completed;\r\n if(this.completed && this.onComplete)\r\n this.onComplete(this);\r\n }\r\n\r\n /**\r\n * Returns tweens to pool\r\n */\r\n Return(){\r\n this.tweens.forEach(tween => {\r\n pool.Return(tween);\r\n });\r\n }\r\n\r\n /**\r\n * @param {TweenCallback} callback \r\n * @param {Number} startValue0\r\n * @param {Number} startValue1\r\n * @param {Number} startValue2\r\n * @param {Number} delta0\r\n * @param {Number} delta1\r\n * @param {Number} delta2\r\n * @param {Number} duration\r\n */\r\n static Request3(callback, duration, startValue0, delta0, startValue1, delta1, startValue2, delta2){\r\n var tween0 = pool.Request();\r\n tween0.Reset(callback, startValue0, delta0, duration);\r\n\r\n var tween1 = pool.Request();\r\n tween1.Reset(callback, startValue1, delta1, duration);\r\n\r\n var tween2 = pool.Request();\r\n tween2.Reset(callback, startValue2, delta2, duration);\r\n\r\n var combo = new TweenCombo(tween0, tween1, tween2);\r\n return combo;\r\n }\r\n\r\n /**\r\n * @param {TweenCallback} callback \r\n * @param {Number} duration \r\n * @param {Array} args startValueN, deltaN\r\n */\r\n static RequestN(callback, duration, ...args){\r\n\r\n let tweens = [];\r\n for(let i = 0; i < args.length; i += 2){\r\n let tween = pool.Request();\r\n tween.Reset(callback, args[i], args[i + 1], duration);\r\n tweens.push(tween);\r\n }\r\n\r\n let combo = new TweenCombo(...tweens);\r\n return combo;\r\n }\r\n}\r\n\r\nclass Tween{\r\n /**\r\n * @param {TweenCallback} callback \r\n * @param {Number} [startValue] \r\n * @param {Number} delta \r\n * @param {Number} duration \r\n */\r\n constructor(callback, startValue, delta, duration){\r\n this.Reset(callback, startValue, delta, duration);\r\n \r\n /** @type {TweenCompletedCallback} */\r\n this.onComplete;\r\n }\r\n\r\n /**\r\n * @param {TweenCallback} callback \r\n * @param {Number} [startValue]\r\n * @param {Number} delta \r\n * @param {Number} duration \r\n */\r\n Reset(callback, startValue, delta, duration){\r\n this.callback = callback;\r\n this.startValue = startValue;\r\n this.delta = delta;\r\n this.duration = duration;\r\n\r\n if(this.startValue === undefined && this.object && this.property){\r\n this.startValue = this.object[this.property];\r\n }\r\n\r\n this.Restart();\r\n }\r\n\r\n /** Restarts time */\r\n Restart(){\r\n this.completed = false;\r\n this.startTime = clock.getElapsedTime();\r\n }\r\n\r\n /**\r\n * @param {Object} object \r\n * @param {string} property \r\n */\r\n Hook(object, property){\r\n this.object = object;\r\n this.property = property;\r\n\r\n if(this.startValue === undefined){\r\n this.startValue = this.object[this.property];\r\n }\r\n }\r\n\r\n Unhook(){\r\n this.object = this.property = undefined;\r\n }\r\n\r\n /**\r\n * Update tween\r\n * @param {Number} [t] [0, duration]\r\n */\r\n Update(t){\r\n if(t === undefined) t = clock.getElapsedTime() - this.startTime;\r\n\r\n if(t >= this.duration){\r\n this.completed = true;\r\n let endValue = this.startValue + this.delta;\r\n \r\n if(this.object)\r\n this.object[this.property] = endValue;\r\n \r\n if(this.onComplete)\r\n this.onComplete(this);\r\n \r\n return endValue;\r\n }\r\n\r\n var x = this.callback(t, this.startValue, this.delta, this.duration);\r\n if(this.object)\r\n this.object[this.property] = x;\r\n \r\n return x;\r\n }\r\n\r\n Return(){\r\n pool.Return(this);\r\n }\r\n\r\n /**\r\n * @param {TweenCallback} callback \r\n * @param {Number} [startValue]\r\n * @param {Number} delta \r\n * @param {Number} duration \r\n */\r\n static Request(callback, startValue, delta, duration){\r\n var tween = pool.Request();\r\n tween.Reset(callback, startValue, delta, duration);\r\n\r\n return tween;\r\n }\r\n\r\n static get functions(){\r\n return functions;\r\n }\r\n}\r\n\r\nTween.Combo = TweenCombo;\r\n\r\nexport default Tween;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/Tween.js","\r\nconst _new = Symbol('new'),\r\n _reset = Symbol('reset');\r\n\r\n/**\r\n * @template {T}\r\n */\r\nclass Pool{\r\n /**\r\n * @param {function(...args)=>T} fnNew \r\n * @param {function(T, ...args)=>T} [fnReset]\r\n */\r\n constructor(fnNew, fnReset){\r\n this.objects = [];\r\n\r\n this[_new] = fnNew;\r\n this[_reset] = fnReset;\r\n }\r\n\r\n /** Get a clean object (fnNew & fnReset) from the pool\r\n * @returns {T}\r\n */\r\n Request(...args){\r\n var object;\r\n\r\n if(this.objects.length === 0){\r\n object = this[_new](...args);\r\n }\r\n else{\r\n object = this.objects[this.objects.length - 1];\r\n --this.objects.length;\r\n }\r\n\r\n return this[_reset](object, ...args);\r\n }\r\n\r\n /** Make object available again\r\n * @param {T} object \r\n */\r\n Return(object){\r\n this.objects[this.objects.length] = object;\r\n }\r\n}\r\n\r\nexport default Pool;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/Pool.js","import CargoView from \"./CargoView\";\r\nimport Utils from \"../utils/cik/Utils\";\r\nimport BoxEntry from \"../components/box/BoxEntry\";\r\nimport Asset from \"../components/assets/Asset\";\r\n\r\nconst unitCubeGeometry = new THREE.BoxBufferGeometry(1, 1, 1, 1, 1, 1);\r\nconst materialTemplate = new Asset.SolidMaterialType({roughness: 1, metalness: 0, flatShading: true});\r\n\r\nconst brightnessRange = [.45, .55];\r\nvar hueBase = Math.random();\r\nfunction nextColor(){\r\n let color = new THREE.Color();\r\n color.setHSL(hueBase, 1, brightnessRange[0] + Math.random() * (brightnessRange[1] - brightnessRange[0]));\r\n hueBase = Utils.GoldenSeries(hueBase);\r\n return color;\r\n}\r\n\r\nconst _materialSettings = Symbol('matSet');\r\nconst _color = Symbol('color');\r\n\r\nconst typeofNumber = 'number',\r\n typeofString = 'string';\r\n\r\nclass CargoBoxView extends CargoView {\r\n /**\r\n * \r\n * @param {BoxEntry} boxEntry \r\n */\r\n constructor(boxEntry){\r\n super(boxEntry);\r\n\r\n var material = materialTemplate.clone();\r\n\r\n let colorHex = boxEntry.Description('color');\r\n this[_color] = colorHex ? new THREE.Color(colorHex) : nextColor();\r\n boxEntry.Description('color', this.color.getHex());\r\n\r\n material.color = this.color;\r\n this.mesh = new THREE.Mesh(unitCubeGeometry, material);\r\n this.mesh.scale.copy(boxEntry.dimensions.vec3);\r\n\r\n this.view.add(this.mesh);\r\n }\r\n\r\n /** @returns {BoxEntry} */\r\n get entry(){ return super.entry; }\r\n set entry(value){\r\n super.entry = value;\r\n var s = value.dimensions.vec3;\r\n this.SetScale(s.x, s.y, s.z);\r\n\r\n let colorHex = value.Description('color');\r\n if(colorHex) this.color = colorHex;\r\n }\r\n\r\n /** @param {Number} value */\r\n set focus(value){\r\n super.focus = value;\r\n\r\n if(this[_materialSettings]) Asset.RestoreMaterial(this.mesh.material, this[_materialSettings]);\r\n\r\n if(Math.abs(1 - value) > .0001){\r\n if(this[_materialSettings] === undefined){\r\n this.mesh.material = this.mesh.material.clone();\r\n this[_materialSettings] = {};\r\n Asset.SetMaterialFocus(this.mesh.material, value, this[_materialSettings]);\r\n }\r\n else{\r\n Asset.SetMaterialFocus(this.mesh.material, value);\r\n }\r\n }\r\n }\r\n\r\n get focus(){ return super.focus; }\r\n\r\n /** @returns {THREE.Color} */\r\n get color(){ return this[_color]; }\r\n\r\n /** @param {Number} value hex */\r\n set color(value){\r\n /** @type {THREE.Color} */\r\n let c = this[_color];\r\n if(typeof value === typeofNumber) c.setHex(value);\r\n else if(typeof value === typeofString) c.setHex(Number.parseInt(value));\r\n else c.copy(value);\r\n if(this[_materialSettings]) this[_materialSettings].color = c.getHex();\r\n else this.mesh.material.color = c;\r\n this.focus = super.focus;\r\n }\r\n\r\n /**\r\n * @param {Number} x \r\n * @param {Number} y \r\n * @param {Number} z \r\n */\r\n SetScale(x, y, z){\r\n this.mesh.scale.set(x, y, z);\r\n\r\n if(this.labelView) this.labelView.view.position.z = params.width / 2 + this.entry.dimensions.length / 2;\r\n }\r\n\r\n ReflectEntry(){\r\n this.entry = this.entry;\r\n }\r\n\r\n /** \r\n * @param {string} value \r\n * @param {import('./CargoView').CargoViewLabelParams} params */\r\n SetLabel(value, params){\r\n super.SetLabel(value, params);\r\n\r\n this.labelView.view.scale.y = params.height;\r\n this.labelView.view.scale.x = params.width;\r\n this.labelView.view.position.z = params.width / 2 + this.entry.dimensions.length / 2;\r\n this.labelView.view.position.y = .001;\r\n }\r\n\r\n /**\r\n * @param {Number} x in radians\r\n * @param {Number} y in radians\r\n * @param {Number} z in radians\r\n */\r\n SetRotationAngles(x, y, z){\r\n this.mesh.rotation.set(x, y, z);\r\n }\r\n\r\n static GetNextColor(){\r\n return nextColor();\r\n }\r\n}\r\n\r\nexport default CargoBoxView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/CargoBoxView.js","import CargoEntry from \"../components/common/CargoEntry\";\r\nimport Asset from \"../components/assets/Asset\";\r\nimport TextLabelView from \"./components/TextLabelView\";\r\n\r\n/**\r\n * @typedef CargoViewLabelParams\r\n * @property {Number} width\r\n * @property {Number} height\r\n */\r\n\r\nconst dummyGeometry = new THREE.SphereBufferGeometry(1, 4, 4);\r\nconst dummyMaterial = new Asset.TransparentMaterialType({color: 0xff0000, transparent: true, opacity: .5});\r\n\r\nconst _entry = Symbol('entry');\r\nconst _focus = Symbol('focus');\r\n\r\nclass CargoView {\r\n /**\r\n * @param {CargoEntry} entry \r\n */\r\n constructor(entry){\r\n\r\n this[_entry] = entry;\r\n\r\n /** @type {THREE.Mesh} */\r\n this.mesh;\r\n\r\n this.view = new THREE.Object3D();\r\n\r\n this[_focus] = 1;\r\n }\r\n\r\n /** @returns {CargoEntry} */\r\n get entry(){ return this[_entry]; }\r\n set entry(value){\r\n this[_entry] = value;\r\n }\r\n\r\n get position(){\r\n return this.view.position;\r\n }\r\n\r\n set position(value){\r\n this.view.position.copy(value);\r\n }\r\n\r\n /** @param {Number} value */\r\n set focus(value){\r\n this[_focus] = value;\r\n }\r\n\r\n get focus(){ return this[_focus]; }\r\n\r\n ReflectEntry(){\r\n \r\n }\r\n\r\n /** @param {string} value @param {CargoViewLabelParams} params */\r\n SetLabel(value, params){\r\n const height = 64;\r\n let width = Math.floor( params.width / params.height * height );\r\n if(this.labelView === undefined){\r\n /** @type {import('./TextLabelView').TLVParams} */\r\n let tlvParams = { font: '32px sans serif', backColor: 'rgb(0, 0, 0)', fontColor: 'rgb(255, 255, 255)', \r\n textAlign: 'right', sidePadding: 16, width: width, height: height\r\n };\r\n let ratioToX = 64\r\n\r\n this.labelView = new TextLabelView(tlvParams);\r\n this.labelView.view.rotateY( 90 * Math.PI / 180 );\r\n this.labelView.view.rotateX( -90 * Math.PI / 180 );\r\n this.view.add(this.labelView.view);\r\n }\r\n\r\n this.labelView.UpdateText(value);\r\n }\r\n\r\n /**\r\n * @param {CargoEntry} entry \r\n */\r\n static Dummy(entry){\r\n var cargoView = new CargoView(entry);\r\n cargoView.view = new THREE.Mesh(dummyGeometry, dummyMaterial);\r\n return cargoView;\r\n }\r\n\r\n}\r\n\r\nexport default CargoView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/CargoView.js","import Utils from \"./utils/cik/Utils\";\r\nimport Visualization from \"./components/Visualization\";\r\nimport User from \"./components/User\";\r\nimport App from \"./App\";\r\nimport Constants from \"./Constants\";\r\n\r\n/**\r\n * @typedef UXParams\r\n * @property {Boolean} hud default = true, create hud (hud currently disabled in api)\r\n * @property {Boolean} configure default = false, execute helpers that allow configuration\r\n * @property {Number} units default = 1, conversion to unit employed, default=1 for inches, for meters: units=0.0254\r\n * @property {Boolean} autoUpdatePack default = true, will auto-update the packing if entries are modified or deleted\r\n * @property {Number} backgroundColor default = 0xfefefe\r\n * @property {Constants.scaleRefFigure} scaleRefFigure default = man, human figure to show as scale reference\r\n * @property {Number} fov camera perspective fov\r\n */\r\nconst defaultParams = {\r\n hud: true,\r\n configure: false,\r\n units: 1,\r\n autoUpdatePack: true,\r\n backgroundColor: 0xfefefe,\r\n scaleRefFigure: Constants.scaleRefFigure.man,\r\n fov: 15\r\n};\r\n\r\nclass UX{\r\n /**\r\n * \r\n * @param {UXParams} params \r\n */\r\n constructor(params){\r\n\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n }\r\n\r\n /** @ignore ignore */\r\n _Bind(value){\r\n /** @type {App} */\r\n let app = value;\r\n \r\n /** Interface with visual elements */\r\n\t\tthis.visualization = new Visualization(app);\r\n\r\n\t\t/** Interface with user input/output */\r\n this.user = new User(app);\r\n }\r\n\r\n}\r\n\r\nUX.User = User;\r\nUX.Visualization = Visualization;\r\n\r\nexport default UX;\n\n\n// WEBPACK FOOTER //\n// ./src/api/UX.js","import Logger from \"../utils/cik/Logger\";\r\nimport CargoBoxView from \"./CargoBoxView\";\r\nimport CargoView from \"./CargoView\";\r\nimport Signaler from \"../utils/cik/Signaler\";\r\nimport CargoGroup from \"../packer/CargoGroup\";\r\nimport Utils from \"../utils/cik/Utils\";\r\nimport CargoEntry from \"../components/common/CargoEntry\";\r\nimport FloatingShelf from \"./components/FloatingShelf\";\r\nimport Asset from \"../components/assets/Asset\";\r\nimport BoxEntry from \"../components/box/BoxEntry\";\r\nimport TextLabelView from \"./components/TextLabelView\";\r\nimport RaycastGroup, { RaycastCallback } from \"../utils/cik/input/RaycastGroup\";\r\nimport Outline from \"./components/Outline\";\r\nimport Tween from \"../utils/cik/Tween\";\r\n\r\n/**\r\n * @typedef {Object} CargoListViewParams\r\n * @property {import('../UX').default} ux\r\n * @property {Number} outlineOffset\r\n */\r\n\r\n/**\r\n * @typedef SortResult\r\n * @property {Number} min\r\n * @property {Number} max\r\n * @property {Number} cargoes\r\n */\r\n\r\nconst typeofString = 'string';\r\nconst epsilon = Math.pow(2, -52);\r\n\r\nconst _selectedEntryUID = Symbol('seUID');\r\n\r\n/** @type {Map} */\r\nvar labels = new Map();\r\n\r\nvar tempBox = new THREE.Box3();\r\nvar tempVec = new THREE.Vector3();\r\n\r\nconst signals = {\r\n sort: 'sort',\r\n select: 'select',\r\n deselect: 'deselect',\r\n interact: 'interact'\r\n};\r\n\r\n/** @type {CargoListViewParams} */\r\nconst defaultParams = {\r\n outlineOffset: 4\r\n};\r\n\r\nclass CargoListView extends Signaler {\r\n /**\r\n * @param {CargoListViewParams} params \r\n */\r\n constructor(params){\r\n super();\r\n\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n\r\n this.view = new THREE.Object3D();\r\n this.templatesView = new THREE.Object3D();\r\n this.view.add(this.templatesView);\r\n\r\n /** @type {Map} */\r\n this.cargoTemplateViews = new Map();\r\n\r\n let units = this.params.ux.params.units;\r\n\r\n // Shelf\r\n /** @type {import('./components/FloatingShelf').FloatingShelfParams} */\r\n let fsParams = {padding: new THREE.Vector3(10 * units, (this.params.outlineOffset + 1) * units, 10 * units), colorHex: Asset.ColorTemplates('Containers').Apply(0x000000)};\r\n this.floatingShelf = new FloatingShelf(this.templatesView, fsParams);\r\n this.view.add(this.floatingShelf.view);\r\n\r\n // Interaction\r\n this.raycastGroupItems = [];\r\n this.raycastGroup = new RaycastGroup(this.raycastGroupItems, this.OnInteract.bind(this), \r\n /** @param {CargoView} item */\r\n function(item){\r\n return item.view;\r\n },\r\n false,\r\n true);\r\n\r\n this.outline = new Outline({color: 0xffffff, opacity: 1, offsetFactor: this.params.outlineOffset * units});\r\n this.view.add(this.outline.view);\r\n\r\n // Transition\r\n this.slidingAnimation = {\r\n enabled: false,\r\n position: Tween.Combo.RequestN(Tween.functions.ease.easeOutCubic, .5, 0, 0),\r\n originalPosition: new THREE.Vector3(0, 0, 0)\r\n };\r\n\r\n let scope = this;\r\n function onAnimationComplete(){\r\n scope.slidingAnimation.enabled = false;\r\n }\r\n this.slidingAnimation.position.onComplete = onAnimationComplete;\r\n\r\n this.slidingAnimation.position.Hook(this.view.position, 'y');\r\n }\r\n\r\n /**\r\n * @param {CargoGroup} group \r\n */\r\n Add(group){\r\n let units = this.params.ux.params.units;\r\n\r\n let templateCargoView;\r\n switch(group.entry.type){\r\n case 'BoxEntry': {\r\n templateCargoView = new CargoBoxView(group.entry);\r\n\r\n let ticketParams = { width: 50 * units, height: 20 * units };\r\n\r\n const height = 96;\r\n let width = Math.floor( ticketParams.width / ticketParams.height * height );\r\n /** @type {import('./TextLabelView').TLVParams} */\r\n let tlvParams = { font: '64px sans-serif', backColor: 'rgb(0, 0, 0)', fontColor: 'rgb(255, 255, 255)', \r\n textAlign: 'left', sidePadding: 30, width: width, height: height\r\n };\r\n\r\n let labelView = new TextLabelView(tlvParams);\r\n labelView.view.rotateY( 90 * Math.PI / 180 );\r\n labelView.view.rotateX( -90 * Math.PI / 180 );\r\n labelView.view.scale.y = ticketParams.height;\r\n labelView.view.scale.x = ticketParams.width;\r\n /** @type {BoxEntry} */\r\n let boxEntry = group.entry;\r\n labelView.view.position.z = ticketParams.width / 2;\r\n this.view.add(labelView.view);\r\n\r\n labelView.UpdateText(boxEntry.quantity);\r\n\r\n labels.set(templateCargoView, labelView);\r\n \r\n break;\r\n }\r\n\r\n default :\r\n templateCargoView = CargoView.Dummy(group.entry);\r\n Logger.Warn('group.entry.type not supported by viewer,', group);\r\n break;\r\n }\r\n\r\n this.cargoTemplateViews.set(group, templateCargoView);\r\n this.templatesView.add(templateCargoView.view);\r\n\r\n this.raycastGroupItems.push(templateCargoView);\r\n this.raycastGroup.UpdateItems(this.raycastGroupItems);\r\n\r\n this.Sort();\r\n this.floatingShelf.Update();\r\n }\r\n\r\n /**\r\n * @param {CargoGroup} group \r\n */\r\n UpdateGroup(group){\r\n let templateCargoView = this.cargoTemplateViews.get(group);\r\n templateCargoView.ReflectEntry();\r\n\r\n this.Sort();\r\n this.floatingShelf.Update();\r\n\r\n if(this[_selectedEntryUID] === group.entry.uid) this.SetOutline(templateCargoView);\r\n }\r\n\r\n /**\r\n * @param {CargoGroup} group \r\n */\r\n Remove(group){\r\n var templateCargoView = this.cargoTemplateViews.get(group);\r\n if(templateCargoView){\r\n\r\n let raycastGroupIndex = this.raycastGroupItems.indexOf(templateCargoView);\r\n if(raycastGroupIndex !== -1) this.raycastGroupItems.splice(raycastGroupIndex, 1);\r\n this.raycastGroup.UpdateItems(this.raycastGroupItems);\r\n\r\n this.cargoTemplateViews.delete(group);\r\n this.templatesView.remove(templateCargoView.view);\r\n\r\n if(this[_selectedEntryUID] === group.entry.uid) this.outline.box = false;\r\n\r\n this.Sort();\r\n }\r\n }\r\n\r\n /**\r\n * RaycastCallback\r\n * @param {CargoView} cargoView\r\n * @param {THREE.Intersection} intersection\r\n */\r\n OnInteract(cargoView, intersection){\r\n this.Dispatch(signals.interact, cargoView.entry);\r\n }\r\n\r\n /** @param {CargoView} cargoView */\r\n Select(entryUID){\r\n\r\n this[_selectedEntryUID] = entryUID;\r\n\r\n if(!entryUID){\r\n this.outline.box = false;\r\n this.Dispatch(signals.deselect);\r\n }\r\n else{\r\n let cargoView = this.GetTemplate(entryUID);\r\n this.SetOutline(cargoView);\r\n this.Dispatch(signals.select, cargoView.entry);\r\n }\r\n }\r\n\r\n /** @param {CargoView} target */\r\n SetOutline(target){\r\n this.outline.box = target instanceof CargoBoxView ? target.mesh : target.view;\r\n }\r\n\r\n SlideUp(targetY, duration){\r\n let deltaY = targetY - this.view.position.y;\r\n if(Math.abs(deltaY) < epsilon) return;\r\n\r\n this.slidingAnimation.position.SetDurations(duration);\r\n this.slidingAnimation.position.SetStartValues(this.view.position.y);\r\n this.slidingAnimation.position.SetDeltas(deltaY);\r\n this.slidingAnimation.position.Restart();\r\n this.slidingAnimation.enabled = true;\r\n }\r\n\r\n SlideDown(duration){\r\n let deltaY = this.slidingAnimation.originalPosition.y - this.view.position.y;\r\n if(Math.abs(deltaY) < epsilon) return;\r\n\r\n this.slidingAnimation.position.SetDurations(duration);\r\n this.slidingAnimation.position.SetStartValues(this.view.position.y);\r\n this.slidingAnimation.position.SetDeltas(deltaY);\r\n this.slidingAnimation.position.Restart();\r\n this.slidingAnimation.enabled = true;\r\n }\r\n\r\n Update(){\r\n if(this.slidingAnimation.enabled){\r\n this.slidingAnimation.position.Update();\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param {CargoGroup|CargoEntry|string|Number} id \r\n */\r\n GetTemplate(id){\r\n var group;\r\n if(id instanceof CargoGroup){\r\n group = id;\r\n }\r\n else if(id instanceof CargoEntry){\r\n for(var cargoGroup of this.cargoTemplateViews.keys()){\r\n if(cargoGroup.entry === id) group = cargoGroup;\r\n }\r\n }\r\n else{\r\n for(var cargoGroup of this.cargoTemplateViews.keys()){\r\n if(cargoGroup.entry.uid === id) group = cargoGroup;\r\n }\r\n }\r\n\r\n return this.cargoTemplateViews.get(group);\r\n }\r\n\r\n /**\r\n * @param {CargoView} cargoView \r\n * @param {string} value \r\n * @param {string} textColor css\r\n */\r\n UpdateLabel(cargoView, value, textColor){\r\n let textLabelView = labels.get(cargoView);\r\n if(textLabelView){\r\n if(textColor) textLabelView.params.fontColor = textColor;\r\n textLabelView.UpdateText(value);\r\n }\r\n }\r\n\r\n /**\r\n * @param {Map} cargoViews \r\n * @returns {Number}\r\n */\r\n Sort(){\r\n\r\n this.SortMapBySize();\r\n\r\n var units = this.params.ux.params.units;\r\n\r\n this.view.updateMatrixWorld(true);\r\n const worldToLocal = new THREE.Matrix4().getInverse(this.templatesView.matrixWorld);\r\n const padding = 5 * units,\r\n start = 0;\r\n\r\n var i = 0,\r\n offset = 0;\r\n \r\n /**\r\n * @type {SortResult}\r\n */\r\n var result = {min: start, max: start, cargoes: 0};\r\n \r\n var list = this.cargoTemplateViews.values(),\r\n cargoView;\r\n while( ( cargoView = list.next() ).done === false ){\r\n\r\n cargoView.value.position.set(start, 0, 0);\r\n\r\n tempBox.setFromObject(cargoView.value.view);\r\n tempBox.applyMatrix4(worldToLocal);\r\n\r\n tempBox.getSize(tempVec);\r\n var halfSize = tempVec.x / 2;\r\n if(i > 0)\r\n offset += halfSize;\r\n\r\n cargoView.value.position.set(start + offset, tempVec.y / 2 + padding, -tempVec.z / 2);\r\n\r\n let labelView = labels.get(cargoView.value);\r\n labelView.view.position.x = cargoView.value.position.x;\r\n labelView.view.position.y = padding + 1 * units;\r\n\r\n offset += halfSize + padding;\r\n\r\n i++;\r\n }\r\n\r\n result.min = start;\r\n result.max = offset;\r\n result.cargoes = i;\r\n this.Dispatch(signals.sort, result);\r\n }\r\n\r\n SortMapBySize(){\r\n /**\r\n * \r\n * @param {[CargoGroup, CargoListView]} a \r\n * @param {[CargoGroup, CargoListView]} b \r\n */\r\n function sort(a, b){\r\n return -a[0].entry.dimensions.Compare(b[0].entry.dimensions);\r\n }\r\n\r\n var list = [...this.cargoTemplateViews.entries()];\r\n list.sort(sort);\r\n this.cargoTemplateViews = new Map(list);\r\n return;\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nexport default CargoListView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/CargoListView.js","import { styles, Element, Draggable } from \"./UIUtils\";\r\nimport Config from \"./Config\";\r\n//import dat from \"./datGUIConsole\";\r\n\r\nconst serializeModes = Config.serializeModes;\r\n\r\nvar current = undefined,\r\n onFocus = [],\r\n onFocusLost = [];\r\n\r\nclass Smart {\r\n /**\r\n * @param {*} target \r\n * @param {string} label \r\n */\r\n constructor(target, label){\r\n this.target = target;\r\n this.label = label;\r\n\r\n var scope = this;\r\n \r\n this.gui = new (window.dat || require(\"./datGUIConsole\").default).GUI({autoPlace: false});\r\n this.draggable = new Draggable(this.label, 250);\r\n this.draggable.Add(this.gui.domElement);\r\n this.draggable.closeBtn.onclick = function(){\r\n scope.Hide();\r\n };\r\n\r\n var ui = Element.Add(this.draggable);\r\n this.draggable.Hide();\r\n\r\n this.onFocus = [];\r\n this.onFocusLost = [];\r\n }\r\n\r\n Delete(){\r\n this.Hide();\r\n this.draggable.Delete();\r\n this.gui.destroy();\r\n this.onFocus.length = this.onFocusLost.length = 0;\r\n }\r\n\r\n UpdateGUI(){\r\n Smart.UpdateGUI(this.gui);\r\n }\r\n\r\n Hide(){\r\n this.visible = false;\r\n this.draggable.Hide();\r\n Smart.SetCurrent(undefined);\r\n }\r\n\r\n Show(){\r\n if(current !== undefined){\r\n if(current === this) return;\r\n\r\n var oldPos = current.draggable.GetPosition();\r\n this.draggable.SetPosition(oldPos.x, oldPos.y);\r\n\r\n current.Hide();\r\n }\r\n this.visible = true;\r\n this.draggable.Show();\r\n Element.AddStyle(this.draggable.domElement, styles.UIWiggleAnim);\r\n Smart.SetCurrent(this);\r\n\r\n this.UpdateGUI();\r\n }\r\n \r\n /**\r\n * \r\n * @param {string} folderName \r\n * @param {*} target \r\n * @param {Function} guiChanged \r\n * @param {serializeModes} serializeMode\r\n * @param {Array} args \r\n */\r\n Config(folderName, target, guiChanged, serializeMode, ...args){\r\n this.config = new Config(target);\r\n this.config.Track(...args);\r\n this.config.Edit(guiChanged, folderName, this.gui, {serializeMode: serializeMode, save: false});\r\n return this.config.gui;\r\n }\r\n\r\n /**\r\n * @param {string} category \r\n */\r\n MakeShortcut(category){\r\n Smart.MakeShortcut(category, this);\r\n }\r\n\r\n static get serializeModes(){\r\n return serializeModes;\r\n }\r\n\r\n /**\r\n * @param {string} category \r\n * @param {Smart} target \r\n */\r\n static MakeShortcut(category, target){\r\n Config.MakeShortcut(category, target.label, function(){\r\n if(target.visible){\r\n target.Hide();\r\n }\r\n else{\r\n target.Show();\r\n }\r\n });\r\n }\r\n\r\n static SetCurrent(current){\r\n var iFocus;\r\n if(current !== undefined){\r\n for(iFocus = 0; iFocus < onFocusLost.length; iFocus++){\r\n onFocusLost[iFocus](current);\r\n }\r\n for(iFocus = 0; iFocus < current.onFocusLost.length; iFocus++){\r\n current.onFocusLost[iFocus]();\r\n }\r\n }\r\n\r\n current = current;\r\n\r\n if(current !== undefined){\r\n for(iFocus = 0; iFocus < onFocus.length; iFocus++){\r\n onFocus[iFocus](current);\r\n }\r\n for(iFocus = 0; iFocus < current.onFocus.length; iFocus++){\r\n current.onFocus[iFocus]();\r\n }\r\n }\r\n }\r\n\r\n static UpdateGUI(gui){\r\n for (var i in gui.__controllers) {\r\n gui.__controllers[i].updateDisplay();\r\n }\r\n\r\n var folders = Object.values(gui.__folders);\r\n for(i = 0; i < folders.length; i++){\r\n this.UpdateGUI(folders[i]);\r\n }\r\n }\r\n}\r\n\r\nexport default Smart;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/config/Smart.js","import RuntimeTester from \"../../debug/RuntimeTester\";\r\n\r\nconst type = 'Dimensions';\r\nconst _vec3 = Symbol('vec3');\r\n\r\nconst epsilon = Math.pow(2, -52);\r\nconst numberType = 'number';\r\n\r\nRuntimeTester.Notify('Dimensions.FromJSON', 3);\r\n\r\nclass Dimensions {\r\n /**\r\n * @param {Number} width \r\n * @param {Number} length \r\n * @param {Number} height \r\n */\r\n constructor(width, length, height){\r\n if(width === undefined) width = 0;\r\n if(length === undefined) length = 0;\r\n if(height === undefined) height = 0;\r\n \r\n this.Set(width, length, height);\r\n this[_vec3] = new THREE.Vector3();\r\n }\r\n\r\n /**\r\n * @param {Number} width \r\n * @param {Number} length \r\n * @param {Number} height \r\n */\r\n Set(width, length, height){\r\n /** @type {Number} */\r\n this.width = width;\r\n /** @type {Number} */\r\n this.length = length;\r\n /** @type {Number} */\r\n this.height = height;\r\n }\r\n\r\n /**\r\n * Returns a THREE.Vector3 representation of the dimensions\r\n * Beware of ordering: x=width, y=height and z=length\r\n * @returns {THREE.Vector3}\r\n */\r\n get vec3(){\r\n return this[_vec3].set(this.width, this.height, this.length);\r\n }\r\n\r\n get volume(){\r\n return this.width * this.height * this.length;\r\n }\r\n\r\n Abs(){\r\n if(this.width < 0) this.width = -this.width;\r\n if(this.length < 0) this.length = -this.length;\r\n if(this.height < 0) this.height = -this.height;\r\n return this;\r\n }\r\n\r\n Compare(dimensions){\r\n var d = this.volume - dimensions.volume;\r\n if(d < -epsilon) return -1;\r\n if(d > epsilon) return 1;\r\n return 0;\r\n }\r\n\r\n Copy(dimensions){\r\n this.Set(dimensions.width, dimensions.length, dimensions.height);\r\n }\r\n\r\n Clone(){\r\n var dimensions = new Dimensions(this.width, this.length, this.height);\r\n return dimensions;\r\n }\r\n\r\n ToString(){\r\n return this.width.toFixed(2) + 'x' + this.length.toFixed(2) + 'x' + this.height.toFixed(2);\r\n }\r\n\r\n toJSON(){\r\n return {\r\n type: type,\r\n width: this.width,\r\n length: this.length,\r\n height: this.height\r\n };\r\n }\r\n\r\n static IsVolume(dimensions){\r\n return Dimensions.Assert(dimensions) \r\n && dimensions.width > epsilon\r\n && dimensions.length > epsilon\r\n && dimensions.height > epsilon\r\n ;\r\n }\r\n\r\n static FromJSON(data){\r\n if(data.type !== type) console.warn('Data supplied is not: ' + type);\r\n\r\n var dimensions = new Dimensions(data.width, data.length, data.height).Abs();\r\n return dimensions;\r\n }\r\n\r\n static Assert(dimensions){\r\n return dimensions instanceof Dimensions\r\n && typeof dimensions.width === numberType\r\n && typeof dimensions.length === numberType\r\n && typeof dimensions.height === numberType\r\n ;\r\n }\r\n}\r\n\r\nexport default Dimensions;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/box/Dimensions.js","\r\nconst active = true;\r\nvar RuntimeTester = {\r\n Notify: function(){},\r\n Test: function(){},\r\n Log: function(){\r\n return 'RuntimeTester is not active';\r\n }\r\n};\r\n\r\nif(active){\r\n\r\n /** @type {Map} */\r\n var tests = new Map();\r\n\r\n class TestLog{\r\n constructor(){\r\n this.successes = [];\r\n this.failures = [];\r\n }\r\n\r\n /** @param {Trial} trial */\r\n Succeeded(trial){\r\n this.successes.push(trial);\r\n }\r\n\r\n /** @param {Trial} trial */\r\n Failed(trial){\r\n this.failures.push(trial);\r\n }\r\n }\r\n\r\n class Test{\r\n constructor(title, maximumRuns){\r\n this.title = title;\r\n this.maximumRuns = isNaN(maximumRuns) ? Number.MAX_SAFE_INTEGER : maximumRuns;\r\n\r\n /** @type {Array} */\r\n this.trials = [];\r\n this.runsCount = 0;\r\n\r\n this.log = new TestLog();\r\n }\r\n\r\n TryInstance(testFunction, expectedResult){\r\n if(this.runsCount < this.maximumRuns){\r\n let trial = new Trial(testFunction, expectedResult).BindTo(this);\r\n this.trials.push(trial);\r\n trial.Execute();\r\n\r\n if(trial.success) this.log.Succeeded(trial);\r\n else this.log.Failed(trial);\r\n\r\n this.runsCount++;\r\n }\r\n }\r\n\r\n Log(){\r\n let log = {\r\n succeeded: this.log.failures.length === 0,\r\n failures: null\r\n };\r\n\r\n if(this.log.failures.length > 0){\r\n log.failures = this.log.failures\r\n }\r\n\r\n return log;\r\n }\r\n }\r\n\r\n class TrialLog{\r\n constructor(){\r\n this.result = undefined;\r\n this.error = undefined;\r\n }\r\n }\r\n\r\n class Trial{\r\n /**\r\n * @param {Function} testFunction \r\n * @param {*} expectedResult \r\n */\r\n constructor(testFunction, expectedResult){\r\n this.testFunction = testFunction;\r\n this.expectedResult = expectedResult;\r\n\r\n this.log = new TrialLog();\r\n }\r\n\r\n /** @param {Test} test */\r\n BindTo(test){\r\n this.test = test;\r\n return this;\r\n }\r\n\r\n Execute(){\r\n let result = null;\r\n try{\r\n result = this.testFunction();\r\n }\r\n catch(error){\r\n this.log.error = error;\r\n console.warn('RuntimeTester.error:', error);\r\n }\r\n\r\n this.log.result = result;\r\n }\r\n\r\n get success(){\r\n let success = this.log.result === this.expectedResult;\r\n return success;\r\n }\r\n }\r\n\r\n RuntimeTester = class RuntimeTester{\r\n\r\n /**\r\n * @param {string} title - also a unique id\r\n * @param {Number} [maximumRuns] Number.MAX_SAFE_INTEGER\r\n */\r\n static Notify(title, maximumRuns){\r\n if(active === false) return false;\r\n\r\n let test = new Test(title, maximumRuns);\r\n tests.set(title, test);\r\n return test;\r\n }\r\n\r\n /**\r\n * @param {string} title - also a unique id\r\n * @param {Function} testFunction \r\n * @param {*} expectedResult \r\n */\r\n static Test(title, testFunction, expectedResult){\r\n if(active === false) return false;\r\n\r\n let test = tests.get(title);\r\n if(!test){\r\n console.warn('RuntimeTester was not notified of :' + title);\r\n test = RuntimeTester.Notify(title, maximumRuns);\r\n }\r\n\r\n test.TryInstance(testFunction, expectedResult);\r\n return test;\r\n }\r\n\r\n static Log(){\r\n if(active === false) return 'RuntimeTester is not active';\r\n\r\n let log = {\r\n pass: true,\r\n successful: [],\r\n failed: [],\r\n skipped: []\r\n };\r\n\r\n let testValues = tests.values();\r\n\r\n for(let test of testValues){\r\n let testRuns = test.runsCount;\r\n if(testRuns === 0){\r\n log.skipped.push(test);\r\n }\r\n else{\r\n let testSuccessful = test.log.failures.length === 0;\r\n if(testSuccessful){\r\n log.successful.push(test);\r\n }\r\n else{\r\n log.pass = false;\r\n log.failed.push(test);\r\n }\r\n }\r\n }\r\n\r\n return log;\r\n }\r\n };\r\n}\r\n\r\nexport default RuntimeTester;\n\n\n// WEBPACK FOOTER //\n// ./src/api/debug/RuntimeTester.js","\r\nclass Resources{\r\n constructor(){\r\n this.texturesPath = '';\r\n }\r\n}\r\n\r\nexport default Resources;\n\n\n// WEBPACK FOOTER //\n// ./src/api/Resources.js","import CargoEntry from \"../components/common/CargoEntry\";\r\nimport Cargo from \"./Cargo\";\r\n\r\n\r\nclass CargoGroup {\r\n /**\r\n * \r\n * @param {CargoEntry} entry\r\n */\r\n constructor(entry){\r\n this.entry = entry;\r\n\r\n /** @type {Array} */\r\n this.cargoes = [];\r\n\r\n this.template = new Cargo(this);\r\n this.quantity = this.entry.quantity;\r\n }\r\n\r\n get quantity(){\r\n return this.cargoes.length;\r\n }\r\n\r\n set quantity(value){\r\n var currentQuantity = this.cargoes.length;\r\n if(value < currentQuantity){\r\n this.cargoes.length = value;\r\n this.entry.quantity = value;\r\n }\r\n else if(value > currentQuantity){\r\n for(var i = currentQuantity; i < value; i++){\r\n this.cargoes[i] = this.template.Clone();\r\n }\r\n }\r\n }\r\n\r\n ToString(){\r\n var output = 'CargoGroup(' + this.quantity + ' x ' + this.entry.ToString() + ')';\r\n\r\n return output;\r\n }\r\n\r\n}\r\n\r\nexport default CargoGroup;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/CargoGroup.js","\r\nfunction stopPropagation(e){\r\n e.stopPropagation();\r\n}\r\n\r\nvar stylesheet;\r\n\r\n/** @param {string|Array} css */\r\nfunction createCSS(css){\r\n if(stylesheet === undefined){\r\n stylesheet = document.createElement('style');\r\n stylesheet.type = 'text/css';\r\n document.getElementsByTagName('head')[0].appendChild(stylesheet);\r\n }\r\n if(css instanceof Array)\r\n css = css.join('\\n');\r\n \r\n if(css.length > 1) stylesheet.innerHTML += css + '\\n';\r\n}\r\n\r\ncreateCSS([\r\n '@keyframes wiggle {',\r\n ' 20% { transform: rotate(5deg); }',\r\n ' 50% { transform: rotate(0deg); }',\r\n ' 75% { transform: rotate(-5deg); }',\r\n ' 100% { transform: rotate(0deg); }',\r\n '}'\r\n]);\r\n\r\nconst styles = {\r\n UIFitContent: 'display: inline-block; padding-bottom: 1em;',\r\n UIHideMenu: 'display: none !important;',\r\n\r\n UIDraggable: 'position: absolute; -webkit-user-select: none; -moz-user-select: none; -o-user-select: none; \\\r\n -ms-user-select: none; -khtml-user-select: none; user-select: none; z-index: 1; padding: 4px;',\r\n UIDHeader: 'color: #ffffff; display: inline-block; word-wrap: break-word; font-family: Monospace; font-size: 1.2em; height: 100%; width: 100%;',\r\n UIDCloseButton: 'background-color: rgb(19, 19, 19); border: none; color: white; padding: 8px 2px; text-align: center; \\\r\n text-decoration: none; margin-left: -38px; margin-right: 10px; font-family: Monospace; font-size: small; cursor: pointer;',\r\n UIWiggleAnim: 'display: inline-block; animation: wiggle .15s;'\r\n \r\n}\r\n\r\nclass Element {\r\n\r\n /**\r\n * @property {HTMLElement} domElement\r\n */\r\n\r\n constructor(){\r\n /**\r\n * @type {HTMLElement}\r\n */\r\n this._domElement;\r\n }\r\n\r\n set domElement(value){\r\n if(this._domElement){\r\n this._domElement.removeEventListener('mousedown', stopPropagation);\r\n this._domElement.removeEventListener('mouseup', stopPropagation);\r\n }\r\n\r\n this._domElement = value;\r\n\r\n this._domElement.addEventListener('mousedown', stopPropagation);\r\n this._domElement.addEventListener('mouseup', stopPropagation);\r\n }\r\n\r\n get domElement(){\r\n return this._domElement;\r\n }\r\n\r\n EnableChildInput(){\r\n if(this._domElement){\r\n this._domElement.removeEventListener('mousedown', stopPropagation);\r\n this._domElement.removeEventListener('mouseup', stopPropagation);\r\n }\r\n }\r\n\r\n Hide(){\r\n Element.AddStyle(this.domElement, styles.UIHideMenu);\r\n }\r\n \r\n Show(){\r\n Element.RemoveStyle(this.domElement, styles.UIHideMenu);\r\n }\r\n\r\n Remove(){\r\n if(this._domElement){\r\n this._domElement.removeEventListener('mousedown', stopPropagation);\r\n this._domElement.removeEventListener('mouseup', stopPropagation);\r\n\r\n this._domElement.remove();\r\n delete this._domElement;\r\n }\r\n }\r\n\r\n get opacity(){\r\n return parseFloat(this.domElement.style.opacity);\r\n }\r\n\r\n set opacity(value){\r\n this.domElement.style.opacity = value;\r\n }\r\n\r\n static _Span(text, attributes){\r\n return {\r\n type: 'span',\r\n label: text, \r\n attributes: attributes\r\n };\r\n }\r\n\r\n static Span(text, attributes){\r\n var _span = this._Span(text, attributes);\r\n return crel(_span.type, _span.attributes, _span.label);\r\n }\r\n\r\n /**\r\n * \r\n * @param {HTMLElement} element \r\n * @param {string} style \r\n */\r\n static AddStyle(element, style){\r\n let eStyle = element.style.cssText;\r\n let index = eStyle.indexOf(style);\r\n if(index === -1){\r\n element.style.cssText += style;\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param {HTMLElement} element \r\n * @param {string} style \r\n */\r\n static RemoveStyle(element, style){\r\n element.style.cssText = element.style.cssText.replace(style, '');\r\n }\r\n\r\n static get CreateCSS(){\r\n return createCSS;\r\n }\r\n\r\n static Add(element){\r\n document.body.appendChild(element.domElement);\r\n }\r\n}\r\n\r\nconst widths = {\r\n small: 162,\r\n medium: 242,\r\n large: 362\r\n};\r\n\r\nclass Draggable extends Element {\r\n constructor(title, width){\r\n\r\n super();\r\n\r\n var dom;\r\n\r\n var move = function(xpos, ypos){\r\n dom.style.left = xpos + 'px';\r\n dom.style.top = ypos + 'px';\r\n };\r\n\r\n var diffX = 0,\r\n diffY = 0;\r\n var eWi = 0,\r\n eHe = 0,\r\n cWi = 0,\r\n cHe = 0;\r\n\r\n var onMouseMove = function(evt){\r\n evt = evt || window.event;\r\n var posX = evt.clientX,\r\n posY = evt.clientY,\r\n aX = posX - diffX,\r\n aY = posY - diffY;\r\n if (aX < 0) aX = 0;\r\n if (aY < 0) aY = 0;\r\n if (aX + eWi > cWi) aX = cWi - eWi;\r\n if (aY + eHe > cHe) aY = cHe -eHe;\r\n move(aX, aY);\r\n };\r\n \r\n var startMoving = function(evt){\r\n var p = dom.parentNode;\r\n var container = (p !== undefined && p !== null) ? p : window;\r\n container = document.body;\r\n evt = evt || window.event;\r\n var posX = evt.clientX,\r\n posY = evt.clientY,\r\n divTop = dom.style.top,\r\n divLeft = dom.style.left;\r\n\r\n eWi = parseInt(dom.style.width);\r\n eHe = parseInt(dom.style.height);\r\n cWi = parseInt(container.style.width);\r\n cHe = parseInt(container.style.height);\r\n\r\n container.style.cursor='move';\r\n divTop = divTop.replace('px','');\r\n divLeft = divLeft.replace('px','');\r\n diffX = posX - divLeft;\r\n diffY = posY - divTop;\r\n document.addEventListener('mousemove', onMouseMove);\r\n };\r\n \r\n var stopMoving = function(){\r\n var p = dom.parentNode;\r\n var container = (p !== undefined && p !== null) ? p : window;\r\n container = document.body;\r\n container.style.cursor = 'default';\r\n document.removeEventListener('mousemove', onMouseMove);\r\n };\r\n\r\n if(width === undefined) width = widths.medium;\r\n var left = 60 + Math.floor(Math.random() * 160),\r\n top = 60 + Math.floor(Math.random() * 60);\r\n var domStyle = 'left:' + left + 'px; top:' + top + 'px; width:' + width + 'px; background-color: rgba(0, 0, 0, .8);' + styles.UIFitContent + styles.UIDraggable;\r\n dom = crel('div', {style: domStyle});\r\n var head = crel('div', {style: 'display: flex;'});\r\n dom.appendChild(head);\r\n var header = crel('div', {onmousedown: startMoving, onmouseup: stopMoving, style: styles.UIDHeader}, title);\r\n \r\n var scope = this;\r\n var close = function(){\r\n scope.Close();\r\n };\r\n var closeBtn = crel('button', {onclick: close, style: styles.UIDCloseButton}, 'Close');\r\n head.appendChild(closeBtn);\r\n head.appendChild(header);\r\n\r\n dom.closeBtn = closeBtn;\r\n\r\n this.domElement = dom;\r\n this.EnableChildInput();\r\n this.closeBtn = closeBtn;\r\n }\r\n\r\n Close(){\r\n this.domElement.remove();\r\n }\r\n\r\n Add(elt){\r\n this.domElement.appendChild(elt);\r\n }\r\n\r\n GetPosition(){\r\n var style = window.getComputedStyle(this.domElement),\r\n left = parseFloat(style.left),\r\n top = parseFloat(style.top);\r\n \r\n return {x: left, y: top};\r\n }\r\n\r\n SetPosition(x, y){\r\n this.domElement.style.left = x + 'px';\r\n this.domElement.style.top = y + 'px';\r\n }\r\n\r\n static get widths(){\r\n return widths;\r\n }\r\n}\r\n\r\nexport {\r\n styles,\r\n Element,\r\n Draggable\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/config/UIUtils.js","\r\nrequire('../../../../min-dependencies/lib/three/controls/TransformControls');\r\n\r\nconst spaces = {\r\n world: 'world',\r\n local: 'local'\r\n};\r\n\r\nconst modes = {\r\n translate: 'translate',\r\n rotate: 'rotate',\r\n scale: 'scale'\r\n};\r\n\r\n/**\r\n * @type {Object}\r\n */\r\nvar defaultControls = {};\r\n\r\nclass Control3D {\r\n\r\n /**\r\n * @param {THREE.Camera} camera \r\n * @param {HTMLElement} domElement \r\n */\r\n constructor(camera, domElement){\r\n this.camera = camera;\r\n this.control = new THREE.TransformControls(this.camera, domElement);\r\n this.control.addEventListener('change', this.Update.bind(this));\r\n\r\n this.control.traverse(function(child){\r\n child.renderOrder = 2;\r\n });\r\n\r\n this.visible = false;\r\n }\r\n\r\n get visible(){\r\n return this.control.visible;\r\n }\r\n\r\n set visible(value){\r\n this.control.visible = value;\r\n if(value === false){\r\n this.Detach();\r\n }\r\n }\r\n\r\n Attach(target){\r\n this.control.attach(target);\r\n }\r\n\r\n Detach(){\r\n this.control.detach();\r\n }\r\n\r\n Toggle(target){\r\n if(this.control.object){\r\n this.control.detach();\r\n }\r\n else{\r\n this.control.attach(target);\r\n }\r\n }\r\n\r\n Update(){\r\n this.control.update();\r\n }\r\n\r\n get space(){\r\n return this.control.space;\r\n }\r\n\r\n set space(value){\r\n this.control.space = value;\r\n }\r\n\r\n // translate || rotate || scale\r\n set mode(value){\r\n this.control.setMode(value);\r\n }\r\n\r\n static get spaces(){\r\n return spaces;\r\n }\r\n\r\n static get modes(){\r\n return modes;\r\n }\r\n\r\n /**\r\n * @param {string} id \r\n * @param {THREE.Camera} camera \r\n * @param {HTMLElement} domElement \r\n * @returns {Control3D}\r\n */\r\n static Configure(id, camera, domElement){\r\n var control = new Control3D(camera, domElement);\r\n defaultControls[id] = control;\r\n return control;\r\n }\r\n\r\n /**\r\n * @returns {Control3D}\r\n */\r\n static Request(id){\r\n return defaultControls[id];\r\n }\r\n}\r\n\r\nexport default Control3D;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/config/Control3D.js","import Signaler from \"../utils/cik/Signaler\";\r\nimport CargoEntry from \"../components/common/CargoEntry\";\r\nimport CargoGroup from \"./CargoGroup\";\r\nimport BoxEntry from \"../components/box/BoxEntry\";\r\n\r\nconst stringType = 'string';\r\n\r\nconst signals = {\r\n groupAdded: 'groupAdded',\r\n groupRemoved: 'groupRemoved',\r\n groupModified: 'groupModified'\r\n};\r\n\r\nclass CargoList extends Signaler{\r\n constructor(){\r\n super();\r\n\r\n /** @type {Map} */\r\n this.groups = new Map();\r\n }\r\n\r\n /** Adds a new CargoGroup\r\n * @param {CargoEntry} entry \r\n */\r\n Add(entry){\r\n var group = new CargoGroup(entry);\r\n\r\n this.groups.set(entry.uid, group);\r\n this.Dispatch(signals.groupAdded, group);\r\n }\r\n\r\n /** Adds a new CargoGroup\r\n * @param {CargoEntry} entry \r\n */\r\n Modify(entry){\r\n var group = this.groups.get(entry.uid);\r\n this.Dispatch(signals.groupModified, group);\r\n }\r\n\r\n /** Removes the CargoGroup using its uid\r\n * @param {string} uid \r\n */\r\n Remove(uid){\r\n var group = this.groups.get(uid);\r\n if(group){\r\n this.groups.delete(uid);\r\n this.Dispatch(signals.groupRemoved, group);\r\n }\r\n }\r\n\r\n /** @param {string} entryUID @returns {BoxEntry} the entry if it exists */\r\n GetEntry(entryUID){\r\n if(this.groups.has(entryUID)) return this.groups.get(entryUID).entry;\r\n }\r\n\r\n get ready(){\r\n return this.groups.size > 0;\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nexport default CargoList;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/CargoList.js","import Container from \"./container/Container\";\r\nimport Signaler from \"../utils/cik/Signaler\";\r\n\r\nconst signals = {\r\n containerAdded: 'containerAdded'\r\n};\r\n\r\nconst _currentIndex = Symbol('currentIndex');\r\n\r\nclass PackingSpace extends Signaler {\r\n constructor(){\r\n super();\r\n \r\n this[_currentIndex] = -1;\r\n\r\n /**\r\n * @type {Container}\r\n */\r\n this.containers = [];\r\n }\r\n\r\n /** @param {Container} container */\r\n AddContainer(container){\r\n this.containers.push(container);\r\n this[_currentIndex]++;\r\n\r\n this.Dispatch(signals.containerAdded, container);\r\n }\r\n\r\n /** @returns {Container} */\r\n get current(){\r\n var currentIndex = this[_currentIndex];\r\n if(currentIndex !== -1){\r\n return this.containers[currentIndex];\r\n }\r\n }\r\n\r\n get ready(){\r\n return this[_currentIndex] !== -1;\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nexport default PackingSpace;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/PackingSpace.js","import Debug from \"../../debug/Debug\";\r\nimport Region from \"./core/Region\";\r\n\r\nexport const debugging = false;\r\n\r\nif(debugging){\r\n Debug.app.sceneSetup.input.ListenKeys(['right', 'space']);\r\n}\r\n\r\nexport function sleep(ms, force) {\r\n return new Promise(resolve => {\r\n if(debugging || force) setTimeout(resolve, ms);\r\n else resolve();\r\n });\r\n}\r\n\r\nexport function debugLog(...args){\r\n console.log(...args);\r\n}\r\n\r\nexport function keypress(ms, force) {\r\n return new Promise(resolve => {\r\n if(debugging || force){\r\n let tid = undefined;\r\n function execute(){\r\n if(tid !== undefined) clearTimeout(tid);\r\n removeEventListener('keydown', execute);\r\n resolve();\r\n }\r\n if(ms && ms > 0) tid = setTimeout(execute, ms);\r\n addEventListener('keydown', execute);\r\n }\r\n else{\r\n resolve();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * @param {Region} region * @param {Number} color \r\n */\r\nexport function debugRegion(region, color, solid, duration, checkered){\r\n var x = region.x, y = region.y, z = region.z, w = region.width, h = region.height, l = region.length;\r\n var debugUID = Debug.Viz.DrawVolume(x + w/2, y + h/2, z + l/2, w, h, l, color || 0xaaffff, duration || -1, !Boolean(solid), checkered);\r\n return debugUID;\r\n}\r\n\r\n/** @param {Array} */\r\nexport function debugClear(uids){\r\n if(uids){\r\n uids.forEach(uid => {\r\n Debug.Viz.RemoveObjectByUID(uid);\r\n });\r\n }\r\n else{\r\n Debug.Viz.ClearAll();\r\n }\r\n}\r\n\r\nfunction numberFormatDefault(n){ return n; }\r\n\r\nexport function numberFormat(n, d){\r\n if(n > Number.MAX_SAFE_INTEGER - 2) return 'MAX';\r\n let nStr = Math.round(n) !== n ? n.toFixed(d) : n;\r\n return nStr;\r\n}\r\n\r\n/** @typedef FormatParams @property {Function} nf number formatting function */\r\n/** @param {string} str @param {FormatParams} params @param {Array<*>} args */\r\nexport function format(str, params, ...args){\r\n if(params.nf === undefined) params.nf = numberFormatDefault;\r\n let index = 0;\r\n while( (index = str.indexOf('@', index)) !== -1 ){\r\n if(str[index - 1] !== '\\\\'){\r\n let a = args.shift();\r\n if(typeof a === 'number') a = params.nf(a);\r\n str = str.replace('@', a);\r\n }\r\n index += 1;\r\n }\r\n return str;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/CUBDebug.js","import { epsilon, smallValue, smallValueSqrt } from \"../core/Math2D\";\r\nimport { Item } from \"../core/Components\";\r\nimport { PackedContainer } from \"../core/PackedComponents\";\r\nimport Region from \"../core/Region\";\r\nimport RegionsTree from \"../core/RegionsTree\";\r\nimport { debugLog, sleep } from '../CUBDebug';\r\n\r\nclass HeuristicParams {\r\n constructor(){\r\n }\r\n}\r\n\r\nclass HeuristicResult{\r\n /** @param {Region} containingRegion @param {Region} packedRegion @param {Number} orientation */\r\n constructor(containingRegion, packedRegion, orientation){\r\n this.containingRegion = containingRegion;\r\n this.packedRegion = packedRegion;\r\n this.orientation = orientation;\r\n }\r\n}\r\n\r\nconst _items = Symbol('items');\r\nconst _packedContainer = Symbol('packedContainer');\r\nconst _regionsTree = Symbol('regionsTree');\r\nconst _workingItem = Symbol('workingItem');\r\n\r\nclass HeuristicWorkingSet{\r\n /** @param {HeuristicParams} params */\r\n constructor(params){\r\n this.params = params;\r\n }\r\n\r\n /** @param {Array} items */\r\n SetItems(items){ this[_items] = items.slice(); }\r\n /** @param {Array} value */\r\n set items(value){ throw Error('Use HeuristicWorkingSet.SetItems(items) instead.'); }\r\n get items(){ return this[_items]; }\r\n\r\n /** @param {PackedContainer} packedContainer */\r\n SetPackedContainer(packedContainer){ this[_packedContainer] = packedContainer; }\r\n /** @param {PackedContainer} value */\r\n set packedContainer(value){ throw Error('Use HeuristicWorkingSet.SetPackedContainer(packedContainer) instead.'); }\r\n get packedContainer(){ return this[_packedContainer]; }\r\n\r\n /** @param {RegionsTree} regionsTree */\r\n SetRegionsTree(regionsTree){ this[_regionsTree] = regionsTree; }\r\n /** @param {RegionsTree} value */\r\n set regionsTree(value){ throw Error('Use HeuristicWorkingSet.SetRegionsTree(regionsTree) instead.'); }\r\n get regionsTree(){ return this[_regionsTree]; }\r\n\r\n /** @param {Item} item @returns {Boolean} */\r\n Validate(item){\r\n return item.volume > epsilon && this.packedContainer.WeightPass(item.weight);\r\n }\r\n\r\n /** Validates the item and assign it\r\n * @param {Item} item @returns {Boolean} */\r\n SetWorkingItem(item){\r\n if(this.Validate(item)){\r\n this[_workingItem] = item;\r\n return true;\r\n }\r\n \r\n this[_workingItem] = undefined;\r\n return false;\r\n }\r\n\r\n /** @param {Item} value */\r\n set workingItem(value){ throw Error('Use HeuristicWorkingSet.SetWorkingItem(item) instead.'); }\r\n get workingItem(){ return this[_workingItem]; }\r\n\r\n /** @param {Region} region @returns {Heuristic.Result} */\r\n FitFunction(region){\r\n // Override this with heuristic algorithm\r\n }\r\n\r\n /** @returns {Heuristic.Result} */\r\n Fit(){\r\n let result = this.regionsTree.Find(this.FitFunction, this);\r\n return result;\r\n }\r\n\r\n /** @returns {false | Item} */\r\n async NextItem(){\r\n if(this.items === undefined || this.items.length === 0) return false;\r\n\r\n let index = this.items.length - 1;\r\n let item = this.items[index];\r\n if(item.quantity === 0){\r\n this.items.splice(index, 1);\r\n return this.NextItem();\r\n }\r\n\r\n return item;\r\n }\r\n\r\n /** @param {Item} item */\r\n RemoveItem(item){\r\n let index = this.items.indexOf(item);\r\n if(index !== -1) this.items.splice(index, 1);\r\n }\r\n}\r\n\r\nclass Heuristic{\r\n /** @param {HeuristicParams} params @param {typeof HeuristicWorkingSet} workingSetType */\r\n constructor(params, workingSetType){\r\n this.params = params;\r\n\r\n this.workingSet = new workingSetType(this.params);\r\n }\r\n\r\n NextItem(){\r\n return this.workingSet.NextItem();\r\n }\r\n\r\n /** @param {Item} item */\r\n Unpack(item){\r\n this.workingSet.RemoveItem(item);\r\n }\r\n\r\n /** @param {Item} item @returns {HeuristicResult} */\r\n Fit(item){ return false; }\r\n}\r\n\r\nHeuristic.Params = HeuristicParams;\r\nHeuristic.WorkingSet = HeuristicWorkingSet;\r\nHeuristic.Result = HeuristicResult;\r\n\r\nexport default Heuristic;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/heuristics/Heuristic.js","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 35\n// module chunks = 0","/*\r\nconst _callback = Symbol('callback');\r\n/** @returns {function} /\r\nget callback(){ return this[_callback]; }\r\nset callback(value){\r\n this[_callback] = value;\r\n}\r\n*/\r\n\r\nclass UpdateComponent{\r\n /**\r\n * \r\n * @param {Boolean} active \r\n * @param {Number} interval \r\n * @param {function(Number)} callback\r\n */\r\n constructor(active, interval, callback){\r\n this.active = active === undefined ? false : active;\r\n this.interval = interval === undefined ? 1 / 30 : interval;\r\n this.callback = callback;\r\n this.lastUpdateTime = 0;\r\n }\r\n\r\n /**\r\n * @param {Number} now \r\n */\r\n Update(now){\r\n this.lastUpdateTime = now;\r\n this.callback(now);\r\n }\r\n}\r\n\r\nexport default UpdateComponent;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/input/UpdateComponent.js","\r\n/**\r\n * RaycastCallback\r\n * \r\n * @callback RaycastCallback\r\n * @param {Object} obj\r\n * @param {THREE.Intersection} intersection\r\n */\r\n\r\n /**\r\n * Mapping function\r\n * \r\n * @callback RaycastMapping\r\n * @param {Object} obj\r\n */\r\n\r\nclass RaycastGroup {\r\n\r\n /**\r\n * \r\n * @param {Array} items \r\n * @param {RaycastCallback} callback \r\n * @param {RaycastMapping} collectionQuery \r\n * @param {Boolean} updateProperty \r\n * @param {Boolean} recursive \r\n */\r\n constructor (items, callback, collectionQuery, updateProperty, recursive){\r\n /**\r\n * @type {Boolean}\r\n */\r\n this.enabled = true;\r\n\r\n this.items = items;\r\n this.callback = callback;\r\n this.updateProperty = updateProperty !== undefined ? updateProperty : false;\r\n this.recursive = recursive !== undefined ? recursive : false;\r\n\r\n if(collectionQuery === undefined){\r\n this.raycastItems = this.items;\r\n }\r\n else{\r\n this.raycastItems = [];\r\n this.collectionQuery = collectionQuery;\r\n this.GetRaycastItems(this.collectionQuery);\r\n }\r\n }\r\n\r\n GetRaycastItems(collectionQuery){\r\n for(var iItem = 0; iItem < this.items.length; iItem++){\r\n var rItem = collectionQuery(this.items[iItem]);\r\n if(rItem !== undefined){\r\n this.raycastItems.push(rItem);\r\n }\r\n else{\r\n this.items.splice(iItem, 1);\r\n Cik.Log('raycastItem is undefined, entry removed from .items array');\r\n }\r\n }\r\n }\r\n\r\n UpdateItems(items, collectionQuery){\r\n this.items = items;\r\n if(collectionQuery === undefined) collectionQuery = this.collectionQuery;\r\n\r\n if(collectionQuery === undefined){\r\n this.raycastItems = this.items;\r\n }\r\n else{\r\n this.raycastItems.length = 0;\r\n this.collectionQuery = collectionQuery;\r\n this.GetRaycastItems(this.collectionQuery);\r\n }\r\n }\r\n\r\n UpdateRaycastItems(){\r\n this.raycastItems.length = 0;\r\n for(var i = 0; i < this.items.length; i++){\r\n let raycastItem = this.collectionQuery(this.items[i]);\r\n if(raycastItem) this.raycastItems.push(raycastItem);\r\n }\r\n }\r\n\r\n Raycast(raycaster){\r\n if(this.enabled === false) return;\r\n\r\n \r\n if(this.updateProperty){\r\n this.UpdateRaycastItems();\r\n }\r\n \r\n var raycastItems = this.raycastItems;\r\n \r\n // if ( object.visible === false || object.parent === null) return; in THREE.Raycaster.intersectObject()\r\n var intersects = raycaster.intersectObjects(raycastItems, this.recursive);\r\n if (intersects.length > 0) {\r\n if(this.collectionQuery){\r\n var raycastItemIndex = this.BubbleUpForIndex(intersects[0].object, raycastItems);\r\n if(raycastItemIndex !== -1) this.callback(this.items[raycastItemIndex], intersects[0]);\r\n }\r\n else{\r\n this.callback(intersects[0].object, intersects[0]);\r\n }\r\n }\r\n }\r\n\r\n BubbleUpForIndex(child, collection){\r\n var nestLimit = 100;\r\n var numCollection = collection.length;\r\n while(child !== null && nestLimit-- > 0){\r\n for(var i = 0; i < numCollection; i++) if(collection[i] === child) return i;\r\n child = child.parent;\r\n }\r\n return -1;\r\n }\r\n}\r\n\r\nexport default RaycastGroup;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/input/RaycastGroup.js","\r\nclass Controller {\r\n constructor(params){\r\n\r\n this.params = params;\r\n\r\n // Containers\r\n this.itemsContainer = new THREE.Object3D();\r\n this.itemsContainer.name = \"itemsContainer\";\r\n this.miscContainer = new THREE.Object3D();\r\n this.miscContainer.name = \"miscContainer\";\r\n this.ambientContainer = new THREE.Object3D();\r\n this.ambientContainer.name = \"ambientContainer\";\r\n this.defaults = new THREE.Object3D();\r\n this.defaults.name = \"defaults\";\r\n\r\n // Scene\r\n this.scene = new THREE.Scene();\r\n\r\n // Setup rest\r\n this.scene.add(this.itemsContainer);\r\n this.scene.add(this.miscContainer);\r\n this.scene.add(this.ambientContainer);\r\n this.scene.add(this.defaults);\r\n }\r\n\r\n Add(object, container){\r\n if(container === undefined) container = this.miscContainer;\r\n container.add(object);\r\n }\r\n\r\n AddDefault(object){\r\n this.defaults.add(object);\r\n }\r\n\r\n Remove(object){\r\n if(typeof object === 'string'){\r\n var objName = object;\r\n object = this.itemsContainer.getObjectByName(objName);\r\n if(object === undefined) object = this.miscContainer.getObjectByName(objName);\r\n if(object === undefined) return;\r\n }\r\n this.itemsContainer.remove(object);\r\n this.miscContainer.remove(object);\r\n }\r\n}\r\n\r\nexport default Controller;\n\n\n// WEBPACK FOOTER //\n// ./src/api/scene/Controller.js","import CargoEntry from '../components/common/CargoEntry';\r\nimport BoxEntry from '../components/box/BoxEntry';\r\nimport CargoBoxView from './CargoBoxView';\r\nimport CargoView from './CargoView';\r\nimport Utils from '../utils/cik/Utils';\r\nimport { Transition, Slide } from '../utils/cik/transitions/Transition';\r\nimport Asset from '../components/assets/Asset';\r\n\r\nconst epsilon = Math.pow(2, -52);\r\n\r\nvar tempBox3 = new THREE.Box3();\r\nvar tempVec3 = new THREE.Vector3();\r\n\r\n\r\n/**\r\n * @typedef {Object} EntryInputViewParams\r\n * @property {import('../UX').default} ux\r\n * @property {SceneSetup} sceneSetup\r\n * @property {scaleFigure} scaleFigure\r\n */\r\n\r\nconst _scaleFigure = Symbol('scaleFigure');\r\nconst scaleFigure = {\r\n man: 'man',\r\n woman: 'woman',\r\n none: 'none'\r\n};\r\n\r\n/** @type {EntryInputViewParams} */\r\nconst defaultParams = {\r\n scaleFigure: scaleFigure.man\r\n};\r\n\r\nclass EntryInputView{\r\n /** @param {EntryInputViewParams} params */\r\n constructor(params){\r\n\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n const scope = this;\r\n\r\n this.view = new THREE.Object3D();\r\n this.preview = new THREE.Object3D();\r\n this.view.add(this.preview);\r\n\r\n /** @type {Map} */\r\n this.previewTypes = new Map();\r\n\r\n let units = this.params.ux.params.units;\r\n this.offsetX = 0;\r\n\r\n // scale ref\r\n const height = 71 * units;\r\n\r\n let material = new THREE.MeshBasicMaterial({color: 0x000000, transparent : true, side: THREE.DoubleSide});\r\n Asset.SetTextureMap('scaleref-alphaMap.jpg', material, 'alphaMap').then( (alphaMap) => {\r\n alphaMap.repeat.setX(.5);\r\n });\r\n\r\n let refMesh = new THREE.Mesh(\r\n new THREE.PlaneGeometry(height / 2, height, 1, 1),\r\n material\r\n );\r\n\r\n this.offsetX = 60 * units;\r\n refMesh.position.x = this.offsetX;\r\n\r\n this.view.add(refMesh);\r\n this.refMesh = refMesh;\r\n this.scaleFigure = this.params.scaleFigure;\r\n\r\n tempBox3.setFromObject(this.refMesh);\r\n tempBox3.getSize(tempVec3);\r\n this.offsetX -= tempVec3.x / 2;\r\n\r\n let bkgMesh = new THREE.Mesh(\r\n new THREE.PlaneGeometry(height * 6, height * 1.8, 1, 1),\r\n new THREE.MeshBasicMaterial({color: 0xffffff, depthWrite: false, depthFunc: THREE.NeverDepth, side: THREE.DoubleSide})\r\n );\r\n\r\n bkgMesh.position.z = -2 * units;\r\n\r\n this.view.add(bkgMesh);\r\n\r\n this.rotate = false;\r\n\r\n this.transition = new Transition(this.view, this.view, .25);\r\n this.slideIn = new Slide('x', 1.2, 0);\r\n this.slideIn.Init(this.transition);\r\n this.slideOut = new Slide('x', 0, 1.2);\r\n this.slideOut.Init(this.transition);\r\n /** @param {Slide} transitionController */\r\n function onTransitionComplete(transitionController){\r\n if(transitionController === scope.slideOut){\r\n scope.Hide();\r\n }\r\n else{\r\n scope.rotate = true;\r\n }\r\n }\r\n this.transition.On(Transition.signals.complete, onTransitionComplete);\r\n \r\n this.Preview();\r\n }\r\n\r\n /** @param {scaleFigure} value */\r\n set scaleFigure(value){\r\n this[_scaleFigure] = value;\r\n let refMesh = this.refMesh;\r\n if(refMesh instanceof THREE.Mesh){\r\n /** @type {THREE.Texture} */\r\n let alphaMap = refMesh.material.alphaMap;\r\n if(value === scaleFigure.man){\r\n alphaMap.offset.setX(0);\r\n }\r\n else{\r\n alphaMap.offset.setX(.5);\r\n }\r\n }\r\n }\r\n\r\n get scaleFigure(){ return this[_scaleFigure]; }\r\n\r\n static get scaleFigure(){ return scaleFigure; }\r\n\r\n /**\r\n * @param {CargoEntry} entry \r\n */\r\n Preview(entry){\r\n\r\n let valid = entry;\r\n\r\n if(valid){\r\n if(entry instanceof BoxEntry) valid = entry.dimensions.volume > epsilon;\r\n }\r\n\r\n if(!valid){\r\n this.End();\r\n return false;\r\n }\r\n\r\n let c = this.preview.children;\r\n while(c.length > 0) this.preview.remove(c[c.length - 1]);\r\n\r\n let units = this.params.ux.params.units;\r\n let offsetX = this.offsetX;\r\n\r\n if(entry instanceof BoxEntry){\r\n /** @type {CargoBoxView} */\r\n let boxView = this.previewTypes.get(entry.type);\r\n if(boxView){\r\n boxView.entry = entry;\r\n }\r\n else{\r\n boxView = new CargoBoxView(entry);\r\n this.previewTypes.set(entry.type, boxView);\r\n\r\n boxView.mesh.material = boxView.mesh.material.clone();\r\n boxView.mesh.material.depthWrite = false;\r\n }\r\n\r\n boxView.mesh.renderOrder = Number.MAX_SAFE_INTEGER - 10;\r\n this.preview.add(boxView.view);\r\n\r\n this.preview.position.x = -Math.max(entry.dimensions.width, entry.dimensions.length) / 2 + offsetX;\r\n this.preview.position.y = entry.dimensions.height / 2 + tempBox3.min.y;\r\n }\r\n\r\n this.Start();\r\n }\r\n\r\n Show(){\r\n this.view.visible = true;\r\n }\r\n\r\n Start(){\r\n if(this.previewing === false){\r\n this.rotate = false;\r\n this.transition.controller = this.slideIn;\r\n this.transition.Start();\r\n }\r\n this.Show();\r\n }\r\n\r\n Hide(){\r\n this.view.visible = false;\r\n }\r\n\r\n End(){\r\n if(this.previewing === true){\r\n this.transition.controller = this.slideOut;\r\n this.transition.Start();\r\n }\r\n }\r\n\r\n get previewing(){ return this.view.visible; }\r\n\r\n /** @param {Number} now @param {Number} deltaTime */\r\n Update(now, deltaTime){\r\n if(this.previewing){\r\n if(this.rotate) this.preview.rotateY(-Math.PI / 10 * deltaTime / 1000);\r\n this.transition.Update();\r\n }\r\n }\r\n}\r\n\r\nexport default EntryInputView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/EntryInputView.js","class TextField {\r\n /**\r\n * @param {string} label \r\n * @param {string} content \r\n */\r\n constructor(label, content){\r\n /**\r\n * @type {string}\r\n */\r\n this.label = label;\r\n /**\r\n * @type {string}\r\n */\r\n this.content = content;\r\n }\r\n\r\n /**\r\n * @param {TextField} field \r\n */\r\n Copy(field){\r\n this.label = field.label;\r\n this.content = field.content;\r\n }\r\n\r\n Clone(){\r\n var field = new TextField(this.label, this.content);\r\n return field;\r\n }\r\n\r\n static get defaultContent(){\r\n return '-';\r\n }\r\n}\r\n\r\nexport default TextField;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/common/TextField.js","import Signaler from \"../../utils/cik/Signaler\";\r\nimport Utils from \"../../utils/cik/Utils\";\r\n\r\nvar tlWatchTimer, tlWatchEntries;\r\nfunction tlWatchUpdater(){\r\n for(let i = 0; i < tlWatchEntries.length; i++){\r\n let entry = tlWatchEntries[i];\r\n let newValue = entry.owner[entry.propertyName];\r\n if(newValue !== entry.savedValue){\r\n entry.savedValue = newValue;\r\n entry.tl.value = newValue;\r\n }\r\n };\r\n}\r\nfunction addTLWatch(tl, owner, propertyName){\r\n if(tlWatchTimer === undefined){\r\n tlWatchEntries = [];\r\n tlWatchTimer = setInterval(tlWatchUpdater, 200);\r\n }\r\n tlWatchEntries.push({tl: tl, owner: owner, propertyName: propertyName, savedValue: null});\r\n}\r\n\r\nconst _value = Symbol('value');\r\nconst typeofString = 'string';\r\n\r\nconst signals = {\r\n change: 'change'\r\n};\r\n\r\nclass TextLabel extends Signaler{\r\n constructor(){\r\n super();\r\n\r\n this[_value] = '';\r\n }\r\n\r\n get value(){\r\n return this[_value];\r\n }\r\n\r\n /** @param {string} v */\r\n set value(v){\r\n if(v !== typeofString) v = this.GetString(v);\r\n\r\n let changed = this[_value] !== v;\r\n this[_value] = v;\r\n if(changed) this.Dispatch(signals.change, this);\r\n }\r\n\r\n GetString(v){\r\n return v.ToString ? v.ToString() : v.toString();\r\n }\r\n\r\n Watch(owner, propertyName){\r\n addTLWatch(this, owner, propertyName);\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nconst defaultGeometry = new THREE.PlaneGeometry(1, 1, 1, 1);\r\n\r\n/**\r\n * @typedef TLVParams\r\n * @property {string} font css 32px sans-serif\r\n * @property {string} textAlign start, end, left, right or center\r\n * @property {string} sidePadding px\r\n * @property {Number} fontColor css\r\n * @property {Number} backColor css\r\n * @property {Number} width px\r\n * @property {Number} height px\r\n */\r\n/** @type {TLVParams} */\r\nconst defaultParams = {\r\n font: '32px sans-serif',\r\n textAlign: 'center',\r\n sidePadding: 16,\r\n fontColor: 0x000000,\r\n backColor: 0xffffff,\r\n width: 256,\r\n height: 64\r\n};\r\n\r\nclass TextLabelView{\r\n \r\n /** @param {TLVParams} params */\r\n constructor(params){\r\n \r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n\r\n let material = new THREE.MeshBasicMaterial({color: 0xffffff, side: THREE.DoubleSide});\r\n this.view = new THREE.Mesh(defaultGeometry, material);\r\n }\r\n\r\n /** @param {TextLabel} value */\r\n set textLabel(value){\r\n value.On(TextLabel.signals.change, this.OnChange.bind(this));\r\n }\r\n\r\n /** @param {TextLabel} textLabel */\r\n OnChange(textLabel){\r\n let text = textLabel.value;\r\n this.UpdateText(text);\r\n }\r\n\r\n /** @param {string} text */\r\n UpdateText(text){\r\n if(this.canvas2d === undefined)\r\n this.canvas2d = document.createElement('canvas');\r\n\r\n this.canvas2d.width = this.params.width;\r\n this.canvas2d.height = this.params.height;\r\n\r\n let context2d = this.canvas2d.getContext('2d');\r\n context2d.fillStyle = this.params.backColor;\r\n context2d.fillRect(0, 0, this.params.width + 2, this.params.height + 2);\r\n context2d.fillStyle = this.params.fontColor;\r\n context2d.font = this.params.font;\r\n context2d.textAlign = this.params.textAlign;\r\n context2d.textBaseline = 'middle';\r\n\r\n let x = this.params.textAlign === 'start' || this.params.textAlign === 'left' ? this.params.sidePadding :\r\n ( this.params.textAlign === 'end' || this.params.textAlign === 'right' ? this.params.width - this.params.sidePadding :\r\n ( this.params.width / 2 ) );\r\n context2d.fillText(text, x, this.params.height / 2);\r\n\r\n //\r\n let mesh = this.view;\r\n /** @type {THREE.MeshBasicMaterial} */\r\n let material = mesh.material;\r\n if(!material.map){\r\n material.map = new THREE.CanvasTexture(this.canvas2d);\r\n material.map.minFilter = THREE.LinearFilter;\r\n material.map.anisotropy = 1.4;\r\n }\r\n else{\r\n material.map.image = this.canvas2d;\r\n }\r\n material.map.needsUpdate = true;\r\n }\r\n\r\n}\r\n\r\nTextLabelView.Label = TextLabel;\r\n\r\nexport default TextLabelView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/components/TextLabelView.js","import EntryInputView from \"./view/EntryInputView\";\r\n\r\nclass Constants{\r\n constructor(){\r\n\r\n }\r\n\r\n static get scaleRefFigure(){ return EntryInputView.scaleFigure; }\r\n}\r\n\r\nexport default Constants;\n\n\n// WEBPACK FOOTER //\n// ./src/api/Constants.js","import { Element } from \"./UIUtils\";\r\n\r\nif(window.dat && !window.dat.guiExtensions){\r\n\r\n window.dat.guiExtensions = true;\r\n\r\n Element.CreateCSS([\r\n '.tooltip .tooltiptext {',\r\n ' visibility: hidden;',\r\n ' position: absolute;',\r\n ' width: 120px;',\r\n ' background-color: #111;',\r\n ' color: #fff;',\r\n ' text-align: center;',\r\n ' padding: 2px 0;',\r\n ' border-radius: 2px;',\r\n ' z-index: 1;',\r\n ' opacity: 0;',\r\n ' transition: opacity .6s;',\r\n '}',\r\n\r\n '.tooltip-top {',\r\n ' bottom: 125%;',\r\n ' left: 50%;',\r\n ' margin-left: -60px;',\r\n '}',\r\n \r\n '.tooltip:hover .tooltiptext {',\r\n ' visibility: visible;',\r\n ' opacity: 1;',\r\n '}'\r\n ]);\r\n\r\n const styles = {\r\n datDisabled: 'color: #606060 !important; cursor: not-allowed !important;'\r\n };\r\n\r\n Object.defineProperty((window.dat || require(\"./datGUIConsole\").default).GUI.prototype, 'onGUIEvent', {\r\n get: function(){\r\n if(!this._onGUIEvent)\r\n this._onGUIEvent = [];\r\n return this._onGUIEvent;\r\n }\r\n });\r\n\r\n // update all\r\n\r\n (window.dat || require(\"./datGUIConsole\").default).GUI.prototype.updateAll = function(){\r\n var gui = this;\r\n for (var i in gui.__controllers) {\r\n var controller = gui.__controllers[i];\r\n controller.updateDisplay();\r\n }\r\n\r\n var folders = Object.values(gui.__folders);\r\n for(i = 0; i < folders.length; i++){\r\n folders[i].updateAll();\r\n }\r\n };\r\n\r\n // find\r\n\r\n (window.dat || require(\"./datGUIConsole\").default).GUI.prototype.find = function(object, property){\r\n var gui = this, controller, i;\r\n\r\n if(property){ // 2 arguments\r\n for (i = 0; i < gui.__controllers.length; i++){\r\n controller = gui.__controllers[i];\r\n if (controller.object == object && controller.property == property)\r\n return controller;\r\n }\r\n\r\n var folders = Object.values(gui.__folders);\r\n for(i = 0; i < folders.length; i++){\r\n controller = folders[i].find(object, property);\r\n if(controller) return controller;\r\n }\r\n }\r\n else{\r\n property = object; // 1 argument\r\n\r\n var folderKeys = Object.keys(gui.__folders);\r\n for(i = 0; i < folderKeys.length; i++){\r\n var folderName = folderKeys[i];\r\n var folder = gui.__folders[folderName];\r\n if(folderName === property)\r\n return folder;\r\n }\r\n }\r\n return undefined;\r\n };\r\n\r\n // On open event\r\n //if(_this.opening !== undefined) _this.opening = _this.closed; // chadiik\r\n Object.defineProperty((window.dat || require(\"./datGUIConsole\").default).GUI.prototype, 'opening', {\r\n get: function(){\r\n return !this.closed;\r\n },\r\n\r\n set: function(value){\r\n for(var i = 0; i < this.onGUIEvent.length; i++){\r\n this.onGUIEvent[i](value ? 'open' : 'close');\r\n }\r\n }\r\n });\r\n\r\n // Disabled\r\n function blockEvent(event){\r\n event.stopPropagation();\r\n }\r\n\r\n Object.defineProperty((window.dat || require(\"./datGUIConsole\").default).controllers.Controller.prototype, \"disabled\", {\r\n get: function(){\r\n return this.domElement.hasAttribute(\"disabled\");\r\n },\r\n\r\n set: function(value){\r\n if (value){\r\n this.domElement.setAttribute(\"disabled\", \"disabled\");\r\n this.domElement.addEventListener(\"click\", blockEvent, true);\r\n Element.AddStyle(this.domElement.parentElement.parentElement, styles.datDisabled);\r\n }\r\n else{\r\n this.domElement.removeAttribute(\"disabled\");\r\n this.domElement.removeEventListener(\"click\", blockEvent, true);\r\n Element.RemoveStyle(this.domElement.parentElement.parentElement, styles.datDisabled);\r\n }\r\n },\r\n\r\n enumerable: true\r\n });\r\n\r\n (window.dat || require(\"./datGUIConsole\").default).GUI.prototype.enable = function(object, property, value){\r\n var controller = this.find(object, property);\r\n controller.disabled = !value;\r\n };\r\n\r\n // Tooltip\r\n\r\n Object.defineProperty((window.dat || require(\"./datGUIConsole\").default).controllers.Controller.prototype, \"tooltip\", {\r\n get: function(){\r\n return this._tooltip.innerHTML;\r\n },\r\n\r\n set: function(value){\r\n if (value){\r\n if(this._tooltip === undefined) {\r\n this._tooltip = crel('span', {class: 'tooltiptext'});\r\n\r\n /**\r\n * @type {HTMLElement}\r\n */\r\n var container = this.domElement.parentElement.parentElement;\r\n container.classList.add('tooltip');\r\n container.appendChild(this._tooltip);\r\n }\r\n this._tooltip.innerHTML = value;\r\n }\r\n },\r\n\r\n enumerable: true\r\n });\r\n\r\n (window.dat || require(\"./datGUIConsole\").default).GUI.prototype.setTooltip = function(object, property, value){\r\n var controller = this.find(object, property);\r\n controller.tooltip = value;\r\n };\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/config/datGUIExtensions.js","import { epsilon, smallValue, smallValueSqrt, reduceRectangles } from \"./Math2D\";\r\nimport Region from \"./Region\";\r\n\r\nimport { debugClear, debugLog, debugRegion, sleep, format } from '../CUBDebug';\r\n\r\n/** RegionFindCallback\r\n * @callback RegionFindCallback\r\n * @param {Region} region\r\n * @returns {Object | Boolean}\r\n */\r\n\r\n/** @typedef Vec2 @property {Number} x @property {Number} y */\r\n\r\n/** @typedef Rectangle @property {Vec2} p1 @property {Vec2} p2 @property {Vec2} p3 @property {Vec2} p4 \r\n * @property {Number} weight @property {Number} weightCapacity @property {Number} stackingCapacity \r\n */\r\n\r\nconst minRegionAxis = smallValue;\r\n\r\nclass RegionsTree{\r\n /** @param {Region} root */\r\n constructor(root){\r\n this.regions = [root];\r\n }\r\n\r\n /** @param {Number} index */\r\n Get(index){\r\n return this.regions[index];\r\n }\r\n\r\n /** @param {RegionFindCallback} callback @param {*} thisArg */\r\n Find(callback, thisArg){\r\n let numRegions = this.regions.length;\r\n\r\n for(let iRegion = 0; iRegion < numRegions; iRegion++){\r\n let region = this.regions[iRegion];\r\n let search = callback.call(thisArg, region);\r\n if(search) return search;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @param {Region} region * @param {Region} fit * @returns {Boolean} false if region has been deleted */\r\n Occupy(region, fit){\r\n\r\n // Subtracts fit from region and calculates new bounding regions\r\n var newRegions = region.Subtract(fit, minRegionAxis);\r\n\r\n // Add new bounding regions if any\r\n if(newRegions) this.regions.push(...newRegions);\r\n\r\n // Check that region is still valid, otherwise remove it\r\n if(region.length < minRegionAxis){\r\n let regionIndex = this.regions.indexOf(region);\r\n this.regions.splice(regionIndex, 1);\r\n return false;\r\n }\r\n\r\n var debugUIDs = [];\r\n if(!newRegions) newRegions = [];\r\n newRegions.push(region);\r\n //console.group('Occupy');\r\n newRegions.forEach(region => {\r\n //console.log(region.ToString());\r\n debugUIDs.push(debugRegion(region, 0xffff0000, true, -1, true));\r\n });\r\n //console.groupEnd();\r\n\r\n debugClear(debugUIDs);\r\n\r\n return true;\r\n }\r\n\r\n /** @param {Number} width */\r\n ProcessRegionsPreferredX(width){\r\n let regions = this.regions,\r\n numRegions = regions.length;\r\n //let width = this.container.width;\r\n\r\n for(let iRegion = 0; iRegion < numRegions; iRegion++){\r\n let region = regions[iRegion];\r\n\r\n if(Math.abs(region.x) < smallValue) region.preferredX = 0;\r\n else if(Math.abs(region.x + region.width - width) < smallValue) region.preferredX = 1;\r\n }\r\n }\r\n\r\n /** @param {Number} width @param {Number} height */\r\n ProcessRegionsMergeExpand(width, height){\r\n let regions = this.regions,\r\n numRegions = regions.length;\r\n\r\n let toInt = 1 / smallValue;\r\n function coordID(value){\r\n return Math.floor(value * toInt);\r\n }\r\n\r\n /** @typedef Level @property {Number} y @property {Array} rectangles */\r\n /** @type {Array} */\r\n let levels = {};\r\n\r\n let neighbours = [], rectangles = [];\r\n for(let iRegion = 0; iRegion < numRegions; iRegion++){\r\n let regionA = regions[iRegion];\r\n\r\n if(regionA.weightCapacity > smallValue){\r\n neighbours.length = 0;\r\n neighbours.push(iRegion);\r\n \r\n for(let jRegion = iRegion + 1; jRegion < numRegions; jRegion++){\r\n let regionB = regions[jRegion];\r\n\r\n if(regionB.weightCapacity > smallValue && Math.abs(regionA.y - regionB.y) < smallValue){\r\n let intersects = regionA.Intersects(smallValue, regionB);\r\n if(intersects){\r\n neighbours.push(jRegion);\r\n }\r\n }\r\n }\r\n\r\n let numNeighbours = neighbours.length;\r\n if(numNeighbours > 1){\r\n rectangles.length = 0;\r\n\r\n for(let iNeighbour = 0; iNeighbour < numNeighbours; iNeighbour++){\r\n let neighbourA = regions[neighbours[iNeighbour]];\r\n\r\n for(let jNeighbour = iNeighbour + 1; jNeighbour < numNeighbours; jNeighbour++){\r\n let neighbourB = regions[neighbours[jNeighbour]];\r\n\r\n let connectedNeighbours = neighbourA.ConnectFloorRects(neighbourB);\r\n rectangles.push(...connectedNeighbours);\r\n }\r\n }\r\n\r\n if(rectangles.length > 0){\r\n let yCat = coordID(regionA.y);\r\n if(levels[yCat] === undefined) levels[yCat] = {y: regionA.y, rectangles: []};\r\n levels[yCat].rectangles.push(...rectangles);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var levelsYCats = Object.keys(levels);\r\n for(let iYCat = 0, numYCats = levelsYCats.length; iYCat < numYCats; iYCat++){\r\n /** @type {Level} */\r\n let level = levels[levelsYCats[iYCat]];\r\n let rectangles = level.rectangles;\r\n let regionY = level.y;\r\n let regionHeight = height - regionY;\r\n \r\n reduceRectangles(rectangles);\r\n for(let iRect = 0, numRects = rectangles.length; iRect < numRects; iRect++){\r\n let rect = rectangles[iRect];\r\n let rx = rect.p1.x, ry = rect.p1.y;\r\n let rw = rect.p3.x - rx, rh = rect.p3.y - ry;\r\n\r\n // Calculate preferred packing side based on center point relative to container\r\n let preferredX = (rx.x + rw / 2) < (width / 2) ? 0 : 1;\r\n let newRegion = new Region(rx, regionY, ry, rw, regionHeight, rh, 0);\r\n newRegion.SetWeights(rect.weight, rect.weightCapacity, rect.stackingCapacity);\r\n this.regions.push(newRegion);\r\n }\r\n }\r\n }\r\n\r\n ProcessRegionsForZeroRegions(){\r\n let regions = this.regions;\r\n for(let iRegion = 0; iRegion < regions.length; iRegion++){\r\n let region = regions[iRegion];\r\n if(region.width < minRegionAxis || region.height < minRegionAxis || region.length < minRegionAxis){\r\n regions.splice(iRegion, 1);\r\n iRegion--;\r\n }\r\n }\r\n }\r\n\r\n ProcessRegionsEnclosed(){\r\n var regions = this.regions;\r\n\r\n for(let iRegion = 0; iRegion < regions.length; iRegion++){\r\n let regionA = regions[iRegion];\r\n let volumeA = regionA.volume;\r\n\r\n for(let jRegion = iRegion + 1; jRegion < regions.length; jRegion++){\r\n let regionB = regions[jRegion];\r\n let volumeB = regionB.volume;\r\n\r\n if(volumeA < volumeB){\r\n // If a A is completely contained within B, remove the A\r\n if(regionB.ContainsRegion(smallValue, regionA)){\r\n regions.splice(iRegion, 1);\r\n iRegion--;\r\n break;\r\n }\r\n }\r\n else{\r\n // If a B is completely contained within A, remove the B\r\n if(regionA.ContainsRegion(smallValue, regionB)){\r\n regions.splice(jRegion, 1);\r\n jRegion--;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @param {Function} sortFunction */\r\n Sort(sortFunction){\r\n this.regions.sort(sortFunction);\r\n }\r\n}\r\n\r\nexport default RegionsTree;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/core/RegionsTree.js","import AFitTest from \"../packer/afit/AFitTest\";\r\nimport Asset from \"../components/assets/Asset\";\r\nimport RuntimeTester from \"./RuntimeTester\";\r\n\r\nfunction delay(time, callback){\r\n setTimeout(callback, time);\r\n}\r\n\r\nconst debugGeometry = new THREE.BoxBufferGeometry(1, 1, 1, 1, 1, 1);\r\nvar debugMaterial = new THREE.MeshStandardMaterial({color: 0xff7f00, transparent: true, opacity: .35});\r\nAsset.SetTextureMap('checkers.jpg', debugMaterial, 'map').then( (map) => {\r\n map.wrapS = map.wrapT = THREE.RepeatWrapping;\r\n});\r\nconst debugBox = new THREE.Mesh(debugGeometry, debugMaterial);\r\n\r\nvar tempVec = new THREE.Vector3();\r\n\r\nclass DebugBox {\r\n\r\n /**\r\n * @param {THREE.Vector3} center \r\n * @param {Number|THREE.Vector3} size \r\n */\r\n static FromCenterSize(center, size){\r\n var box = debugBox.clone();\r\n box.position.copy(center);\r\n \r\n if(size instanceof THREE.Vector3)\r\n box.scale.copy(size);\r\n else\r\n box.scale.set(size, size, size);\r\n\r\n return box;\r\n }\r\n\r\n /**\r\n * @param {THREE.Box3} box3 \r\n */\r\n static FromBox3(box3){\r\n var box = debugBox.clone();\r\n\r\n box3.getCenter(tempVec);\r\n box.position.copy(tempVec);\r\n box3.getSize(tempVec);\r\n box.scale.copy(tempVec);\r\n\r\n return box;\r\n }\r\n}\r\n\r\n/**\r\n * DebugViz\r\n */\r\n\r\nconst alphaHexMask = 256 * 256 * 256;\r\n\r\n/** @type {THREE.Object3D} */\r\nvar view;\r\n\r\n/** @type {Map} */\r\nvar debugObjects = new Map();\r\n\r\nvar tVec3 = new THREE.Vector3(),\r\n tPos = new THREE.Vector3(),\r\n tScale = new THREE.Vector3();\r\n\r\nclass DebugViz {\r\n\r\n /**\r\n * @param {THREE.Object3D} parent\r\n */\r\n static SetViewParent(parent){\r\n view = new THREE.Object3D();\r\n view.name = 'DebugViz view';\r\n view.renderOrder = Number.MAX_SAFE_INTEGER - 10;\r\n parent.add(view);\r\n }\r\n\r\n static get view(){ return view; }\r\n\r\n /**\r\n * @param {Number} x center x * @param {Number} y center y * @param {Number} z center z * @param {Number} w * @param {Number} h * @param {Number} l\r\n * @param {Number} [color] hex color\r\n * @param {Number} [duration] in milliseconds\r\n * @param {Boolean} [checkered] checkers map\r\n */\r\n static DrawVolume(x, y, z, w, h, l, color, duration, wireframe, checkered){\r\n tPos.set(x, y, z);\r\n tScale.set(w, h, l);\r\n\r\n /** @type {THREE.Mesh} */\r\n var volume = debugBox.clone();\r\n view.add(volume);\r\n\r\n volume.position.copy(tPos);\r\n volume.scale.copy(tScale);\r\n\r\n if(color){\r\n /** @type {THREE.MeshStandardMaterial} */\r\n let material = volume.material.clone();\r\n volume.material = material;\r\n material.color.setHex(color && 0xffffff);\r\n if(wireframe === true){\r\n material.wireframe = true;\r\n }\r\n else{\r\n material.opacity = Math.floor(color / alphaHexMask) / 256;\r\n material.transparent = material.opacity > 0 && material.opacity < .99;\r\n }\r\n\r\n if(!checkered){\r\n material.map = null;\r\n }\r\n else{\r\n material.map.repeat.set(10, 10);\r\n }\r\n }\r\n\r\n let uid = THREE.Math.generateUUID();\r\n debugObjects.set(uid, volume);\r\n\r\n if(duration > 0){\r\n delay(duration, function(){\r\n DebugViz.RemoveObjectByUID(uid);\r\n });\r\n }\r\n\r\n return uid;\r\n }\r\n\r\n /**\r\n * @param {string} uid \r\n */\r\n static RemoveObjectByUID(uid){\r\n var object = debugObjects.get(uid);\r\n if(object instanceof THREE.Object3D && object.parent){\r\n object.parent.remove(object);\r\n }\r\n }\r\n\r\n static ClearAll(){\r\n for(var uid of debugObjects.keys()){\r\n DebugViz.RemoveObjectByUID(uid);\r\n }\r\n }\r\n\r\n /** @param {Boolean} visible */\r\n static SetPackingSpaceVisibility(visible){\r\n Debug.app.view.packingSpaceView.view.visible = visible;\r\n }\r\n}\r\n\r\n/**\r\n * DebugViz\r\n */\r\n\r\nclass Debug {\r\n\r\n static get Runtime(){\r\n return RuntimeTester;\r\n }\r\n\r\n static MaterialEdit(callback){\r\n let objects = Debug.app.view.packResultView.cargoViews;\r\n objects.forEach(o => {\r\n let material = o.mesh.material;\r\n callback(material);\r\n material.needsUpdate = true;\r\n });\r\n }\r\n\r\n static get AFitTest(){\r\n return AFitTest;\r\n }\r\n}\r\n\r\nDebug.Box = DebugBox;\r\nDebug.Viz = DebugViz;\r\n\r\n/** @type {import('../../FreightPacker').default} */\r\nDebug.api;\r\n/** @type {import('../App').default} */\r\nDebug.app;\r\n\r\nexport default Debug;\n\n\n// WEBPACK FOOTER //\n// ./src/api/debug/Debug.js","import { epsilon, smallValue, smallValueSqrt } from \"./Math2D\";\r\nimport { Item, Container } from \"./Components\";\r\n\r\nclass PackedItem{\r\n\r\n /**\r\n * @param {Item} ref \r\n * @param {Number} x\r\n * @param {Number} y\r\n * @param {Number} z\r\n * @param {Number} packedWidth\r\n * @param {Number} packedHeight\r\n * @param {Number} packedLength\r\n * @param {Number} orientation \r\n */\r\n constructor(ref, x, y, z, packedWidth, packedHeight, packedLength, orientation){\r\n this.ref = ref;\r\n this.x = x; this.y = y; this.z = z;\r\n this.packedWidth = packedWidth; this.packedHeight = packedHeight; this.packedLength = packedLength;\r\n this.orientation = orientation;\r\n }\r\n\r\n /** @param {PackedItem} a * @param {PackedItem} b */\r\n static DepthSort(a, b){\r\n let az = a.z + a.packedLength,\r\n bz = b.z + b.packedLength;\r\n if(az + smallValue < bz) return -1;\r\n if(az > bz + smallValue) return 1;\r\n if(a.y < b.y) return -1;\r\n if(a.y > b.y) return 1;\r\n if(a.ref.volume > b.ref.volume + smallValue) return -1;\r\n if(a.ref.volume + smallValue < b.ref.volume) return 1;\r\n return 0;\r\n }\r\n\r\n /** @param {PackedItem} a * @param {PackedItem} b */\r\n static Sort(a, b){\r\n if(a.z + smallValue < b.z){\r\n if(a.z + a.packedLength > b.z && a.y > b.y) return 1;\r\n return -1;\r\n }\r\n if(b.z + smallValue < a.z){\r\n if(b.z + b.packedLength > a.z && b.y > a.y) return 1;\r\n return 1;\r\n }\r\n if(a.y < b.y) return -1;\r\n if(a.y > b.y) return 1;\r\n if(a.ref.volume > b.ref.volume + smallValue) return -1;\r\n if(a.ref.volume + smallValue < b.ref.volume) return 1;\r\n return 0;\r\n }\r\n}\r\n\r\nclass PackedContainer{\r\n /**\r\n * @param {Container} container \r\n */\r\n constructor(container){\r\n this.container = container;\r\n \r\n /** @type {Array} */\r\n this.packedItems = [];\r\n /** @type {Array} */\r\n this.unpackedItems = [];\r\n\r\n this.cumulatedWeight = 0;\r\n }\r\n\r\n /** @param {PackedItem} item */\r\n Pack(item){\r\n this.cumulatedWeight += item.ref.weight;\r\n this.packedItems.push(item);\r\n }\r\n\r\n /** @param {Item} item */\r\n Unpack(item){\r\n this.unpackedItems.push(item);\r\n }\r\n\r\n /** @param {Number} weight */\r\n WeightPass(weight){\r\n return this.cumulatedWeight + weight <= this.container.weightCapacity;\r\n }\r\n}\r\n\r\nexport {\r\n PackedItem,\r\n PackedContainer\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/core/PackedComponents.js","import Container from \"../packer/container/Container\";\r\nimport ContainerView from \"./ContainerView\";\r\nimport Logger from \"../utils/cik/Logger\";\r\nimport ContainingVolume from \"../packer/container/ContainingVolume\";\r\n\r\nconst typeofString = 'string';\r\n\r\nvar yRotation = new THREE.Matrix4().makeRotationY(-Math.PI / 2);\r\nvar tempMatrix4 = new THREE.Matrix4();\r\n\r\nclass PackingSpaceView{\r\n constructor(){\r\n this.view = new THREE.Object3D();\r\n\r\n /**\r\n * @type {Array}\r\n */\r\n this.containerViews = [];\r\n }\r\n\r\n /** \r\n * @param {Container} container\r\n */\r\n Add(container){\r\n let containerView = ContainerView.Request(container);\r\n this.view.add(containerView.view);\r\n this.containerViews.push(containerView);\r\n }\r\n\r\n Clear(){\r\n for(let i = 0; i < this.containerViews.length; i++){\r\n let cv = this.containerViews[i];\r\n this.view.remove(cv.view);\r\n }\r\n this.containerViews.length = 0;\r\n }\r\n\r\n /**\r\n * @param {string} containingVolumeUID \r\n */\r\n FindContainingVolume(containingVolumeUID){\r\n for(let iCView = 0; iCView < this.containerViews.length; iCView++){\r\n let volumes = this.containerViews[iCView].container.volumes;\r\n for(let iCVolume = 0; iCVolume < volumes.length; iCVolume++){\r\n if(volumes[iCVolume].uid === containingVolumeUID){\r\n return volumes[iCVolume];\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @param {ContainingVolume} containingVolume \r\n */\r\n GetMatrix(containingVolume){\r\n if(typeof containingVolume === typeofString) containingVolume = this.FindContainingVolume(containingVolume);\r\n tempMatrix4.identity();\r\n tempMatrix4.makeTranslation(containingVolume.position.x - containingVolume.dimensions.width / 2, containingVolume.position.y, containingVolume.position.z - containingVolume.dimensions.length / 2);\r\n //tempMatrix4.premultiply(yRotation);\r\n return tempMatrix4;\r\n }\r\n}\r\n\r\nexport default PackingSpaceView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/PackingSpaceView.js","import Container from \"../packer/container/Container\";\r\nimport Asset from \"../components/assets/Asset\";\r\nimport Logger from \"../utils/cik/Logger\";\r\nimport ContainingVolume from \"../packer/container/ContainingVolume\";\r\n\r\nclass ContainerBox{\r\n /** @param {THREE.Mesh} mesh */\r\n constructor(mesh){\r\n this.mesh = mesh;\r\n }\r\n}\r\n\r\n/**\r\n * \r\n * @param {Container} container \r\n */\r\nfunction createContainerBoxes(container){\r\n /**\r\n * @type {Map}\r\n */\r\n var boxes = new Map();\r\n\r\n container.volumes.forEach(cv => {\r\n let mesh = Asset.CreateMesh();\r\n \r\n let extent = cv.dimensions.vec3;\r\n mesh.scale.copy(extent);\r\n mesh.position.y += extent.y / 2;\r\n\r\n mesh.material = mesh.material.clone();\r\n mesh.material.color.setHex(0xffaaaa);\r\n mesh.material.transparent = true;\r\n mesh.material.opacity = .2;\r\n mesh.material.side = THREE.BackSide;\r\n mesh.material.polygonOffset = true;\r\n mesh.material.polygonOffsetFactor = 1;\r\n mesh.material.polygonOffsetUnits = 1;\r\n\r\n boxes.set(cv, new ContainerBox(mesh));\r\n });\r\n\r\n return boxes;\r\n}\r\n\r\nvar tempVec3 = new THREE.Vector3();\r\n\r\n/** @type {WeakMap} */\r\nvar views = new WeakMap();\r\n\r\nclass ContainerView {\r\n /**\r\n * \r\n * @param {Container} container \r\n * @param {THREE.Object3D} view\r\n */\r\n constructor(container, view){\r\n\r\n // Store original dimensions\r\n this.initializationBox3 = new THREE.Box3();\r\n this.initializationBox3.setFromObject(view);\r\n\r\n views.set(container, this);\r\n\r\n this.container = container;\r\n this.view = new THREE.Object3D();\r\n this.view.add(view);\r\n\r\n Asset.StandardSceneObject(this.view);\r\n Asset.ColorTemplates('Containers').Apply(this.view);\r\n\r\n this.containerBoxes = createContainerBoxes(container);\r\n for(var [cv, box] of this.containerBoxes){\r\n box.mesh.position.add(cv.position);\r\n this.view.add(box.mesh);\r\n }\r\n\r\n }\r\n\r\n //** @param {Input} input @param {Camera} cameraController */\r\n /*InitSliderBoxes(input, cameraController, changeCallback, stopCallback){\r\n for(var box of this.containerBoxes.values()){\r\n box.UseInput(input, cameraController);\r\n box.On(sliderSignals.change, changeCallback);\r\n box.On(sliderSignals.stop, stopCallback);\r\n }\r\n }*/\r\n\r\n /**\r\n * @param {Boolean} visible\r\n * @param {THREE.Vector3} [padding]\r\n */\r\n PlatformVisibility(visible, padding){\r\n\r\n if(visible && this.platformMesh === undefined){\r\n\r\n if(padding === undefined) padding = new THREE.Vector3(0, .01, 0);\r\n \r\n this.initializationBox3.getSize(tempVec3);\r\n\r\n let planeGeom = new THREE.BoxGeometry(tempVec3.x + padding.x * 2, padding.y, tempVec3.z + padding.z * 2, 1, 1, 1);\r\n let planeMaterial = new Asset.CreateSolidMaterialMatte(Asset.ColorTemplates('Containers').Apply(0xffffff));\r\n this.platformMesh = new THREE.Mesh(planeGeom, planeMaterial);\r\n Asset.ReceiveShadow(this.platformMesh);\r\n\r\n this.platformMesh.position.y = .001;\r\n this.view.add(this.platformMesh);\r\n }\r\n\r\n this.platformMesh.visible = visible;\r\n }\r\n\r\n /**\r\n * @param {Container} container\r\n * @returns {ContainerView}\r\n */\r\n static Request(container){\r\n var view = views.get(container);\r\n if( !view ){\r\n let boxes = createContainerBoxes(container);\r\n let object3d = new THREE.Object3D();\r\n for(var [cv, box] of boxes){\r\n box.mesh.position.add(cv.position);\r\n object3d.add(box.mesh);\r\n }\r\n\r\n view = new ContainerView(container, object3d);\r\n views.set(container, view);\r\n Logger.Warn('View not found for:', container);\r\n }\r\n return view;\r\n }\r\n}\r\n\r\nexport default ContainerView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/ContainerView.js","import Utils from '../utils/cik/Utils';\r\nimport CargoListView from './CargoListView';\r\nimport CargoView from './CargoView';\r\nimport Pool from '../utils/cik/Pool';\r\nimport PackedCargoBoxView from './PackedCargoBoxView';\r\nimport PackingSpaceView from './PackingSpaceView';\r\nimport Tween from '../utils/cik/Tween';\r\nimport Packer from '../packer/Packer';\r\nimport BoxEntry from '../components/box/BoxEntry';\r\nimport Signaler from '../utils/cik/Signaler';\r\n\r\nfunction sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n\r\n/**\r\n * @typedef {Object} PackResultViewParams\r\n * @property {import('../UX').default} ux\r\n * @property {Number} animationDuration\r\n */\r\n\r\n /** @type {PackResultViewParams} */\r\nconst defaultParams = {\r\n animationDuration: 1\r\n};\r\n\r\n/**\r\n * @param {CargoView} cargoView\r\n * @returns {PackedCargoBoxView}\r\n */\r\nfunction poolNewFN(cargoView){\r\n //console.log('pool new', cargoView);\r\n let packedCargoView = new PackedCargoBoxView(cargoView.entry);\r\n packedCargoView.Extend(cargoView);\r\n return packedCargoView;\r\n}\r\n\r\n/**\r\n * @param {PackedCargoBoxView} object \r\n * @param {CargoView} cargoView\r\n * @returns {PackedCargoBoxView}\r\n */\r\nfunction poolResetFN(object, cargoView){\r\n //console.log('pool reset', cargoView);\r\n object.Extend(cargoView);\r\n return object;\r\n}\r\n\r\nfunction getOrientationAngles(orientation){\r\n switch(orientation){\r\n case 'xyz': return [0, 0, 0];\r\n case 'xzy': return [90, 0, 0];\r\n case 'yxz': return [0, 0, 90];\r\n case 'yzx': return [90, 0, 90];\r\n case 'zxy': return [90, -90, 0];\r\n case 'zyx': return [0, -90, 0];\r\n }\r\n}\r\n\r\n/**\r\n * @param {string} orientation \r\n */\r\nfunction getOrientationEuler(orientation){\r\n const rad = Math.PI / 180.0;\r\n let a = getOrientationAngles(orientation);\r\n return new THREE.Euler(a[0] * rad, a[1] * rad, a[2] * rad);\r\n}\r\n\r\nvar tempBox = new THREE.Box3();\r\nvar tempVec = new THREE.Vector3();\r\n\r\nconst signals = {\r\n packVizStart: 'packVizStart',\r\n packVizEnd: 'packVizEnd',\r\n cargoVizCreate: 'cargoVizCreate',\r\n cargoVizPack: 'cargoVizPack',\r\n cargoVizUnpack: 'cargoVizUnpack'\r\n};\r\n\r\nclass PackResultView extends Signaler{\r\n /**\r\n * @param {CargoListView} cargoListView\r\n * @param {PackingSpaceView} packingSpaceView\r\n * @param {PackResultViewParams} params \r\n */\r\n constructor(cargoListView, packingSpaceView, params){\r\n\r\n super();\r\n\r\n this.cargoListView = cargoListView;\r\n this.packingSpaceView = packingSpaceView;\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n\r\n /** @type {Array} */\r\n this.animatingViews = [];\r\n\r\n if(typeof window.Pizzicato !== 'undefined'){\r\n let musipack = new (require('./components/Musipack').default)(this);\r\n }\r\n }\r\n\r\n /** \r\n * @param {Packer.PackingResult} packingResult\r\n */\r\n async DisplayPackingResult(packingResult){\r\n\r\n this.Dispatch(signals.packVizStart, packingResult);\r\n\r\n if(packingResult.packed.length < 1) return;\r\n\r\n let scope = this;\r\n let units = this.params.ux.params.units;\r\n \r\n let containingVolume = packingResult.packed[0].containingVolume;\r\n let matrix = this.packingSpaceView.GetMatrix(containingVolume);\r\n let offset = new THREE.Vector3();\r\n let orientation = new THREE.Quaternion();\r\n let scale = new THREE.Vector3();\r\n matrix.decompose(offset, orientation, scale);\r\n\r\n /** @type {Map} */\r\n let packedQuantities = new Map();\r\n\r\n let animatingViews = this.animatingViews;\r\n let view = this.view;\r\n //let onTweenComplete = this.OnCargoFirstTweenComplete.bind(this);\r\n let zEntry = containingVolume.dimensions.length;\r\n let numPackedItems = packingResult.packed.length;\r\n let delayPerItem = this.params.animationDuration * 1000 / numPackedItems;\r\n for(let i = 0; i < numPackedItems; i++){\r\n let item = packingResult.packed[i];\r\n let cargoViewTemplate = this.cargoListView.GetTemplate(item.entry);\r\n\r\n let packedQuantity = packedQuantities.get(cargoViewTemplate);\r\n let totalQuantity = cargoViewTemplate.entry.quantity;\r\n if(packedQuantity === undefined) packedQuantities.set(cargoViewTemplate, packedQuantity = 0);\r\n packedQuantities.set(cargoViewTemplate, ++packedQuantity);\r\n let textColor = packedQuantity === totalQuantity ? 'rgb(255, 255, 255)' : 'rgb(255, 0, 0)';\r\n this.cargoListView.UpdateLabel(cargoViewTemplate, packedQuantity + '/' + totalQuantity, textColor);\r\n\r\n let packedCargoView = this.pool.Request(cargoViewTemplate);\r\n\r\n this.cargoViews.push(packedCargoView);\r\n\r\n let rotation = getOrientationEuler(item.orientation);\r\n packedCargoView.SetRotationAngles(rotation.x, rotation.y, rotation.z);\r\n\r\n let x = item.position.x + offset.x,\r\n y = item.position.y + offset.y,\r\n z = item.position.z + offset.z;\r\n\r\n let posTweenCombo = Tween.Combo.RequestN(Tween.functions.ease.easeOutQuad, .5,\r\n x, 0,\r\n y, 0,\r\n zEntry, z - zEntry\r\n );\r\n\r\n function onTweenComplete(tween){\r\n scope.Dispatch(signals.cargoVizPack, item);\r\n scope.OnCargoFirstTweenComplete(tween);\r\n }\r\n \r\n posTweenCombo.extraData = packedCargoView;\r\n posTweenCombo.Hook(packedCargoView.position, 'x', 'y', 'z');\r\n posTweenCombo.onComplete = onTweenComplete;\r\n posTweenCombo.Update(0);\r\n animatingViews.push(posTweenCombo);\r\n \r\n view.add(packedCargoView.view);\r\n await sleep(delayPerItem);\r\n }\r\n\r\n await sleep(500);\r\n\r\n let unpackedOffset = 6 * units;\r\n for(let i = 0, numUnpackedItems = packingResult.unpacked.length; i < numUnpackedItems; i++){\r\n let item = packingResult.unpacked[i];\r\n let cargoViewTemplate = this.cargoListView.GetTemplate(item.entry);\r\n\r\n let totalQuantity = cargoViewTemplate.entry.quantity;\r\n if(packedQuantities.has(cargoViewTemplate) === false){\r\n let textColor = false ? 'rgb(255, 255, 255)' : 'rgb(255, 0, 0)';\r\n this.cargoListView.UpdateLabel(cargoViewTemplate, '0/' + totalQuantity, textColor);\r\n }\r\n\r\n if(i === 0) unpackedOffset += item.entry.dimensions.width / 2;\r\n\r\n for(let j = 0; j < item.unpackedQuantity; j++){\r\n let packedCargoView = this.pool.Request(cargoViewTemplate);\r\n\r\n this.cargoViews.push(packedCargoView);\r\n \r\n let x = containingVolume.dimensions.width * 1.5 + unpackedOffset + offset.x,\r\n y = item.entry.dimensions.height / 2 + offset.y,\r\n z = item.entry.dimensions.length * j + offset.z;\r\n\r\n let posTweenCombo = Tween.Combo.RequestN(Tween.functions.ease.easeOutQuad, .5,\r\n x, 0,\r\n y, 0,\r\n zEntry, z - zEntry\r\n );\r\n\r\n function onTweenComplete(tween){\r\n scope.Dispatch(signals.cargoVizUnpack, item);\r\n scope.OnCargoFirstTweenComplete(tween);\r\n }\r\n \r\n posTweenCombo.extraData = packedCargoView;\r\n posTweenCombo.Hook(packedCargoView.position, 'x', 'y', 'z');\r\n posTweenCombo.onComplete = onTweenComplete;\r\n posTweenCombo.Update(0);\r\n animatingViews.push(posTweenCombo);\r\n \r\n view.add(packedCargoView.view);\r\n await sleep(delayPerItem * .5);\r\n }\r\n\r\n unpackedOffset += item.entry.dimensions.width + 6 * units;\r\n }\r\n }\r\n\r\n /** @param {Tween|Tween.Combo} tween */\r\n OnCargoFirstTweenComplete(tween){\r\n let packedCargoView = tween.extraData;\r\n this.OnTweenComplete(tween);\r\n let scaleTweenCombo = Tween.Combo.RequestN(Tween.functions.special.pingPong, .1, \r\n 1, .1,\r\n 1, .1,\r\n 1, .1\r\n );\r\n \r\n scaleTweenCombo.extraData = packedCargoView;\r\n scaleTweenCombo.Hook(packedCargoView.view.scale, 'x', 'y', 'z');\r\n scaleTweenCombo.onComplete = this.OnTweenComplete.bind(this);;\r\n scaleTweenCombo.Update(0);\r\n this.animatingViews.push(scaleTweenCombo);\r\n }\r\n\r\n /** @param {Tween|Tween.Combo} tween */\r\n OnTweenComplete(tween){\r\n let packedCargoView = tween.extraData;\r\n packedCargoView.view.scale.set(1, 1, 1);\r\n let index = this.animatingViews.indexOf(tween);\r\n if(index != -1){\r\n this.animatingViews.splice(index, 1);\r\n }\r\n tween.Unhook();\r\n tween.Return();\r\n }\r\n\r\n /** @param {string} entryUID */\r\n SelectEntry(entryUID){\r\n if(!entryUID){\r\n this.DisableHighlights();\r\n }\r\n else{\r\n this.Highlight(entryUID);\r\n }\r\n }\r\n\r\n DisableHighlights(){\r\n for(let i = 0, numCargoViews = this.cargoViews.length; i < numCargoViews; i++){\r\n this.cargoViews[i].focus = 1;\r\n }\r\n }\r\n\r\n /** @param {string} entryUID */\r\n Highlight(entryUID){\r\n for(let i = 0, numCargoViews = this.cargoViews.length; i < numCargoViews; i++){\r\n let cargoView = this.cargoViews[i];\r\n\r\n let cvEntry = cargoView.entry;\r\n if(cvEntry.uid === entryUID){\r\n cargoView.focus = 1.75;\r\n }\r\n else{\r\n cargoView.focus = .25;\r\n }\r\n }\r\n }\r\n\r\n /** @param {Number} value */\r\n Slice(value){\r\n if(value >= 1){\r\n this.view.children.forEach(child => {\r\n child.visible = true;\r\n });\r\n return;\r\n }\r\n\r\n let minY = Number.MAX_SAFE_INTEGER, maxY = Number.MIN_SAFE_INTEGER;\r\n this.view.children.forEach(child => {\r\n tempBox.setFromObject(child);\r\n tempBox.getSize(tempVec);\r\n let halfHeight = tempVec.y / 2;\r\n tempBox.getCenter(tempVec);\r\n let low = tempVec.y - halfHeight;\r\n let high = tempVec.y + halfHeight;\r\n if(low < minY) minY = low;\r\n if(high > maxY) maxY = high;\r\n });\r\n\r\n let y = minY + value * (maxY - minY);\r\n\r\n //console.log('slice ' + y.toFixed(2) + ' between ' + minY.toFixed(2) + ' and ' + maxY.toFixed(2));\r\n\r\n this.view.children.forEach(child => {\r\n tempBox.setFromObject(child);\r\n tempBox.getSize(tempVec);\r\n let halfHeight = tempVec.y / 2;\r\n tempBox.getCenter(tempVec);\r\n let low = tempVec.y - halfHeight;\r\n\r\n if(low < y) child.visible = true;\r\n else child.visible = false;\r\n });\r\n }\r\n\r\n Clear(){\r\n this.animatingViews.length = 0;\r\n this.cargoViews.length = 0;\r\n while(this.view.children.length > 0) this.view.remove(this.view.children[this.view.children.length - 1]);\r\n }\r\n\r\n Update(){\r\n this.animatingViews.forEach(animatingView => {\r\n animatingView.Update();\r\n });\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nexport default PackResultView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/PackResultView.js","import { Element, styles } from \"../../utils/cik/config/UIUtils\";\r\nimport Signaler from \"../../utils/cik/Signaler\";\r\nimport Asset from \"../../components/assets/Asset\";\r\nimport Utils from \"../../utils/cik/Utils\";\r\n\r\n//#region crel.js\r\n//Copyright (C) 2012 Kory Nunn\r\n\r\n//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\n//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n//THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n/*\r\n\r\n This code is not formatted for readability, but rather run-speed and to assist compilers.\r\n\r\n However, the code's intention should be transparent.\r\n\r\n\r\n*/\r\n\r\nvar fn = 'function',\r\n obj = 'object',\r\n nodeType = 'nodeType',\r\n textContent = 'textContent',\r\n setAttribute = 'setAttribute',\r\n attrMapString = 'attrMap',\r\n isNodeString = 'isNode',\r\n isElementString = 'isElement',\r\n d = typeof document === obj ? document : {},\r\n isType = function(a, type){\r\n return typeof a === type;\r\n },\r\n isNode = typeof Node === fn ? function (object) {\r\n return object instanceof Node;\r\n } :\r\n // in IE <= 8 Node is an object, obviously..\r\n function(object){\r\n return object &&\r\n isType(object, obj) &&\r\n (nodeType in object) &&\r\n isType(object.ownerDocument,obj);\r\n },\r\n isElement = function (object) {\r\n return crel[isNodeString](object) && object[nodeType] === 1;\r\n },\r\n isArray = function(a){\r\n return a instanceof Array;\r\n },\r\n appendChild = function(element, child) {\r\n if (isArray(child)) {\r\n child.map(function(subChild){\r\n appendChild(element, subChild);\r\n });\r\n return;\r\n }\r\n if(!crel[isNodeString](child)){\r\n child = d.createTextNode(child);\r\n }\r\n element.appendChild(child);\r\n };\r\nfunction crel(){\r\n var args = arguments, //Note: assigned to a variable to assist compilers. Saves about 40 bytes in closure compiler. Has negligable effect on performance.\r\n element = args[0],\r\n child,\r\n settings = args[1],\r\n childIndex = 2,\r\n argumentsLength = args.length,\r\n attributeMap = crel[attrMapString];\r\n element = crel[isElementString](element) ? element : d.createElement(element);\r\n // shortcut\r\n if(argumentsLength === 1){\r\n return element;\r\n }\r\n if(!isType(settings,obj) || crel[isNodeString](settings) || isArray(settings)) {\r\n --childIndex;\r\n settings = null;\r\n }\r\n // shortcut if there is only one child that is a string\r\n if((argumentsLength - childIndex) === 1 && isType(args[childIndex], 'string') && element[textContent] !== undefined){\r\n element[textContent] = args[childIndex];\r\n }else{\r\n for(; childIndex < argumentsLength; ++childIndex){\r\n child = args[childIndex];\r\n if(child == null){\r\n continue;\r\n }\r\n if (isArray(child)) {\r\n for (var i=0; i < child.length; ++i) {\r\n appendChild(element, child[i]);\r\n }\r\n } else {\r\n appendChild(element, child);\r\n }\r\n }\r\n }\r\n for(var key in settings){\r\n if(!attributeMap[key]){\r\n if(isType(settings[key],fn)){\r\n element[key] = settings[key];\r\n }else{\r\n element[setAttribute](key, settings[key]);\r\n }\r\n }else{\r\n var attr = attributeMap[key];\r\n if(typeof attr === fn){\r\n attr(element, settings[key]);\r\n }else{\r\n element[setAttribute](attr, settings[key]);\r\n }\r\n }\r\n }\r\n return element;\r\n}\r\n// Used for mapping one kind of attribute to the supported version of that in bad browsers.\r\ncrel[attrMapString] = {};\r\ncrel[isElementString] = isElement;\r\ncrel[isNodeString] = isNode;\r\nif(typeof Proxy !== 'undefined'){\r\n crel.proxy = new Proxy(crel, {\r\n get: function(target, key){\r\n !(key in crel) && (crel[key] = crel.bind(null, key));\r\n return crel[key];\r\n }\r\n });\r\n}\r\n//#endregion\r\n\r\nfunction numberFormatDefault(n){ return n; }\r\n\r\nfunction numberFormat(n, d){\r\n if(n > Number.MAX_SAFE_INTEGER - 2) return 'MAX';\r\n let nStr = Math.round(n) !== n ? n.toFixed(d) : n;\r\n return nStr;\r\n}\r\n\r\n/** @typedef FormatParams @property {Function} nf number formatting function */\r\n/** @type {FormatParams} */\r\nconst defaultFormatParams = {\r\n nf: numberFormatDefault\r\n};\r\n\r\n/** @param {string} str string with (at) symbol an argument placeholder @param {FormatParams} params @param {Array<*>} args */\r\nfunction format(str, params, ...args){\r\n params = Utils.AssignUndefined(params, defaultFormatParams);\r\n let index = 0;\r\n while( (index = str.indexOf('@', index)) !== -1 ){\r\n if(str[index - 1] !== '\\\\'){\r\n let a = args.shift();\r\n if(typeof a === 'number') a = params.nf(a);\r\n str = str.replace('@', a);\r\n }\r\n index += 1;\r\n }\r\n return str;\r\n}\r\n\r\nElement.CreateCSS([\r\n]);\r\n\r\nconst signals = {\r\n orthoViewSelected: 'orthoViewSelected'\r\n};\r\n\r\nconst orthoviews = {\r\n home: 'home',\r\n top: 'top',\r\n front: 'front',\r\n side: 'side'\r\n};\r\n\r\nclass DomUI extends Signaler{\r\n /**\r\n * \r\n * @param {HTMLDivElement} containerDiv \r\n * @param {UX} ux \r\n */\r\n constructor(containerDiv, ux){\r\n super();\r\n \r\n /** @type {HTMLDivElement} */\r\n //this.domElement = crel('div', {style: 'display: inline-block; position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;'});\r\n //containerDiv.appendChild(this.domElement);\r\n this.domElement = containerDiv;\r\n this.ux = ux;\r\n\r\n /** @type {HTMLDivElement} */\r\n //this.sideBar = crel('div', {style: 'float: right; right: 0px; width: 50%; height: 100%;'});\r\n //this.domElement.appendChild(this.sideBar);\r\n }\r\n\r\n CreateOrthoViewsIcons(){\r\n let scope = this;\r\n let texturesPath = Asset.resources.texturesPath;\r\n\r\n let icons = [\r\n {url: 'orthoviews-map.png', type: orthoviews.home},\r\n {url: 'orthoviews-map.png', type: orthoviews.top},\r\n {url: 'orthoviews-map.png', type: orthoviews.front},\r\n {url: 'orthoviews-map.png', type: orthoviews.side}\r\n ];\r\n\r\n /** @type {HTMLDivElement} */\r\n //this.orthoViewsIcons = crel('div', {style: 'display: inline-block; float: right; right: 0px; width: 100%; height: 100%;'});\r\n //this.sideBar.appendChild(this.orthoViewsIcons);\r\n\r\n const dimensions = {x: 52, y: 52};\r\n const margin = {x: 16, y: 16};\r\n const padding = 8;\r\n\r\n function dispatch(icon){\r\n scope.Dispatch(signals.orthoViewSelected, icon.type);\r\n }\r\n\r\n for(let i = 0; i < icons.length; i++){\r\n let icon = icons[i];\r\n\r\n let top = i * (dimensions.y + padding) + margin.y;\r\n let right = margin.x;\r\n let imageURL = texturesPath + icon.url;\r\n let style = format(\r\n 'cursor: pointer; display: block; float: right; position: absolute; background-size: 200%; background-position: 0% @%; background-image: url(\"@\"); width: @px; height: @px; right: @px; top: @px;', {\r\n nf: function(n){\r\n return Math.floor(n);\r\n }\r\n }, \r\n i / (icons.length - 1) * 100, imageURL, dimensions.x, dimensions.y, right, top);\r\n \r\n /** @type {HTMLDivElement} */\r\n let div = crel('div', {style: style});\r\n this.domElement.appendChild(div);\r\n\r\n div.onmouseover = function(){\r\n div.style.backgroundPositionX = '100%';\r\n }\r\n\r\n div.onmouseout = function(){\r\n div.style.backgroundPositionX = '0%';\r\n }\r\n\r\n div.onclick = function(e){\r\n e.preventDefault();\r\n dispatch(icon);\r\n };\r\n }\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n\r\n static get orthoviews(){\r\n return orthoviews;\r\n }\r\n}\r\n\r\nexport default DomUI;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/dom/DomUI.js","import Logger from '../utils/cik/Logger';\r\nimport BoxEntry from './box/BoxEntry';\r\nimport Dimensions from './box/Dimensions';\r\nimport LightDispatcher from './LightDispatcher';\r\nimport App from '../App';\r\nimport CargoList from '../packer/CargoList';\r\nimport CargoBoxView from '../view/CargoBoxView';\r\nimport Pool from '../utils/cik/Pool';\r\n\r\nconst epsilon = Math.pow(2, -52);\r\nconst numberType = 'number';\r\n\r\nconst _cargoList = Symbol('cargoList');\r\n\r\nfunction poolNewFN(){\r\n return new BoxEntry();\r\n}\r\n/** @param {BoxEntry} boxEntry */\r\nfunction poolResetFN(boxEntry){\r\n return boxEntry;\r\n}\r\nvar boxEntryPool = new Pool(poolNewFN, poolResetFN);\r\n\r\nconst signals = {\r\n show: 'show',\r\n hide: 'hide',\r\n insert: 'insert',\r\n modify: 'modify',\r\n remove: 'remove'\r\n};\r\n\r\n/** Renews entry: modify uid and color\r\n * @param {BoxEntry} boxEntry */\r\nfunction renewBoxEntry(boxEntry){\r\n boxEntry.SetUID();\r\n boxEntry.Description('color', CargoBoxView.GetNextColor().getHex());\r\n}\r\n\r\n/**\r\n * @typedef {Object} CargoInputParams\r\n * @property {import('../UX').default} ux\r\n */\r\n\r\n/**\r\n * Cubic volumes entry\r\n */\r\nclass CargoInput extends LightDispatcher {\r\n\r\n /**\r\n * @param {CargoInputParams} params \r\n */\r\n constructor(params){\r\n super();\r\n\r\n this.params = params;\r\n }\r\n\r\n /** @ignore ignore */\r\n _Bind(value){\r\n /** @type {App} */\r\n let app = value;\r\n\r\n this[_cargoList] = app.packer.cargoList;\r\n }\r\n\r\n /** Creates a new BoxEntry, required for inputs. (Can be reused) */\r\n CreateBoxEntry(){\r\n let boxEntry = new BoxEntry();\r\n renewBoxEntry(boxEntry);\r\n return boxEntry;\r\n }\r\n\r\n /** @param {string} entryUID @returns {BoxEntry} a copy of the entry if it exists */\r\n GetEntry(entryUID){\r\n /** @type {CargoList} */\r\n let cargoList = this[_cargoList];\r\n let entry = cargoList.GetEntry(entryUID);\r\n let entryMirror = boxEntryPool.Request();\r\n entryMirror.Copy(entry);\r\n return entry;\r\n }\r\n\r\n /** @returns {Array} an array of copies of all entries */\r\n GetEntries(){\r\n /** @type {CargoList} */\r\n let cargoList = this[_cargoList];\r\n let entries = [];\r\n cargoList.groups.forEach(value => {\r\n let entryMirror = boxEntryPool.Request();\r\n entryMirror.Copy(value.entry);\r\n entries.push(entryMirror);\r\n });\r\n\r\n return entries;\r\n }\r\n\r\n /**\r\n * Return BoxEntry objects to object pool (less memory usage)\r\n * @param {BoxEntry | Array} objects \r\n */\r\n Recycle(objects){\r\n if(objects instanceof Array){\r\n objects.forEach( (object) => {\r\n if(object instanceof BoxEntry) boxEntryPool.Return(object);\r\n });\r\n }\r\n else if(objects instanceof BoxEntry){\r\n boxEntryPool.Return(objects);\r\n }\r\n }\r\n\r\n /** Shows/updates entry 3D display\r\n * @param {BoxEntry} entry \r\n * @returns {Boolean}\r\n */\r\n Show(entry){\r\n if(BoxEntry.Assert(entry)){\r\n try{\r\n this.Dispatch(signals.show, entry);\r\n return true;\r\n }\r\n catch(error){\r\n Logger.Warn('Error in CargoInput.Show, error/entry:', error, entry);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n Logger.Warn('BoxEntry.Assert failed in CargoInput.Show, entry:', entry);\r\n return false;\r\n }\r\n\r\n /** Hides entry 3D display */\r\n Hide(){\r\n this.Dispatch(signals.hide);\r\n }\r\n\r\n /** Adds a new entry and obtain its uid\r\n * @param {BoxEntry} entry\r\n * @returns {Number|Boolean} uid or false if error\r\n */\r\n Add(entry){\r\n if(BoxEntry.Assert(entry)){\r\n\r\n if( Dimensions.IsVolume(entry.dimensions.Abs()) === false ){\r\n Logger.Warn('CargoInput.Add, entry rejected, dimensions != Volume:', entry.dimensions);\r\n return false;\r\n }\r\n\r\n try{\r\n let commitedEntry = entry.Clone();\r\n let uid = commitedEntry.SetUID();\r\n \r\n renewBoxEntry(entry);\r\n\r\n this.Dispatch(signals.insert, commitedEntry);\r\n return uid;\r\n }\r\n catch(error){\r\n Logger.Warn('Error in CargoInput.Add, error/entry:', error, entry);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n Logger.Warn('BoxEntry.Assert failed in CargoInput.Add, entry:', entry);\r\n return false;\r\n }\r\n\r\n /** Modify an existing BoxEntry, referenced by its uid, using a modifed template\r\n * @param {string} entryUID\r\n * @param {BoxEntry} boxEntry\r\n * @returns {Boolean} success\r\n */\r\n Modify(entryUID, boxEntry){\r\n let existing = this.GetEntry(entryUID);\r\n if(!existing){\r\n Logger.Warn('CargoInput.Modify, entry not found for:', entryUID);\r\n return false;\r\n }\r\n\r\n if(BoxEntry.Assert(boxEntry)){\r\n\r\n if( Dimensions.IsVolume(boxEntry.dimensions.Abs()) === false ){\r\n Logger.Warn('CargoInput.Modify, entry rejected, dimensions != Volume:', boxEntry);\r\n return false;\r\n }\r\n\r\n try{\r\n existing.Copy(boxEntry);\r\n\r\n this.Dispatch(signals.modify, existing);\r\n return true;\r\n }\r\n catch(error){\r\n Logger.Warn('Error in CargoInput.Modify, error/entry:', error, boxEntry);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n Logger.Warn('BoxEntry.Assert failed in CargoInput.Modify, entry:', boxEntry);\r\n return false;\r\n }\r\n\r\n /** Removes an existing box entry\r\n * @param {string} entryUID\r\n * @returns {Boolean} success\r\n */\r\n Remove(entryUID){\r\n \r\n /** @type {CargoList} */\r\n let cargoList = this[_cargoList];\r\n let existing = cargoList.GetEntry(entryUID);\r\n \r\n if(!existing){\r\n Logger.Warn('CargoInput.Remove, entry not found for:', entryUID);\r\n return false;\r\n }\r\n\r\n this.Dispatch(signals.remove, existing);\r\n return true;\r\n }\r\n\r\n /** Enumeration of dispatched types */\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nCargoInput.BoxEntry = BoxEntry;\r\n\r\nexport default CargoInput;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/CargoInput.js","import Container from \"../packer/container/Container\";\r\nimport PackingSpace from \"../packer/PackingSpace\";\r\nimport ContainerView from \"../view/ContainerView\";\r\nimport Asset from \"./assets/Asset\";\r\nimport LightDispatcher from \"./LightDispatcher\";\r\nimport Logger from \"../utils/cik/Logger\";\r\nimport ContainingVolume from \"../packer/container/ContainingVolume\";\r\n\r\n/**\r\n * @typedef PackingSpaceJSON\r\n * @property {*} jsonObject.view json data\r\n * @property {Container} jsonObject.container json data\r\n */\r\n\r\nconst signals = {\r\n containerLoaded: 'containerLoaded',\r\n sliderValueChange: 'sliderValueChange',\r\n sliderValueStop: 'sliderValueStop'\r\n};\r\n\r\n/**\r\n * @typedef {Object} PackingSpaceInputParams\r\n * @property {import('../UX').default} ux\r\n */\r\n\r\n/** @param {Container} container @param {THREE.Object3D} model */\r\nfunction createContainerView(container, model, units){\r\n let containerView;\r\n if(model){\r\n containerView = new ContainerView(container, model);\r\n }\r\n else{\r\n containerView = ContainerView.Request(container);\r\n }\r\n \r\n let padding = 60 * units;\r\n let thickness = 2 * units;\r\n containerView.PlatformVisibility(true, new THREE.Vector3(padding, thickness, padding));\r\n}\r\n\r\nclass PackingSpaceInput extends LightDispatcher {\r\n /**\r\n * @param {PackingSpaceInputParams} params \r\n */\r\n constructor(params){\r\n super();\r\n\r\n this.params = params;\r\n\r\n this.packingSpace = new PackingSpace();\r\n }\r\n\r\n /** @ignore ignore */\r\n _Bind(value){\r\n /** @type {App} */\r\n let app = value;\r\n }\r\n\r\n /**\r\n * Creates a dummy container, get an uid for later changes (or false on error)\r\n * @param {Number} width\r\n * @param {Number} length\r\n * @param {Number} height\r\n * @param {Number} weightCapacity\r\n * @returns {Number|Boolean} uid or false if error\r\n */\r\n FromInput(width, length, height, weightCapacity){\r\n let container = new Container();\r\n\r\n let containingVolume = new ContainingVolume(container);\r\n containingVolume.dimensions.Set(width, length, height);\r\n containingVolume.weightCapacity = weightCapacity;\r\n\r\n container.Add(containingVolume);\r\n\r\n let units = this.params.ux.params.units;\r\n createContainerView(container, null, units);\r\n\r\n this.packingSpace.AddContainer(container);\r\n \r\n this.Dispatch(signals.containerLoaded, container);\r\n return container.uid;\r\n }\r\n\r\n /**\r\n * Load packing config, get an uid for later changes (or false on error)\r\n * @param {PackingSpaceJSON} jsonObject \r\n * @returns {Number|Boolean} uid or false if error\r\n */\r\n Load(jsonObject){\r\n\r\n /** @type {PackingSpaceJSON} jsonObject */\r\n let data;\r\n try{\r\n data = typeof jsonObject === 'string' ? JSON.parse(jsonObject) : jsonObject;\r\n }\r\n catch(error){\r\n Logger.Warn('Error in PackingSpaceInput.Load, error/jsonObject:', error, jsonObject);\r\n return false;\r\n }\r\n\r\n if(data.container){\r\n let container;\r\n try{\r\n container = Container.FromJSON(data.container);\r\n }\r\n catch(error){\r\n Logger.Warn('Error in PackingSpaceInput.Load, error/jsonObject.container:', error, data.container);\r\n return false;\r\n }\r\n\r\n if(!container.uid) container.SetUID();\r\n let uid = container.uid;\r\n \r\n let model;\r\n if(data.view){\r\n try{\r\n model = Asset.FromJSON(data.view);\r\n }\r\n catch(error){\r\n Logger.Warn('Error in PackingSpaceInput.Load, error/jsonObject.view:', error, data.view);\r\n return false;\r\n }\r\n }\r\n\r\n let units = this.params.ux.params.units;\r\n createContainerView(container, model, units);\r\n\r\n this.packingSpace.AddContainer(container);\r\n\r\n this.Dispatch(signals.containerLoaded, container);\r\n return uid;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Enumeration of dispatched types */\r\n static get signals(){\r\n return signals;\r\n }\r\n\r\n}\r\n\r\nexport default PackingSpaceInput;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/PackingSpaceInput.js","import LightDispatcher from \"./LightDispatcher\";\r\nimport Packer from \"../packer/Packer\";\r\nimport Utils from \"../utils/cik/Utils\";\r\n\r\n/** @typedef {import('../packer/Packer').SolverParams} SolverParams */\r\n\r\n/** @typedef {import('../packer/Packer').CUBParams} CUBParams */\r\n\r\nclass ResultSpace{\r\n /** @param {string} uid */\r\n constructor(uid){\r\n this.uid = uid;\r\n }\r\n}\r\n\r\nclass ResultEntry{\r\n /** @param {string} uid @param {ResultSpace} space @param {Number} quantity */\r\n constructor(uid, space, quantity){\r\n this.uid = uid;\r\n this.space = space;\r\n this.quantity = quantity || 0;\r\n }\r\n}\r\n\r\nclass PackingResult{\r\n constructor(){\r\n /** @type {Array} */\r\n this.packingSpaces = [];\r\n /** @type {Array} */\r\n this.packed = [];\r\n /** @type {Array} */\r\n this.unpacked = [];\r\n\r\n this.totalPacked = 0;\r\n this.totalUnpacked = 0;\r\n /** algorithm runtime in seconds */\r\n this.solveDuration = 1;\r\n }\r\n}\r\n\r\n/** @param {Packer.PackingResult} packingResult */\r\nfunction toInterfaceResults(packingResult){\r\n let result = new PackingResult();\r\n \r\n /** @param {string} containerUID */\r\n function getSpace(containerUID){\r\n for(let i = 0; i < result.packingSpaces.length; i++){\r\n if(result.packingSpaces[i].uid === containerUID){\r\n return result.packingSpaces[i];\r\n }\r\n }\r\n\r\n let ps = new ResultSpace(containerUID);\r\n result.packingSpaces.push(ps);\r\n return ps;\r\n }\r\n\r\n let totalPacked = 0,\r\n totalUnpacked = 0;\r\n\r\n /** @param {ResultEntry} resultEntry @param {Array} list */\r\n function packEntry(resultEntry, list){\r\n let isFirst = true;\r\n for(let i = 0; i < list.length; i++){\r\n if(list[i].uid === resultEntry.uid){\r\n isFirst = false;\r\n list[i].quantity ++;\r\n break;\r\n }\r\n }\r\n\r\n if(isFirst){\r\n resultEntry.quantity = 1;\r\n list.push(resultEntry);\r\n }\r\n }\r\n\r\n packingResult.packed.forEach(p => {\r\n let uid = p.entry.uid;\r\n let space = getSpace(p.containingVolume.container.uid);\r\n packEntry(new ResultEntry(uid, space), result.packed);\r\n totalPacked++;\r\n });\r\n\r\n packingResult.unpacked.forEach(p => {\r\n let uid = p.entry.uid;\r\n let space = null;\r\n let unpackedQuantity = p.unpackedQuantity;\r\n result.unpacked.push(new ResultEntry(uid, space, unpackedQuantity));\r\n totalUnpacked += unpackedQuantity;\r\n });\r\n\r\n result.totalPacked = totalPacked;\r\n result.totalUnpacked = totalUnpacked;\r\n result.solveDuration = packingResult.runtime;\r\n\r\n return result;\r\n}\r\n\r\nconst signals = {\r\n solveRequest: 'solveRequest',\r\n solved: 'solved',\r\n failed: 'failed'\r\n};\r\n\r\n/** @typedef PackerParams \r\n * @property {Number} defaultStackingFactor default = 5, multiplier for stacking capacity (capacity = weight * defaultStackingFactor) if stackingProperty is not enabled */\r\nconst defaultParams = {\r\n defaultStackingFactor: 5\r\n};\r\n\r\n/** @type {SolverParams} */\r\nconst defaultSolverParams = {\r\n algorithm: 'cub'\r\n};\r\n\r\nclass PackerInterface extends LightDispatcher {\r\n\r\n /** @param {PackerParams} params */\r\n constructor(params){\r\n super();\r\n \r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n }\r\n\r\n /** Solve packing for current cargo list in loaded packing space \r\n * @param {SolverParams} params */\r\n Solve(params){\r\n params = Utils.AssignUndefined(params, defaultSolverParams);\r\n this.Dispatch(signals.solveRequest, params);\r\n }\r\n\r\n /** @ignore ignore */\r\n _Notify(...args){\r\n let value = args[0];\r\n switch(value){\r\n case signals.solved:\r\n let packingResult = args[1];\r\n let result = toInterfaceResults(packingResult);\r\n this.Dispatch(signals.solved, result);\r\n break;\r\n case signals.failed:\r\n let error = args[1];\r\n this.Dispatch(signals.failed, error);\r\n break;\r\n }\r\n }\r\n\r\n /** Enumeration of dispatched types */\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nexport default PackerInterface;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/PackerInterface.js","const api = require('./FreightPacker').default;\r\nwindow.FreightPacker = api;\n\n\n// WEBPACK FOOTER //\n// ./src/dev.js","import Capabilities from './api/utils/Capabilities';\r\nimport App, { AppParams } from './api/App';\r\nimport CargoInput, { CargoInputParams } from './api/components/CargoInput';\r\nimport Logger from './api/utils/cik/Logger';\r\nimport Utils from './api/utils/cik/Utils';\r\nimport PackingSpaceInput, { PackingSpaceInputParams } from './api/components/PackingSpaceInput';\r\nimport UX, { UXParams } from './api/UX';\r\nimport PackerInterface, { PackerParams } from './api/components/PackerInterface';\r\nimport LightDispatcher from './api/components/LightDispatcher';\r\nimport Constants from './api/Constants';\r\nimport Resources from './api/Resources';\r\n\r\n//#region dev\r\nconst utils = {\r\n\tTHREE: THREE,\r\n\tdat: (window.dat || require('./api/utils/cik/config/datGUIConsole').default),\r\n\tSignaler: require('./api/utils/cik/Signaler').default,\r\n\tUtils: require('./api/utils/cik/Utils').default,\r\n\tDebug: require('./api/debug/Debug').default,\r\n\tConfig: require('./api/utils/cik/config/Config').default\r\n};\r\n\r\n/** @param {FreightPacker|App} domain */\r\nfunction devSetup(domain){\r\n\tif(domain instanceof FreightPacker){\r\n\t\tlet fp = domain;\r\n\t\tglobal.fp = fp;\r\n\t\tFreightPacker.utils.Debug.api = fp;\r\n\t\tlet params = fp.params;\r\n\t\tif(params.debug) {\r\n\t\t\tLogger.active = true;\r\n\t\t\tLogger.toConsole = true;\r\n\t\t\tLogger.traceToConsole = true;\r\n\t\t}\r\n\r\n\t\t//require('./api/debug/Tester').testPool();\r\n\t\t//utils.Debug.CLPTest.Test1();\r\n\t}\r\n\r\n\tif(domain instanceof App){\r\n\t\tconst SceneSetup = require('./api/view/SceneSetup').default;\r\n\t\tlet app = domain;\r\n\t\tFreightPacker.utils.Debug.app = app;\r\n\t\tapp.sceneSetup.OnIncludingPrior(SceneSetup.signals.init, function(){\r\n\t\t\tFreightPacker.utils.Debug.Viz.SetViewParent(app.sceneSetup.sceneController.scene);\r\n\t\t});\r\n\t}\r\n}\r\n\r\n/** @param {FreightPacker} fp */\r\nfunction auto(fp){\r\n\t\r\n}\r\n\r\n//#endregion\r\n\r\n/**\r\n * @typedef InitializationParams\r\n * @property {Boolean} debug set to false for deployment\r\n * @property {string} texturesPath url to textures directory\r\n * @property {UXParams} uxParams UX parameters\r\n * @property {PackerParams} packerParams Packer general parameters\r\n */\r\n\r\n/**\r\n * @type {InitializationParams}\r\n */\r\nconst defaultParams = {\r\n\tdebug: false\r\n};\r\n\r\nconst signals = {\r\n\tready: 'ready'\r\n};\r\n\r\nclass FreightPacker extends LightDispatcher {\r\n\t/**\r\n\t * Freight Packer API instance\r\n\t * @param {HTMLDivElement} containerDiv\r\n\t * @param {InitializationParams} params\r\n\t */\r\n\tconstructor( containerDiv, params ) {\r\n\r\n\t\tsuper();\r\n\t\tlet scope = this;\r\n\r\n\t\tthis.params = Utils.AssignUndefined(params, defaultParams);\r\n\t\tdevSetup(this);\r\n\r\n\t\tthis.ux = new UX(this.params.uxParams);\r\n\r\n\t\t/** @type {CargoInputParams} */\r\n\t\tlet cargoInputParams = {ux: this.ux};\r\n\r\n\t\t/** Handles input of: description fields (label, etc.), dimensions and constraints */\r\n\t\tthis.cargoInput = new CargoInput(cargoInputParams);\r\n\r\n\t\t/** @type {PackingSpaceInputParams} */\r\n\t\tlet packingSpaceInputParams = {ux: this.ux};\r\n\r\n\t\t/** Handles input of: packing spaces configurations and assets */\r\n\t\tthis.packingSpaceInput = new PackingSpaceInput(packingSpaceInputParams);\r\n\r\n\t\t/** Manual solving and notification */\r\n\t\tthis.packer = new PackerInterface(this.params.packerParams);\r\n\r\n\t\tlet resources = new Resources();\r\n\t\t\tresources.texturesPath = this.params.texturesPath;\r\n\r\n\t\t/** @type {AppParams} */\r\n\t\tlet appParams = {ux: this.ux, cargoInput: this.cargoInput, packingSpaceInput: this.packingSpaceInput, packerInterface: this.packer, resources: resources};\r\n\t\tlet app = new App(containerDiv, appParams);\r\n\t\t\tapp.On(App.signals.start, function(){\r\n\t\t\t\tscope.Dispatch(signals.ready);\r\n\t\t\t});\r\n\r\n\t\tdevSetup(app);\r\n\r\n\t\tif(this.params.debug){\r\n\t\t\tauto(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Check that webgl, etc are supported in this browser.\r\n\t * Will resolve if requirements are met, otherwise rejects with an error message\r\n\t * @return {Promise|Promise} \r\n\t */\r\n\tstatic CheckRequirements () {\r\n\t\tlet webgl = Capabilities.IsWebGLReady();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(webgl){\r\n\t\t\t\tresolve();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet message = 'WebGL not supported.';\r\n\t\t\t\treject(message);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/** Enumeration of dispatched types */\r\n\tstatic get signals(){\r\n\t\treturn signals;\r\n\t}\r\n\r\n\tstatic get utils(){\r\n\t\treturn utils;\r\n\t}\r\n\r\n}\r\n\r\nFreightPacker.UX = UX;\r\nFreightPacker.CargoInput = CargoInput;\r\nFreightPacker.PackingSpaceInput = PackingSpaceInput;\r\nFreightPacker.Packer = PackerInterface;\r\nFreightPacker.Constants = Constants;\r\n\r\nexport default FreightPacker;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/FreightPacker.js","\r\nclass Capabilities {\r\n constructor() {\r\n \r\n }\r\n \r\n static IsWebGLReady(){\r\n var canvas = document.createElement('canvas');\r\n var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\r\n return gl && gl instanceof WebGLRenderingContext;\r\n }\r\n}\r\n\r\nexport default Capabilities;\r\n \n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/Capabilities.js","import UpdateComponent from \"./UpdateComponent\";\r\nimport RaycastGroup from \"./RaycastGroup\";\r\n\r\nconst keypress = require('../../../../min-dependencies/lib/keypress');\r\n\r\n/**\r\n * @typedef {Object} IScreen\r\n * @property {Number} x\r\n * @property {Number} y\r\n * @property {Number} width\r\n * @property {Number} height\r\n * @property {Number} left\r\n * @property {Number} right\r\n * @property {Number} bottom\r\n * @property {Number} top\r\n */\r\n\r\n/**\r\n * @typedef {Object} DragEvent\r\n * @property {MouseEvent} mouseEvent\r\n * @property {Number} sx - Start screen x\r\n * @property {Number} sy - Start screen y\r\n * @property {Number} x - Current screen x\r\n * @property {Number} y - Current screen y\r\n * @property {Number} dx - Delta x\r\n * @property {Number} dy - Delta y\r\n * @property {Number} distance - Distance (current - start)\r\n * @property {Number} minDist - Minimum distance to raise onDrag\r\n */\r\n\r\n /** keyboard api (http://dmauro.github.io/Keypress/)\r\n * @typedef keyboard\r\n * @property {function} on\r\n * @property {function} unregister\r\n */\r\n\r\nconst epsilon = Math.pow(2, -52);\r\nconst defaultKeysListen = 'abcdefghijklmnopqrtsuvwxyz'.split('').concat(['ctlr', 'shift', 'alt']);\r\n\r\nclass Input {\r\n\r\n /**\r\n * \r\n * @param {HTMLElement} domContainer \r\n */\r\n constructor (domContainer){\r\n this.enabled = true;\r\n \r\n var scope = this;\r\n Object.defineProperty(this, 'camera', {\r\n get: function(){\r\n return scope._camera;\r\n },\r\n set: function(camera){\r\n scope._camera = camera;\r\n scope.fov = {min: 40, max: camera.fov, target: camera.fov};\r\n }\r\n });\r\n\r\n this.domContainer = domContainer;\r\n\r\n this._mouse = {x:0, y:0};\r\n this.mouseScreen = new THREE.Vector2();\r\n this.mouseViewport = new THREE.Vector2();\r\n this.mouseDelta = new THREE.Vector2();\r\n this.lastMouseDownTime = 0;\r\n /**\r\n * @type {IScreen}\r\n */\r\n this.screen = {};\r\n this.ComputeScreen();\r\n\r\n this.raycaster = new THREE.Raycaster();\r\n\r\n this.clock = new THREE.Clock();\r\n this.clock.start();\r\n\r\n this._raycastGroups = {Update:{}, Update25:{}, Update10:{}, OnMouseDown:{}, OnDoubleClick:{}, OnMouseUp:{}, OnRightClick:{}, OnClick:{}};\r\n this.updateComponents = [\r\n new UpdateComponent(true, 1/25, this.Update25.bind(this)),\r\n new UpdateComponent(true, 1/10, this.Update10.bind(this))\r\n ];\r\n\r\n this.fireOnce = [];\r\n\r\n this.onMouseDown = [];\r\n this.onMouseUp = [];\r\n this.onRightClick = [];\r\n this.onDoubleClick = [];\r\n this.onClick = [];\r\n this.onDrag = [];\r\n\r\n /**\r\n * @type {DragEvent}\r\n */\r\n this.onDragEvent = {\r\n mouseEvent: undefined,\r\n sx: undefined, sy: undefined,\r\n x: 0, y: 0,\r\n dx: 0, dy: 0,\r\n distance: 0,\r\n minDist: 4 // pixels \r\n };\r\n var onDragStatus = false;\r\n Object.defineProperty(this.onDragEvent, '_status', {\r\n get: function(){\r\n return onDragStatus;\r\n },\r\n set: function(value){\r\n onDragStatus = value;\r\n this.sx = this.sy = undefined;\r\n this.dx = this.dy = 0;\r\n }\r\n })\r\n\r\n this.doubleClickTime = .2;\r\n \r\n this.domContainer.addEventListener('mousedown', this.OnMouseDown.bind(this));\r\n this.domContainer.addEventListener('mouseup', this.OnMouseUp.bind(this));\r\n this.domContainer.addEventListener('contextmenu', this.OnRightClick.bind(this));\r\n this.domContainer.addEventListener('mousemove', this.OnMouseMove.bind(this), false);\r\n\r\n var thisOnMouseWheel = this.OnMouseWheel.bind(this);\r\n if (this.domContainer.addEventListener) {\r\n this.domContainer.addEventListener(\"mousewheel\", thisOnMouseWheel, false);\r\n this.domContainer.addEventListener(\"DOMMouseScroll\", thisOnMouseWheel, false);\r\n }\r\n else\r\n this.domContainer.attachEvent(\"onmousewheel\", thisOnMouseWheel);\r\n\r\n this.screenNeedsUpdate = true;\r\n window.addEventListener('scroll', this.OnScroll.bind(this));\r\n\r\n this.cameraNeedsUpdate = true;\r\n this.onResize = [];\r\n window.addEventListener('resize', this.OnResize.bind(this));\r\n\r\n /**\r\n * @type {keyboard}\r\n */\r\n this.keyboard = new keypress.Listener();\r\n this.keyboard.on = this.keyboard.simple_combo;\r\n this.keyboard.unregister = this.keyboard.unregister_combo;\r\n this.keys = {};\r\n\r\n //\r\n \r\n }\r\n\r\n Dispose(){\r\n // remove listeners\r\n }\r\n\r\n ListenKeys(keys){\r\n if(keys === undefined) {\r\n keys = defaultKeysListen;\r\n }\r\n\r\n var scope = this;\r\n keys.forEach(key => {\r\n scope.keys[key] = false;\r\n scope.keyboard.register_combo({\r\n keys: key,\r\n prevent_repeat: true,\r\n on_keydown: function(){\r\n scope.keys[key] = true;\r\n },\r\n on_keyup: function(){\r\n scope.keys[key] = false;\r\n }\r\n });\r\n });\r\n }\r\n\r\n ComputeScreen(){\r\n var screen = this.domContainer.getBoundingClientRect();\r\n this.screen.x = screen.x;\r\n this.screen.y = screen.y;\r\n this.screen.width = screen.width;\r\n this.screen.height = screen.height;\r\n this.screen.left = screen.left;\r\n this.screen.right = screen.right;\r\n this.screen.bottom = screen.bottom;\r\n this.screen.top = screen.top;\r\n \r\n /*\r\n var rectOffset = Utils.GetRectOffset(this.domContainer);\r\n this.screen.x += rectOffset.x;\r\n this.screen.left += rectOffset.x;\r\n this.screen.y += rectOffset.y;\r\n this.screen.top += rectOffset.y;\r\n */\r\n }\r\n\r\n OnMouseDown(mouseEvent){\r\n if(mouseEvent.button === 0){\r\n this.UpdateScreenAndMouse(mouseEvent);\r\n var now = this.clock.getElapsedTime();\r\n if(now - this.lastMouseDownTime < this.doubleClickTime){\r\n if(this._dridMouseDown !== undefined){\r\n this.AbortDelayedAction(this._dridMouseDown);\r\n this._dridMouseDown = undefined;\r\n }\r\n this.OnDoubleClick(mouseEvent);\r\n return;\r\n }\r\n\r\n this.lastMouseDownTime = now;\r\n this.onDragEvent._status = true;\r\n\r\n var scope = this;\r\n this._dridMouseDown = this.DelayedAction(\r\n this._mouseDownDelayed = function(){\r\n scope._dridMouseDown = undefined;\r\n for(var i = 0; i < scope.onMouseDown.length; i++){\r\n scope.onMouseDown[i](mouseEvent);\r\n }\r\n scope.UpdateRaycast('OnMouseDown');\r\n scope.mouseDelta.copy(scope.mouseScreen);\r\n }, \r\n this.doubleClickTime * 1000\r\n );\r\n }\r\n }\r\n\r\n OnDoubleClick(mouseEvent){\r\n for(var i = 0; i < this.onDoubleClick.length; i++){\r\n this.onDoubleClick[i](mouseEvent);\r\n }\r\n\r\n this.UpdateRaycast('OnDoubleClick');\r\n }\r\n\r\n ExecuteDelayedMD(mouseEvent){\r\n if(this._dridMouseDown !== undefined){\r\n this.AbortDelayedAction(this._dridMouseDown);\r\n this._dridMouseDown = undefined;\r\n this._mouseDownDelayed();\r\n }\r\n }\r\n\r\n OnMouseUp(mouseEvent){\r\n if(mouseEvent.button === 0){\r\n var now = this.clock.getElapsedTime();\r\n if(now - this.lastMouseDownTime < this.doubleClickTime){\r\n this.ExecuteDelayedMD(mouseEvent);\r\n }\r\n \r\n this.UpdateScreenAndMouse(mouseEvent);\r\n for(var i = 0; i < this.onMouseUp.length; i++){\r\n this.onMouseUp[i](mouseEvent);\r\n }\r\n\r\n this.UpdateRaycast('OnMouseUp');\r\n var d = this.mouseDelta.distanceToSquared(this.mouseScreen);\r\n var noMouseDrag = d < 10; // pixels squared\r\n if(noMouseDrag){\r\n this.OnClick(mouseEvent);\r\n }\r\n\r\n this.onDragEvent._status = false;\r\n }\r\n }\r\n\r\n OnMouseDrag(){\r\n var p = this.onDragEvent;\r\n if(p._status){\r\n let m = this.mouseScreen;\r\n if(p.sx === undefined) p.sx = p.x = m.x;\r\n if(p.sy === undefined) p.sy = p.y = m.y;\r\n\r\n let vx = p.x - p.sx,\r\n vy = p.y - p.sy;\r\n p.distance = Math.sqrt(vx * vx + vy * vy);\r\n if(p.distance > p.minDist && \r\n (Math.abs(p.dx) > epsilon || Math.abs(p.dy) > epsilon)\r\n ){\r\n for(var i = 0; i < this.onDrag.length; i++){\r\n this.onDrag[i](p);\r\n }\r\n }\r\n\r\n p.dx = p.x - m.x;\r\n p.dy = p.y - m.y;\r\n\r\n p.x = m.x;\r\n p.y = m.y;\r\n }\r\n }\r\n\r\n OnClick(mouseEvent){\r\n for(var i = 0; i < this.onClick.length; i++){\r\n this.onClick[i](mouseEvent);\r\n }\r\n\r\n this.UpdateRaycast('OnClick');\r\n }\r\n\r\n OnRightClick(mouseEvent){\r\n //mouseEvent.preventDefault();\r\n this.UpdateScreenAndMouse(mouseEvent);\r\n for(var i = 0; i < this.onRightClick.length; i++){\r\n this.onRightClick[i](mouseEvent);\r\n }\r\n\r\n this.UpdateRaycast('OnRightClick');\r\n }\r\n\r\n OnMouseMove(mouseEvent){\r\n this._mouse.x = THREE.Math.clamp(mouseEvent.clientX - this.screen.left, 0, this.screen.width);\r\n this._mouse.y = THREE.Math.clamp(mouseEvent.clientY - this.screen.top, 0, this.screen.height);\r\n this.onDragEvent.mouseEvent = mouseEvent;\r\n this.ExecuteDelayedMD(mouseEvent);\r\n }\r\n\r\n OnScroll(event){\r\n this.screenNeedsUpdate = true;\r\n }\r\n\r\n OnMouseWheel(mouseEvent){\r\n mouseEvent.preventDefault();\r\n var delta = THREE.Math.clamp(mouseEvent.wheelDelta || -mouseEvent.detail, -1, 1);\r\n this.fov.target = THREE.Math.clamp(this.fov.target - delta * 2., this.fov.min, this.fov.max);\r\n this.fov.lerp = 0;\r\n }\r\n\r\n LerpZoom(){\r\n this.fov.lerp += .1;\r\n if(this.fov.lerp >= 1 || Number.isNaN(this.fov.lerp)){\r\n return;\r\n }\r\n this.camera.fov += (this.fov.target - this.camera.fov) * this.fov.lerp;\r\n this.camera.updateProjectionMatrix();\r\n }\r\n\r\n OnResize(event) {\r\n this.screenNeedsUpdate = true;\r\n this.cameraNeedsUpdate = true;\r\n }\r\n\r\n RemoveEventCallback(eventType, callback){\r\n var callbacks = this[eventType];\r\n for(var iCallback = 0; iCallback < callbacks.length; iCallback++){\r\n if(callbacks[iCallback] === callback){\r\n callbacks.splice(iCallback, 1);\r\n }\r\n }\r\n }\r\n\r\n Update(){\r\n this.UpdateScreenAndMouse();\r\n\r\n this.FireOnce();\r\n\r\n // Raycasts\r\n this.UpdateRaycaster();\r\n this.UpdateRaycast('Update');\r\n\r\n var now = this.clock.getElapsedTime();\r\n for(var iUpdate = 0; iUpdate < this.updateComponents.length; iUpdate++){\r\n var updateComponent = this.updateComponents[iUpdate];\r\n if(updateComponent.active\r\n && (now - updateComponent.lastUpdateTime > updateComponent.interval)\r\n ){\r\n updateComponent.Update(now);\r\n }\r\n }\r\n\r\n this.OnMouseDrag();\r\n }\r\n\r\n Update25(){\r\n this.LerpZoom();\r\n this.UpdateRaycast('Update25');\r\n }\r\n\r\n Update10(){\r\n this.UpdateRaycast('Update10');\r\n }\r\n\r\n FireOnce(){\r\n for(var iCallback = this.fireOnce.length; iCallback-- > 0;){\r\n this.fireOnce[iCallback]();\r\n }\r\n this.fireOnce.length = 0;\r\n }\r\n\r\n DelayedAction(action, delay){\r\n var drid = window.setTimeout(function(){\r\n action();\r\n }, delay);\r\n return drid;\r\n }\r\n\r\n AbortDelayedAction(drid){\r\n window.clearTimeout(drid);\r\n return;\r\n }\r\n\r\n Repeat(action, interval){\r\n if(this._repeats === undefined) this._repeats = [];\r\n var drid = window.setInterval(function(){\r\n action();\r\n }, interval);\r\n this._repeats.push({action:action, drid:drid});\r\n return drid;\r\n }\r\n\r\n StopRepeat(action){\r\n if(this._repeats === undefined) return;\r\n if(typeof action === 'number'){\r\n window.clearInterval(action);\r\n return;\r\n }\r\n for(var i = 0; i < this._repeats.length; i++){\r\n if(this._repeats[i].action === action){\r\n window.clearInterval(this._repeats[i].drid);\r\n this._repeats.splice(i, 1);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n UpdateScreenAndMouse(mouseEvent){\r\n if(this.screenNeedsUpdate) {\r\n this.ComputeScreen();\r\n this.screenNeedsUpdate = false;\r\n }\r\n if(this.cameraNeedsUpdate) {\r\n for(var i = 0; i < this.onResize.length; i++){\r\n this.onResize[i](this.screen);\r\n }\r\n this.cameraNeedsUpdate = false;\r\n }\r\n\r\n if(mouseEvent !== undefined){\r\n this._mouse.x = THREE.Math.clamp(mouseEvent.clientX - this.screen.left, 0, this.screen.width);\r\n this._mouse.y = THREE.Math.clamp(mouseEvent.clientY - this.screen.top, 0, this.screen.height);\r\n }\r\n\r\n this.mouseScreen.x = this._mouse.x;\r\n this.mouseScreen.y = this._mouse.y;\r\n\r\n this.mouseViewport.x = this._mouse.x / this.screen.width * 2 - 1;\r\n this.mouseViewport.y = -this._mouse.y / this.screen.height * 2 + 1;\r\n }\r\n\r\n RaycastTest(objects, recursive){\r\n this.UpdateRaycaster();\r\n recursive = recursive !== undefined ? recursive : false;\r\n var intersects = objects instanceof Array ? this.raycaster.intersectObjects(objects, recursive) : this.raycaster.intersectObject(objects, recursive);\r\n if (intersects.length > 0) {\r\n return intersects[0];\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * @param {string} event Update Update25 Update10 OnMouseDown OnDoubleClick OnMouseUp OnRightClick OnClick\r\n * @param {string} groupID \r\n * @param {RaycastGroup} group \r\n */\r\n AddRaycastGroup(event, groupID, group){\r\n if(this._raycastGroups[event][groupID] !== undefined) console.log('RaycastGroup ' + groupID + ' is being overwritten.');\r\n this._raycastGroups[event][groupID] = group;\r\n }\r\n\r\n RemoveRaycastGroup(event, groupID){\r\n delete this._raycastGroups[event][groupID];\r\n }\r\n\r\n UpdateRaycaster(){\r\n this.camera.updateMatrixWorld();\r\n this.raycaster.setFromCamera(this.mouseViewport, this.camera);\r\n }\r\n\r\n UpdateRaycast(event){\r\n var raycastGroupsKeys = Object.keys(this._raycastGroups[event]);\r\n var numRaycastGroups = raycastGroupsKeys.length;\r\n if(numRaycastGroups > 0){\r\n if(numRaycastGroups > 1)\r\n raycastGroupsKeys.sort().reverse();\r\n \r\n for(var iGroup = 0; iGroup < numRaycastGroups; iGroup++){\r\n var key = raycastGroupsKeys[iGroup];\r\n this._raycastGroups[event][key].Raycast(this.raycaster);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Input;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/input/Input.js","// Generated by CoffeeScript 1.8.0\r\n\r\n/*\r\nCopyright 2014 David Mauro\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\nhttp://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n\r\nKeypress is a robust keyboard input capturing Javascript utility\r\nfocused on input for games.\r\n\r\nversion 2.1.3\r\n */\r\n\r\n\r\n/*\r\nCombo options available and their defaults:\r\n keys : [] - An array of the keys pressed together to activate combo.\r\n count : 0 - The number of times a counting combo has been pressed. Reset on release.\r\n is_unordered : false - Unless this is set to true, the keys can be pressed down in any order.\r\n is_counting : false - Makes this a counting combo (see documentation).\r\n is_exclusive : false - This combo will replace other exclusive combos when true.\r\n is_solitary : false - This combo will only fire if ONLY it's keys are pressed down.\r\n is_sequence : false - Rather than a key combo, this is an ordered key sequence.\r\n prevent_default : false - Prevent default behavior for all component key keypresses.\r\n prevent_repeat : false - Prevent the combo from repeating when keydown is held.\r\n on_keydown : null - A function that is called when the combo is pressed.\r\n on_keyup : null - A function that is called when the combo is released.\r\n on_release : null - A function that is called when all keys in the combo are released.\r\n this : undefined - Defines the scope for your callback functions.\r\n */\r\n\r\n(function() {\r\n var Combo, keypress, _change_keycodes_by_browser, _compare_arrays, _compare_arrays_sorted, _convert_key_to_readable, _convert_to_shifted_key, _decide_meta_key, _factory_defaults, _filter_array, _index_of_in_array, _is_array_in_array, _is_array_in_array_sorted, _key_is_valid, _keycode_alternate_names, _keycode_dictionary, _keycode_shifted_keys, _log_error, _metakey, _modifier_event_mapping, _modifier_keys, _validate_combo,\r\n __hasProp = {}.hasOwnProperty,\r\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\r\n\r\n _factory_defaults = {\r\n is_unordered: false,\r\n is_counting: false,\r\n is_exclusive: false,\r\n is_solitary: false,\r\n prevent_default: false,\r\n prevent_repeat: false\r\n };\r\n\r\n _modifier_keys = [\"meta\", \"alt\", \"option\", \"ctrl\", \"shift\", \"cmd\"];\r\n\r\n _metakey = \"ctrl\";\r\n\r\n keypress = {};\r\n\r\n keypress.debug = false;\r\n\r\n Combo = (function() {\r\n function Combo(dictionary) {\r\n var property, value;\r\n for (property in dictionary) {\r\n if (!__hasProp.call(dictionary, property)) continue;\r\n value = dictionary[property];\r\n if (value !== false) {\r\n this[property] = value;\r\n }\r\n }\r\n this.keys = this.keys || [];\r\n this.count = this.count || 0;\r\n }\r\n\r\n Combo.prototype.allows_key_repeat = function() {\r\n return !this.prevent_repeat && typeof this.on_keydown === \"function\";\r\n };\r\n\r\n Combo.prototype.reset = function() {\r\n this.count = 0;\r\n return this.keyup_fired = null;\r\n };\r\n\r\n return Combo;\r\n\r\n })();\r\n\r\n keypress.Listener = (function() {\r\n function Listener(element, defaults) {\r\n var attach_handler, property, value;\r\n if ((typeof jQuery !== \"undefined\" && jQuery !== null) && element instanceof jQuery) {\r\n if (element.length !== 1) {\r\n _log_error(\"Warning: your jQuery selector should have exactly one object.\");\r\n }\r\n element = element[0];\r\n }\r\n this.should_suppress_event_defaults = false;\r\n this.should_force_event_defaults = false;\r\n this.sequence_delay = 800;\r\n this._registered_combos = [];\r\n this._keys_down = [];\r\n this._active_combos = [];\r\n this._sequence = [];\r\n this._sequence_timer = null;\r\n this._prevent_capture = false;\r\n this._defaults = defaults || {};\r\n for (property in _factory_defaults) {\r\n if (!__hasProp.call(_factory_defaults, property)) continue;\r\n value = _factory_defaults[property];\r\n this._defaults[property] = this._defaults[property] || value;\r\n }\r\n this.element = element || document.body;\r\n attach_handler = function(target, event, handler) {\r\n if (target.addEventListener) {\r\n target.addEventListener(event, handler);\r\n } else if (target.attachEvent) {\r\n target.attachEvent(\"on\" + event, handler);\r\n }\r\n return handler;\r\n };\r\n this.keydown_event = attach_handler(this.element, \"keydown\", (function(_this) {\r\n return function(e) {\r\n e = e || window.event;\r\n _this._receive_input(e, true);\r\n return _this._bug_catcher(e);\r\n };\r\n })(this));\r\n this.keyup_event = attach_handler(this.element, \"keyup\", (function(_this) {\r\n return function(e) {\r\n e = e || window.event;\r\n return _this._receive_input(e, false);\r\n };\r\n })(this));\r\n this.blur_event = attach_handler(window, \"blur\", (function(_this) {\r\n return function() {\r\n var key, _i, _len, _ref;\r\n _ref = _this._keys_down;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n key = _ref[_i];\r\n _this._key_up(key, {});\r\n }\r\n return _this._keys_down = [];\r\n };\r\n })(this));\r\n }\r\n\r\n Listener.prototype.destroy = function() {\r\n var remove_handler;\r\n remove_handler = function(target, event, handler) {\r\n if (target.removeEventListener != null) {\r\n return target.removeEventListener(event, handler);\r\n } else if (target.removeEvent != null) {\r\n return target.removeEvent(\"on\" + event, handler);\r\n }\r\n };\r\n remove_handler(this.element, \"keydown\", this.keydown_event);\r\n remove_handler(this.element, \"keyup\", this.keyup_event);\r\n return remove_handler(window, \"blur\", this.blur_event);\r\n };\r\n\r\n Listener.prototype._bug_catcher = function(e) {\r\n var _ref, _ref1;\r\n if (_metakey === \"cmd\" && __indexOf.call(this._keys_down, \"cmd\") >= 0 && ((_ref = _convert_key_to_readable((_ref1 = e.keyCode) != null ? _ref1 : e.key)) !== \"cmd\" && _ref !== \"shift\" && _ref !== \"alt\" && _ref !== \"caps\" && _ref !== \"tab\")) {\r\n return this._receive_input(e, false);\r\n }\r\n };\r\n\r\n Listener.prototype._cmd_bug_check = function(combo_keys) {\r\n if (_metakey === \"cmd\" && __indexOf.call(this._keys_down, \"cmd\") >= 0 && __indexOf.call(combo_keys, \"cmd\") < 0) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n Listener.prototype._prevent_default = function(e, should_prevent) {\r\n if ((should_prevent || this.should_suppress_event_defaults) && !this.should_force_event_defaults) {\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n } else {\r\n e.returnValue = false;\r\n }\r\n if (e.stopPropagation) {\r\n return e.stopPropagation();\r\n }\r\n }\r\n };\r\n\r\n Listener.prototype._get_active_combos = function(key) {\r\n var active_combos, keys_down;\r\n active_combos = [];\r\n keys_down = _filter_array(this._keys_down, function(down_key) {\r\n return down_key !== key;\r\n });\r\n keys_down.push(key);\r\n this._match_combo_arrays(keys_down, (function(_this) {\r\n return function(match) {\r\n if (_this._cmd_bug_check(match.keys)) {\r\n return active_combos.push(match);\r\n }\r\n };\r\n })(this));\r\n this._fuzzy_match_combo_arrays(keys_down, (function(_this) {\r\n return function(match) {\r\n if (__indexOf.call(active_combos, match) >= 0) {\r\n return;\r\n }\r\n if (!(match.is_solitary || !_this._cmd_bug_check(match.keys))) {\r\n return active_combos.push(match);\r\n }\r\n };\r\n })(this));\r\n return active_combos;\r\n };\r\n\r\n Listener.prototype._get_potential_combos = function(key) {\r\n var combo, potentials, _i, _len, _ref;\r\n potentials = [];\r\n _ref = this._registered_combos;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n combo = _ref[_i];\r\n if (combo.is_sequence) {\r\n continue;\r\n }\r\n if (__indexOf.call(combo.keys, key) >= 0 && this._cmd_bug_check(combo.keys)) {\r\n potentials.push(combo);\r\n }\r\n }\r\n return potentials;\r\n };\r\n\r\n Listener.prototype._add_to_active_combos = function(combo) {\r\n var active_combo, active_key, active_keys, already_replaced, combo_key, i, should_prepend, should_replace, _i, _j, _k, _len, _len1, _ref, _ref1;\r\n should_replace = false;\r\n should_prepend = true;\r\n already_replaced = false;\r\n if (__indexOf.call(this._active_combos, combo) >= 0) {\r\n return true;\r\n } else if (this._active_combos.length) {\r\n for (i = _i = 0, _ref = this._active_combos.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\r\n active_combo = this._active_combos[i];\r\n if (!(active_combo && active_combo.is_exclusive && combo.is_exclusive)) {\r\n continue;\r\n }\r\n active_keys = active_combo.keys;\r\n if (!should_replace) {\r\n for (_j = 0, _len = active_keys.length; _j < _len; _j++) {\r\n active_key = active_keys[_j];\r\n should_replace = true;\r\n if (__indexOf.call(combo.keys, active_key) < 0) {\r\n should_replace = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (should_prepend && !should_replace) {\r\n _ref1 = combo.keys;\r\n for (_k = 0, _len1 = _ref1.length; _k < _len1; _k++) {\r\n combo_key = _ref1[_k];\r\n should_prepend = false;\r\n if (__indexOf.call(active_keys, combo_key) < 0) {\r\n should_prepend = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (should_replace) {\r\n if (already_replaced) {\r\n active_combo = this._active_combos.splice(i, 1)[0];\r\n if (active_combo != null) {\r\n active_combo.reset();\r\n }\r\n } else {\r\n active_combo = this._active_combos.splice(i, 1, combo)[0];\r\n if (active_combo != null) {\r\n active_combo.reset();\r\n }\r\n already_replaced = true;\r\n }\r\n should_prepend = false;\r\n }\r\n }\r\n }\r\n if (should_prepend) {\r\n this._active_combos.unshift(combo);\r\n }\r\n return should_replace || should_prepend;\r\n };\r\n\r\n Listener.prototype._remove_from_active_combos = function(combo) {\r\n var active_combo, i, _i, _ref;\r\n for (i = _i = 0, _ref = this._active_combos.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\r\n active_combo = this._active_combos[i];\r\n if (active_combo === combo) {\r\n combo = this._active_combos.splice(i, 1)[0];\r\n combo.reset();\r\n break;\r\n }\r\n }\r\n };\r\n\r\n Listener.prototype._get_possible_sequences = function() {\r\n var combo, i, j, match, matches, sequence, _i, _j, _k, _len, _ref, _ref1, _ref2;\r\n matches = [];\r\n _ref = this._registered_combos;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n combo = _ref[_i];\r\n for (j = _j = 1, _ref1 = this._sequence.length; 1 <= _ref1 ? _j <= _ref1 : _j >= _ref1; j = 1 <= _ref1 ? ++_j : --_j) {\r\n sequence = this._sequence.slice(-j);\r\n if (!combo.is_sequence) {\r\n continue;\r\n }\r\n if (__indexOf.call(combo.keys, \"shift\") < 0) {\r\n sequence = _filter_array(sequence, function(key) {\r\n return key !== \"shift\";\r\n });\r\n if (!sequence.length) {\r\n continue;\r\n }\r\n }\r\n for (i = _k = 0, _ref2 = sequence.length; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) {\r\n if (combo.keys[i] === sequence[i]) {\r\n match = true;\r\n } else {\r\n match = false;\r\n break;\r\n }\r\n }\r\n if (match) {\r\n matches.push(combo);\r\n }\r\n }\r\n }\r\n return matches;\r\n };\r\n\r\n Listener.prototype._add_key_to_sequence = function(key, e) {\r\n var combo, sequence_combos, _i, _len;\r\n this._sequence.push(key);\r\n sequence_combos = this._get_possible_sequences();\r\n if (sequence_combos.length) {\r\n for (_i = 0, _len = sequence_combos.length; _i < _len; _i++) {\r\n combo = sequence_combos[_i];\r\n this._prevent_default(e, combo.prevent_default);\r\n }\r\n if (this._sequence_timer) {\r\n clearTimeout(this._sequence_timer);\r\n }\r\n if (this.sequence_delay > -1) {\r\n this._sequence_timer = setTimeout(function() {\r\n return this._sequence = [];\r\n }, this.sequence_delay);\r\n }\r\n } else {\r\n this._sequence = [];\r\n }\r\n };\r\n\r\n Listener.prototype._get_sequence = function(key) {\r\n var combo, i, j, match, seq_key, sequence, _i, _j, _k, _len, _ref, _ref1, _ref2;\r\n _ref = this._registered_combos;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n combo = _ref[_i];\r\n if (!combo.is_sequence) {\r\n continue;\r\n }\r\n for (j = _j = 1, _ref1 = this._sequence.length; 1 <= _ref1 ? _j <= _ref1 : _j >= _ref1; j = 1 <= _ref1 ? ++_j : --_j) {\r\n sequence = (_filter_array(this._sequence, function(seq_key) {\r\n if (__indexOf.call(combo.keys, \"shift\") >= 0) {\r\n return true;\r\n }\r\n return seq_key !== \"shift\";\r\n })).slice(-j);\r\n if (combo.keys.length !== sequence.length) {\r\n continue;\r\n }\r\n for (i = _k = 0, _ref2 = sequence.length; 0 <= _ref2 ? _k < _ref2 : _k > _ref2; i = 0 <= _ref2 ? ++_k : --_k) {\r\n seq_key = sequence[i];\r\n if (__indexOf.call(combo.keys, \"shift\") < 0) {\r\n if (seq_key === \"shift\") {\r\n continue;\r\n }\r\n }\r\n if (key === \"shift\" && __indexOf.call(combo.keys, \"shift\") < 0) {\r\n continue;\r\n }\r\n if (combo.keys[i] === seq_key) {\r\n match = true;\r\n } else {\r\n match = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n if (combo.is_exclusive) {\r\n this._sequence = [];\r\n }\r\n return combo;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n Listener.prototype._receive_input = function(e, is_keydown) {\r\n var key, _ref;\r\n if (this._prevent_capture) {\r\n if (this._keys_down.length) {\r\n this._keys_down = [];\r\n }\r\n return;\r\n }\r\n key = _convert_key_to_readable((_ref = e.keyCode) != null ? _ref : e.key);\r\n if (!is_keydown && !this._keys_down.length && (key === \"alt\" || key === _metakey)) {\r\n return;\r\n }\r\n if (!key) {\r\n return;\r\n }\r\n if (is_keydown) {\r\n return this._key_down(key, e);\r\n } else {\r\n return this._key_up(key, e);\r\n }\r\n };\r\n\r\n Listener.prototype._fire = function(event, combo, key_event, is_autorepeat) {\r\n if (typeof combo[\"on_\" + event] === \"function\") {\r\n this._prevent_default(key_event, combo[\"on_\" + event].call(combo[\"this\"], key_event, combo.count, is_autorepeat) !== true);\r\n }\r\n if (event === \"release\") {\r\n combo.count = 0;\r\n }\r\n if (event === \"keyup\") {\r\n return combo.keyup_fired = true;\r\n }\r\n };\r\n\r\n Listener.prototype._match_combo_arrays = function(potential_match, match_handler) {\r\n var source_combo, _i, _len, _ref;\r\n _ref = this._registered_combos;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n source_combo = _ref[_i];\r\n if ((!source_combo.is_unordered && _compare_arrays_sorted(potential_match, source_combo.keys)) || (source_combo.is_unordered && _compare_arrays(potential_match, source_combo.keys))) {\r\n match_handler(source_combo);\r\n }\r\n }\r\n };\r\n\r\n Listener.prototype._fuzzy_match_combo_arrays = function(potential_match, match_handler) {\r\n var source_combo, _i, _len, _ref;\r\n _ref = this._registered_combos;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n source_combo = _ref[_i];\r\n if ((!source_combo.is_unordered && _is_array_in_array_sorted(source_combo.keys, potential_match)) || (source_combo.is_unordered && _is_array_in_array(source_combo.keys, potential_match))) {\r\n match_handler(source_combo);\r\n }\r\n }\r\n };\r\n\r\n Listener.prototype._keys_remain = function(combo) {\r\n var key, keys_remain, _i, _len, _ref;\r\n _ref = combo.keys;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n key = _ref[_i];\r\n if (__indexOf.call(this._keys_down, key) >= 0) {\r\n keys_remain = true;\r\n break;\r\n }\r\n }\r\n return keys_remain;\r\n };\r\n\r\n Listener.prototype._key_down = function(key, e) {\r\n var combo, combos, event_mod, i, mod, potential, potential_combos, sequence_combo, shifted_key, _i, _j, _k, _len, _len1, _ref;\r\n shifted_key = _convert_to_shifted_key(key, e);\r\n if (shifted_key) {\r\n key = shifted_key;\r\n }\r\n this._add_key_to_sequence(key, e);\r\n sequence_combo = this._get_sequence(key);\r\n if (sequence_combo) {\r\n this._fire(\"keydown\", sequence_combo, e);\r\n }\r\n for (mod in _modifier_event_mapping) {\r\n event_mod = _modifier_event_mapping[mod];\r\n if (!e[event_mod]) {\r\n continue;\r\n }\r\n if (mod === key || __indexOf.call(this._keys_down, mod) >= 0) {\r\n continue;\r\n }\r\n this._keys_down.push(mod);\r\n }\r\n for (mod in _modifier_event_mapping) {\r\n event_mod = _modifier_event_mapping[mod];\r\n if (mod === key) {\r\n continue;\r\n }\r\n if (__indexOf.call(this._keys_down, mod) >= 0 && !e[event_mod]) {\r\n if (mod === \"cmd\" && _metakey !== \"cmd\") {\r\n continue;\r\n }\r\n for (i = _i = 0, _ref = this._keys_down.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\r\n if (this._keys_down[i] === mod) {\r\n this._keys_down.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n combos = this._get_active_combos(key);\r\n potential_combos = this._get_potential_combos(key);\r\n for (_j = 0, _len = combos.length; _j < _len; _j++) {\r\n combo = combos[_j];\r\n this._handle_combo_down(combo, potential_combos, key, e);\r\n }\r\n if (potential_combos.length) {\r\n for (_k = 0, _len1 = potential_combos.length; _k < _len1; _k++) {\r\n potential = potential_combos[_k];\r\n this._prevent_default(e, potential.prevent_default);\r\n }\r\n }\r\n if (__indexOf.call(this._keys_down, key) < 0) {\r\n this._keys_down.push(key);\r\n }\r\n };\r\n\r\n Listener.prototype._handle_combo_down = function(combo, potential_combos, key, e) {\r\n var is_autorepeat, is_other_exclusive, potential_combo, result, _i, _len;\r\n if (__indexOf.call(combo.keys, key) < 0) {\r\n return false;\r\n }\r\n this._prevent_default(e, combo && combo.prevent_default);\r\n is_autorepeat = false;\r\n if (__indexOf.call(this._keys_down, key) >= 0) {\r\n is_autorepeat = true;\r\n if (!combo.allows_key_repeat()) {\r\n return false;\r\n }\r\n }\r\n result = this._add_to_active_combos(combo, key);\r\n combo.keyup_fired = false;\r\n is_other_exclusive = false;\r\n if (combo.is_exclusive) {\r\n for (_i = 0, _len = potential_combos.length; _i < _len; _i++) {\r\n potential_combo = potential_combos[_i];\r\n if (potential_combo.is_exclusive && potential_combo.keys.length > combo.keys.length) {\r\n is_other_exclusive = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!is_other_exclusive) {\r\n if (combo.is_counting && typeof combo.on_keydown === \"function\") {\r\n combo.count += 1;\r\n }\r\n if (result) {\r\n return this._fire(\"keydown\", combo, e, is_autorepeat);\r\n }\r\n }\r\n };\r\n\r\n Listener.prototype._key_up = function(key, e) {\r\n var active_combo, active_combos_length, combo, combos, i, sequence_combo, shifted_key, unshifted_key, _i, _j, _k, _l, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3;\r\n unshifted_key = key;\r\n shifted_key = _convert_to_shifted_key(key, e);\r\n if (shifted_key) {\r\n key = shifted_key;\r\n }\r\n shifted_key = _keycode_shifted_keys[unshifted_key];\r\n if (e.shiftKey) {\r\n if (!(shifted_key && __indexOf.call(this._keys_down, shifted_key) >= 0)) {\r\n key = unshifted_key;\r\n }\r\n } else {\r\n if (!(unshifted_key && __indexOf.call(this._keys_down, unshifted_key) >= 0)) {\r\n key = shifted_key;\r\n }\r\n }\r\n sequence_combo = this._get_sequence(key);\r\n if (sequence_combo) {\r\n this._fire(\"keyup\", sequence_combo, e);\r\n }\r\n if (__indexOf.call(this._keys_down, key) < 0) {\r\n return false;\r\n }\r\n for (i = _i = 0, _ref = this._keys_down.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\r\n if ((_ref1 = this._keys_down[i]) === key || _ref1 === shifted_key || _ref1 === unshifted_key) {\r\n this._keys_down.splice(i, 1);\r\n break;\r\n }\r\n }\r\n active_combos_length = this._active_combos.length;\r\n combos = [];\r\n _ref2 = this._active_combos;\r\n for (_j = 0, _len = _ref2.length; _j < _len; _j++) {\r\n active_combo = _ref2[_j];\r\n if (__indexOf.call(active_combo.keys, key) >= 0) {\r\n combos.push(active_combo);\r\n }\r\n }\r\n for (_k = 0, _len1 = combos.length; _k < _len1; _k++) {\r\n combo = combos[_k];\r\n this._handle_combo_up(combo, e, key);\r\n }\r\n if (active_combos_length > 1) {\r\n _ref3 = this._active_combos;\r\n for (_l = 0, _len2 = _ref3.length; _l < _len2; _l++) {\r\n active_combo = _ref3[_l];\r\n if (active_combo === void 0 || __indexOf.call(combos, active_combo) >= 0) {\r\n continue;\r\n }\r\n if (!this._keys_remain(active_combo)) {\r\n this._remove_from_active_combos(active_combo);\r\n }\r\n }\r\n }\r\n };\r\n\r\n Listener.prototype._handle_combo_up = function(combo, e, key) {\r\n var keys_down, keys_remaining;\r\n this._prevent_default(e, combo && combo.prevent_default);\r\n keys_remaining = this._keys_remain(combo);\r\n if (!combo.keyup_fired) {\r\n keys_down = this._keys_down.slice();\r\n keys_down.push(key);\r\n if (!combo.is_solitary || _compare_arrays(keys_down, combo.keys)) {\r\n this._fire(\"keyup\", combo, e);\r\n if (combo.is_counting && typeof combo.on_keyup === \"function\" && typeof combo.on_keydown !== \"function\") {\r\n combo.count += 1;\r\n }\r\n }\r\n }\r\n if (!keys_remaining) {\r\n this._fire(\"release\", combo, e);\r\n this._remove_from_active_combos(combo);\r\n }\r\n };\r\n\r\n Listener.prototype.simple_combo = function(keys, callback) {\r\n return this.register_combo({\r\n keys: keys,\r\n on_keydown: callback\r\n });\r\n };\r\n\r\n Listener.prototype.counting_combo = function(keys, count_callback) {\r\n return this.register_combo({\r\n keys: keys,\r\n is_counting: true,\r\n is_unordered: false,\r\n on_keydown: count_callback\r\n });\r\n };\r\n\r\n Listener.prototype.sequence_combo = function(keys, callback) {\r\n return this.register_combo({\r\n keys: keys,\r\n on_keydown: callback,\r\n is_sequence: true,\r\n is_exclusive: true\r\n });\r\n };\r\n\r\n Listener.prototype.register_combo = function(combo_dictionary) {\r\n var combo, property, value, _ref;\r\n if (typeof combo_dictionary[\"keys\"] === \"string\") {\r\n combo_dictionary[\"keys\"] = combo_dictionary[\"keys\"].split(\" \");\r\n }\r\n _ref = this._defaults;\r\n for (property in _ref) {\r\n if (!__hasProp.call(_ref, property)) continue;\r\n value = _ref[property];\r\n if (combo_dictionary[property] === void 0) {\r\n combo_dictionary[property] = value;\r\n }\r\n }\r\n combo = new Combo(combo_dictionary);\r\n if (_validate_combo(combo)) {\r\n this._registered_combos.push(combo);\r\n return combo;\r\n }\r\n };\r\n\r\n Listener.prototype.register_many = function(combo_array) {\r\n var combo, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = combo_array.length; _i < _len; _i++) {\r\n combo = combo_array[_i];\r\n _results.push(this.register_combo(combo));\r\n }\r\n return _results;\r\n };\r\n\r\n Listener.prototype.unregister_combo = function(keys_or_combo) {\r\n var combo, unregister_combo, _i, _len, _ref, _results;\r\n if (!keys_or_combo) {\r\n return false;\r\n }\r\n unregister_combo = (function(_this) {\r\n return function(combo) {\r\n var i, _i, _ref, _results;\r\n _results = [];\r\n for (i = _i = 0, _ref = _this._registered_combos.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\r\n if (combo === _this._registered_combos[i]) {\r\n _this._registered_combos.splice(i, 1);\r\n break;\r\n } else {\r\n _results.push(void 0);\r\n }\r\n }\r\n return _results;\r\n };\r\n })(this);\r\n if (keys_or_combo instanceof Combo) {\r\n return unregister_combo(keys_or_combo);\r\n } else {\r\n if (typeof keys_or_combo === \"string\") {\r\n keys_or_combo = keys_or_combo.split(\" \");\r\n }\r\n _ref = this._registered_combos;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n combo = _ref[_i];\r\n if (combo == null) {\r\n continue;\r\n }\r\n if ((combo.is_unordered && _compare_arrays(keys_or_combo, combo.keys)) || (!combo.is_unordered && _compare_arrays_sorted(keys_or_combo, combo.keys))) {\r\n _results.push(unregister_combo(combo));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n }\r\n return _results;\r\n }\r\n };\r\n\r\n Listener.prototype.unregister_many = function(combo_array) {\r\n var combo, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = combo_array.length; _i < _len; _i++) {\r\n combo = combo_array[_i];\r\n _results.push(this.unregister_combo(combo));\r\n }\r\n return _results;\r\n };\r\n\r\n Listener.prototype.get_registered_combos = function() {\r\n return this._registered_combos;\r\n };\r\n\r\n Listener.prototype.reset = function() {\r\n return this._registered_combos = [];\r\n };\r\n\r\n Listener.prototype.listen = function() {\r\n return this._prevent_capture = false;\r\n };\r\n\r\n Listener.prototype.stop_listening = function() {\r\n return this._prevent_capture = true;\r\n };\r\n\r\n Listener.prototype.get_meta_key = function() {\r\n return _metakey;\r\n };\r\n\r\n return Listener;\r\n\r\n })();\r\n\r\n _decide_meta_key = function() {\r\n if (navigator.userAgent.indexOf(\"Mac OS X\") !== -1) {\r\n _metakey = \"cmd\";\r\n }\r\n };\r\n\r\n _change_keycodes_by_browser = function() {\r\n if (navigator.userAgent.indexOf(\"Opera\") !== -1) {\r\n _keycode_dictionary[\"17\"] = \"cmd\";\r\n }\r\n };\r\n\r\n _convert_key_to_readable = function(k) {\r\n return _keycode_dictionary[k];\r\n };\r\n\r\n _filter_array = function(array, callback) {\r\n var element;\r\n if (array.filter) {\r\n return array.filter(callback);\r\n } else {\r\n return (function() {\r\n var _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = array.length; _i < _len; _i++) {\r\n element = array[_i];\r\n if (callback(element)) {\r\n _results.push(element);\r\n }\r\n }\r\n return _results;\r\n })();\r\n }\r\n };\r\n\r\n _compare_arrays = function(a1, a2) {\r\n var item, _i, _len;\r\n if (a1.length !== a2.length) {\r\n return false;\r\n }\r\n for (_i = 0, _len = a1.length; _i < _len; _i++) {\r\n item = a1[_i];\r\n if (__indexOf.call(a2, item) >= 0) {\r\n continue;\r\n }\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n _compare_arrays_sorted = function(a1, a2) {\r\n var i, _i, _ref;\r\n if (a1.length !== a2.length) {\r\n return false;\r\n }\r\n for (i = _i = 0, _ref = a1.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\r\n if (a1[i] !== a2[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n _is_array_in_array = function(a1, a2) {\r\n var item, _i, _len;\r\n for (_i = 0, _len = a1.length; _i < _len; _i++) {\r\n item = a1[_i];\r\n if (__indexOf.call(a2, item) < 0) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n _index_of_in_array = Array.prototype.indexOf || function(a, item) {\r\n var i, _i, _ref;\r\n for (i = _i = 0, _ref = a.length; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {\r\n if (a[i] === item) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n _is_array_in_array_sorted = function(a1, a2) {\r\n var index, item, prev, _i, _len;\r\n prev = 0;\r\n for (_i = 0, _len = a1.length; _i < _len; _i++) {\r\n item = a1[_i];\r\n index = _index_of_in_array.call(a2, item);\r\n if (index >= prev) {\r\n prev = index;\r\n } else {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n _log_error = function() {\r\n if (keypress.debug) {\r\n return console.log.apply(console, arguments);\r\n }\r\n };\r\n\r\n _key_is_valid = function(key) {\r\n var valid, valid_key, _;\r\n valid = false;\r\n for (_ in _keycode_dictionary) {\r\n valid_key = _keycode_dictionary[_];\r\n if (key === valid_key) {\r\n valid = true;\r\n break;\r\n }\r\n }\r\n if (!valid) {\r\n for (_ in _keycode_shifted_keys) {\r\n valid_key = _keycode_shifted_keys[_];\r\n if (key === valid_key) {\r\n valid = true;\r\n break;\r\n }\r\n }\r\n }\r\n return valid;\r\n };\r\n\r\n _validate_combo = function(combo) {\r\n var alt_name, i, key, mod_key, non_modifier_keys, property, validated, value, _i, _j, _k, _len, _len1, _ref, _ref1;\r\n validated = true;\r\n if (!combo.keys.length) {\r\n _log_error(\"You're trying to bind a combo with no keys:\", combo);\r\n }\r\n for (i = _i = 0, _ref = combo.keys.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\r\n key = combo.keys[i];\r\n alt_name = _keycode_alternate_names[key];\r\n if (alt_name) {\r\n key = combo.keys[i] = alt_name;\r\n }\r\n if (key === \"meta\") {\r\n combo.keys.splice(i, 1, _metakey);\r\n }\r\n if (key === \"cmd\") {\r\n _log_error(\"Warning: use the \\\"meta\\\" key rather than \\\"cmd\\\" for Windows compatibility\");\r\n }\r\n }\r\n _ref1 = combo.keys;\r\n for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\r\n key = _ref1[_j];\r\n if (!_key_is_valid(key)) {\r\n _log_error(\"Do not recognize the key \\\"\" + key + \"\\\"\");\r\n validated = false;\r\n }\r\n }\r\n if (__indexOf.call(combo.keys, \"meta\") >= 0 || __indexOf.call(combo.keys, \"cmd\") >= 0) {\r\n non_modifier_keys = combo.keys.slice();\r\n for (_k = 0, _len1 = _modifier_keys.length; _k < _len1; _k++) {\r\n mod_key = _modifier_keys[_k];\r\n if ((i = _index_of_in_array.call(non_modifier_keys, mod_key)) > -1) {\r\n non_modifier_keys.splice(i, 1);\r\n }\r\n }\r\n if (non_modifier_keys.length > 1) {\r\n _log_error(\"META and CMD key combos cannot have more than 1 non-modifier keys\", combo, non_modifier_keys);\r\n validated = false;\r\n }\r\n }\r\n for (property in combo) {\r\n value = combo[property];\r\n if (_factory_defaults[property] === \"undefined\") {\r\n _log_error(\"The property \" + property + \" is not a valid combo property. Your combo has still been registered.\");\r\n }\r\n }\r\n return validated;\r\n };\r\n\r\n _convert_to_shifted_key = function(key, e) {\r\n var k;\r\n if (!e.shiftKey) {\r\n return false;\r\n }\r\n k = _keycode_shifted_keys[key];\r\n if (k != null) {\r\n return k;\r\n }\r\n return false;\r\n };\r\n\r\n _modifier_event_mapping = {\r\n \"cmd\": \"metaKey\",\r\n \"ctrl\": \"ctrlKey\",\r\n \"shift\": \"shiftKey\",\r\n \"alt\": \"altKey\"\r\n };\r\n\r\n _keycode_alternate_names = {\r\n \"escape\": \"esc\",\r\n \"control\": \"ctrl\",\r\n \"command\": \"cmd\",\r\n \"break\": \"pause\",\r\n \"windows\": \"cmd\",\r\n \"option\": \"alt\",\r\n \"caps_lock\": \"caps\",\r\n \"apostrophe\": \"\\'\",\r\n \"semicolon\": \";\",\r\n \"tilde\": \"~\",\r\n \"accent\": \"`\",\r\n \"scroll_lock\": \"scroll\",\r\n \"num_lock\": \"num\"\r\n };\r\n\r\n _keycode_shifted_keys = {\r\n \"/\": \"?\",\r\n \".\": \">\",\r\n \",\": \"<\",\r\n \"\\'\": \"\\\"\",\r\n \";\": \":\",\r\n \"[\": \"{\",\r\n \"]\": \"}\",\r\n \"\\\\\": \"|\",\r\n \"`\": \"~\",\r\n \"=\": \"+\",\r\n \"-\": \"_\",\r\n \"1\": \"!\",\r\n \"2\": \"@\",\r\n \"3\": \"#\",\r\n \"4\": \"$\",\r\n \"5\": \"%\",\r\n \"6\": \"^\",\r\n \"7\": \"&\",\r\n \"8\": \"*\",\r\n \"9\": \"(\",\r\n \"0\": \")\"\r\n };\r\n\r\n _keycode_dictionary = {\r\n 0: \"\\\\\",\r\n 8: \"backspace\",\r\n 9: \"tab\",\r\n 12: \"num\",\r\n 13: \"enter\",\r\n 16: \"shift\",\r\n 17: \"ctrl\",\r\n 18: \"alt\",\r\n 19: \"pause\",\r\n 20: \"caps\",\r\n 27: \"esc\",\r\n 32: \"space\",\r\n 33: \"pageup\",\r\n 34: \"pagedown\",\r\n 35: \"end\",\r\n 36: \"home\",\r\n 37: \"left\",\r\n 38: \"up\",\r\n 39: \"right\",\r\n 40: \"down\",\r\n 44: \"print\",\r\n 45: \"insert\",\r\n 46: \"delete\",\r\n 48: \"0\",\r\n 49: \"1\",\r\n 50: \"2\",\r\n 51: \"3\",\r\n 52: \"4\",\r\n 53: \"5\",\r\n 54: \"6\",\r\n 55: \"7\",\r\n 56: \"8\",\r\n 57: \"9\",\r\n 65: \"a\",\r\n 66: \"b\",\r\n 67: \"c\",\r\n 68: \"d\",\r\n 69: \"e\",\r\n 70: \"f\",\r\n 71: \"g\",\r\n 72: \"h\",\r\n 73: \"i\",\r\n 74: \"j\",\r\n 75: \"k\",\r\n 76: \"l\",\r\n 77: \"m\",\r\n 78: \"n\",\r\n 79: \"o\",\r\n 80: \"p\",\r\n 81: \"q\",\r\n 82: \"r\",\r\n 83: \"s\",\r\n 84: \"t\",\r\n 85: \"u\",\r\n 86: \"v\",\r\n 87: \"w\",\r\n 88: \"x\",\r\n 89: \"y\",\r\n 90: \"z\",\r\n 91: \"cmd\",\r\n 92: \"cmd\",\r\n 93: \"cmd\",\r\n 96: \"num_0\",\r\n 97: \"num_1\",\r\n 98: \"num_2\",\r\n 99: \"num_3\",\r\n 100: \"num_4\",\r\n 101: \"num_5\",\r\n 102: \"num_6\",\r\n 103: \"num_7\",\r\n 104: \"num_8\",\r\n 105: \"num_9\",\r\n 106: \"num_multiply\",\r\n 107: \"num_add\",\r\n 108: \"num_enter\",\r\n 109: \"num_subtract\",\r\n 110: \"num_decimal\",\r\n 111: \"num_divide\",\r\n 112: \"f1\",\r\n 113: \"f2\",\r\n 114: \"f3\",\r\n 115: \"f4\",\r\n 116: \"f5\",\r\n 117: \"f6\",\r\n 118: \"f7\",\r\n 119: \"f8\",\r\n 120: \"f9\",\r\n 121: \"f10\",\r\n 122: \"f11\",\r\n 123: \"f12\",\r\n 124: \"print\",\r\n 144: \"num\",\r\n 145: \"scroll\",\r\n 186: \";\",\r\n 187: \"=\",\r\n 188: \",\",\r\n 189: \"-\",\r\n 190: \".\",\r\n 191: \"/\",\r\n 192: \"`\",\r\n 219: \"[\",\r\n 220: \"\\\\\",\r\n 221: \"]\",\r\n 222: \"\\'\",\r\n 223: \"`\",\r\n 224: \"cmd\",\r\n 225: \"alt\",\r\n 57392: \"ctrl\",\r\n 63289: \"num\",\r\n 59: \";\",\r\n 61: \"=\",\r\n 173: \"-\"\r\n };\r\n\r\n keypress._keycode_dictionary = _keycode_dictionary;\r\n\r\n keypress._is_array_in_array_sorted = _is_array_in_array_sorted;\r\n\r\n _decide_meta_key();\r\n\r\n _change_keycodes_by_browser();\r\n\r\n if (typeof define === \"function\" && define.amd) {\r\n define([], function() {\r\n return keypress;\r\n });\r\n } else if (typeof exports !== \"undefined\" && exports !== null) {\r\n exports.keypress = keypress;\r\n } else {\r\n window.keypress = keypress;\r\n }\r\n\r\n}).call(this);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/min-dependencies/lib/keypress.js","class Quality {\r\n constructor(callback){\r\n this.testCallback = callback;\r\n }\r\n\r\n Common(quality){\r\n // 0 1 2 3\r\n var composer = [ 0, 0, 0, 1 ];\r\n var antialias = [ 0, 1, 1, 0 ];\r\n var shadows = [ 0, 0, 1, 1 ];\r\n var renderSizeMul = [ .5, 1, 1, 1 ];\r\n \r\n var result = {\r\n composer: Boolean(composer[quality]), \r\n antialias: Boolean(antialias[quality]),\r\n shadows: Boolean(shadows[quality]),\r\n renderSizeMul: renderSizeMul[quality]\r\n };\r\n return result;\r\n }\r\n\r\n OnTestComplete(quality){\r\n var result = this.Common(quality);\r\n this.testCallback(result);\r\n }\r\n\r\n PerformanceTest1(){\r\n var quality = 2;\r\n // Test webgl supported shader precision, see WebGLRenderer, https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices\r\n this.OnTestComplete(quality);\r\n }\r\n\r\n}\r\n\r\nexport default Quality;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/Quality.js","import Utils from \"../utils/cik/Utils\";\r\n\r\n/**\r\n * @typedef RendererParams\r\n * @property {Boolean} antialias\r\n * @property {Boolean} shadows\r\n * @property {Boolean} shadowsAutoUpdate\r\n * @property {Number} clearColor - hex color 0xff7f00\r\n * @property {Number} renderSizeMul\r\n * @property {Boolean} composer\r\n */\r\n\r\n/** @type {RendererParams} */\r\nconst defaultParams = {\r\n antialias: true,\r\n shadows: true,\r\n shadowMapType: THREE.PCFSoftShadowMap,\r\n shadowsAutoUpdate: true,\r\n clearColor: 0xcfcfcf,\r\n renderSizeMul: 1,\r\n composer: false\r\n};\r\n\r\nclass Renderer {\r\n /**\r\n * @param {RendererParams} params \r\n */\r\n constructor(params) {\r\n\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n this.renderer = new THREE.WebGLRenderer({antialias: this.params.antialias});\r\n\r\n this.renderer.shadowMap.enabled = this.params.shadows;\r\n this.renderer.shadowMap.type = this.params.shadowMapType;\r\n this.renderer.shadowMap.autoUpdate = this.params.shadowsAutoUpdate;\r\n\r\n this.renderer.physicallyCorrectLights = true;\r\n this.renderer.gammaInput = true;\r\n this.renderer.gammaOutput = true;\r\n this.renderer.toneMapping = THREE.Uncharted2ToneMapping;\r\n this.renderer.toneMappingExposure = 1.4;\r\n //this.renderer.toneMappingExposure = ;\r\n \r\n this.maxTextureSize = this.renderer.context.getParameter(this.renderer.context.MAX_TEXTURE_SIZE);\r\n this.pixelRatio = window.devicePixelRatio !== undefined ? window.devicePixelRatio : 1;\r\n this.renderer.setPixelRatio(this.pixelRatio);\r\n this.renderer.setClearColor(new THREE.Color(this.params.clearColor), 1);\r\n\r\n this.ResizeRenderer = function(screen){\r\n var newWidth = screen.width * this.params.renderSizeMul;\r\n var newHeight = screen.height * this.params.renderSizeMul;\r\n this.renderer.setSize(newWidth, newHeight);\r\n };\r\n\r\n this.Render = function(scene, camera){\r\n this.renderer.render(scene, camera);\r\n };\r\n \r\n this.UpdateShadowMaps = function(){\r\n this.renderer.shadowMap.needsUpdate = true;\r\n };\r\n\r\n this.ResizeDomElement = function(screen){\r\n this.renderer.domElement.style.width = Math.floor(screen.width) + 'px';\r\n this.renderer.domElement.style.height = Math.floor(screen.height) + 'px';\r\n };\r\n\r\n this.AdjustCamera = function(screen, camera){\r\n camera.aspect = screen.width / screen.height;\r\n camera.updateProjectionMatrix();\r\n };\r\n\r\n this.ReconfigureViewport = function(screen, camera){\r\n this.AdjustCamera(screen, camera);\r\n\r\n this.ResizeRenderer(screen);\r\n this.ResizeDomElement(screen);\r\n };\r\n\r\n if(this.params.composer){\r\n Renderer.UseComposer(this);\r\n }\r\n }\r\n\r\n Dispose(){\r\n this.renderer.dispose();\r\n }\r\n\r\n static UseComposer (sceneRenderer){\r\n sceneRenderer.composer = new THREE.EffectComposer(sceneRenderer.renderer);\r\n sceneRenderer.renderPass = new THREE.RenderPass(undefined, undefined);\r\n sceneRenderer.renderPass.renderToScreen = true;\r\n sceneRenderer.composer.addPass(sceneRenderer.renderPass);\r\n sceneRenderer.renderPasses = [sceneRenderer.renderPass];\r\n\r\n sceneRenderer.UseCamera = function(camera){\r\n sceneRenderer.camera = camera;\r\n sceneRenderer.renderPass.camera = camera;\r\n };\r\n\r\n sceneRenderer.ResizeRenderer = function(screen){\r\n var newWidth = screen.width * sceneRenderer.params.renderSizeMul;\r\n var newHeight = screen.height * sceneRenderer.params.renderSizeMul;\r\n sceneRenderer.renderer.setSize(newWidth, newHeight);\r\n\r\n newWidth = Math.floor( newWidth / sceneRenderer.pixelRatio ) || 1;\r\n\t\t\tnewHeight = Math.floor( newWidth / sceneRenderer.pixelRatio ) || 1;\r\n\t\t\tsceneRenderer.composer.setSize( newWidth, newHeight );\r\n };\r\n\r\n sceneRenderer.Render = function(scene){\r\n sceneRenderer.renderPass.scene = scene;\r\n sceneRenderer.composer.render();\r\n };\r\n }\r\n}\r\n\r\nexport default Renderer;\n\n\n// WEBPACK FOOTER //\n// ./src/api/scene/Renderer.js","/**\r\n * @author qiao / https://github.com/qiao\r\n * @author mrdoob / http://mrdoob.com\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author erich666 / http://erichaines.com\r\n */\r\n\r\n// This set of controls performs orbiting, dollying (zooming), and panning.\r\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\r\n//\r\n// Orbit - left mouse / touch: one finger move\r\n// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\r\n// Pan - right mouse, or arrow keys / touch: three finger swipe\r\n\r\nTHREE.OrbitControls = function ( object, domElement ) {\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\r\n\r\n\t// Set to false to disable this control\r\n\tthis.enabled = true;\r\n\r\n\t// Rect areas that are ignored\r\n\tthis.ignoredAreas = [];\r\n\r\n\t// \"target\" sets the location of focus, where the object orbits around\r\n\tthis.target = new THREE.Vector3();\r\n\r\n\t// How far you can dolly in and out ( PerspectiveCamera only )\r\n\tthis.minDistance = 0;\r\n\tthis.maxDistance = Infinity;\r\n\r\n\t// How far you can zoom in and out ( OrthographicCamera only )\r\n\tthis.minZoom = 0;\r\n\tthis.maxZoom = Infinity;\r\n\r\n\t// How far you can orbit vertically, upper and lower limits.\r\n\t// Range is 0 to Math.PI radians.\r\n\tthis.minPolarAngle = 0; // radians\r\n\tthis.maxPolarAngle = Math.PI; // radians\r\n\r\n\t// How far you can orbit horizontally, upper and lower limits.\r\n\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\r\n\tthis.minAzimuthAngle = - Infinity; // radians\r\n\tthis.maxAzimuthAngle = Infinity; // radians\r\n\r\n\t// Set to true to enable damping (inertia)\r\n\t// If damping is enabled, you must call controls.update() in your animation loop\r\n\tthis.enableDamping = false;\r\n\tthis.dampingFactor = 0.25;\r\n\r\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\r\n\t// Set to false to disable zooming\r\n\tthis.enableZoom = true;\r\n\tthis.zoomSpeed = 1.0;\r\n\r\n\t// Set to false to disable rotating\r\n\tthis.enableRotate = true;\r\n\tthis.rotateSpeed = 1.0;\r\n\r\n\t// Set to false to disable panning\r\n\tthis.enablePan = true;\r\n\tthis.panningMode = THREE.ScreenSpacePanning; // alternate THREE.HorizontalPanning\r\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\r\n\r\n\t// Set to true to automatically rotate around the target\r\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\r\n\tthis.autoRotate = false;\r\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\r\n\r\n\t// Set to false to disable use of the keys\r\n\tthis.enableKeys = true;\r\n\r\n\t// The four arrow keys\r\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\r\n\r\n\t// Mouse buttons\r\n\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\r\n\r\n\t// for reset\r\n\tthis.target0 = this.target.clone();\r\n\tthis.position0 = this.object.position.clone();\r\n\tthis.zoom0 = this.object.zoom;\r\n\r\n\t//\r\n\t// public methods\r\n\t//\r\n\r\n\tthis.getPolarAngle = function () {\r\n\r\n\t\treturn spherical.phi;\r\n\r\n\t};\r\n\r\n\tthis.getAzimuthalAngle = function () {\r\n\r\n\t\treturn spherical.theta;\r\n\r\n\t};\r\n\r\n\tthis.saveState = function () {\r\n\r\n\t\tscope.target0.copy( scope.target );\r\n\t\tscope.position0.copy( scope.object.position );\r\n\t\tscope.zoom0 = scope.object.zoom;\r\n\r\n\t};\r\n\r\n\tthis.reset = function () {\r\n\r\n\t\tscope.target.copy( scope.target0 );\r\n\t\tscope.object.position.copy( scope.position0 );\r\n\t\tscope.object.zoom = scope.zoom0;\r\n\r\n\t\tscope.object.updateProjectionMatrix();\r\n\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\tscope.update();\r\n\r\n\t\tstate = STATE.NONE;\r\n\r\n\t};\r\n\r\n\t// this method is exposed, but perhaps it would be better if we can make it private...\r\n\tthis.update = function () {\r\n\r\n\t\tvar offset = new THREE.Vector3();\r\n\r\n\t\t// so camera.up is the orbit axis\r\n\t\tvar quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );\r\n\t\tvar quatInverse = quat.clone().inverse();\r\n\r\n\t\tvar lastPosition = new THREE.Vector3();\r\n\t\tvar lastQuaternion = new THREE.Quaternion();\r\n\r\n\t\treturn function update() {\r\n\r\n\t\t\tvar position = scope.object.position;\r\n\r\n\t\t\toffset.copy( position ).sub( scope.target );\r\n\r\n\t\t\t// rotate offset to \"y-axis-is-up\" space\r\n\t\t\toffset.applyQuaternion( quat );\r\n\r\n\t\t\t// angle from z-axis around y-axis\r\n\t\t\tspherical.setFromVector3( offset );\r\n\r\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\r\n\r\n\t\t\t\trotateLeft( getAutoRotationAngle() );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tspherical.theta += sphericalDelta.theta;\r\n\t\t\tspherical.phi += sphericalDelta.phi;\r\n\r\n\t\t\t// restrict theta to be between desired limits\r\n\t\t\tspherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );\r\n\r\n\t\t\t// restrict phi to be between desired limits\r\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\r\n\r\n\t\t\tspherical.makeSafe();\r\n\r\n\r\n\t\t\tspherical.radius *= scale;\r\n\r\n\t\t\t// restrict radius to be between desired limits\r\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\r\n\r\n\t\t\t// move target to panned location\r\n\t\t\tscope.target.add( panOffset );\r\n\r\n\t\t\toffset.setFromSpherical( spherical );\r\n\r\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\r\n\t\t\toffset.applyQuaternion( quatInverse );\r\n\r\n\t\t\tposition.copy( scope.target ).add( offset );\r\n\r\n\t\t\tscope.object.lookAt( scope.target );\r\n\r\n\t\t\tif ( scope.enableDamping === true ) {\r\n\r\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\r\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\r\n\r\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\r\n\r\n\t\t\t\tpanOffset.set( 0, 0, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tscale = 1;\r\n\r\n\t\t\t// update condition is:\r\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\r\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\r\n\r\n\t\t\tif ( zoomChanged ||\r\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\r\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\r\n\r\n\t\t\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\t\t\tlastPosition.copy( scope.object.position );\r\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\r\n\t\t\t\tzoomChanged = false;\r\n\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\tthis.dispose = function () {\r\n\r\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\r\n\t\tscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\r\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\r\n\r\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\r\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\r\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\r\n\r\n\t\tscope.domElement.removeEventListener( 'mousemove', onMouseMove, false );\r\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\r\n\r\n\t\twindow.removeEventListener( 'keydown', onKeyDown, false );\r\n\r\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\r\n\r\n\t};\r\n\r\n\t//\r\n\t// internals\r\n\t//\r\n\r\n\tvar scope = this;\r\n\r\n\tvar changeEvent = { type: 'change' };\r\n\tvar startEvent = { type: 'start' };\r\n\tvar endEvent = { type: 'end' };\r\n\r\n\tvar STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 };\r\n\r\n\tvar state = STATE.NONE;\r\n\r\n\tvar EPS = 0.000001;\r\n\r\n\t// current position in spherical coordinates\r\n\tvar spherical = new THREE.Spherical();\r\n\tvar sphericalDelta = new THREE.Spherical();\r\n\r\n\tvar scale = 1;\r\n\tvar panOffset = new THREE.Vector3();\r\n\tvar zoomChanged = false;\r\n\r\n\tvar rotateStart = new THREE.Vector2();\r\n\tvar rotateEnd = new THREE.Vector2();\r\n\tvar rotateDelta = new THREE.Vector2();\r\n\r\n\tvar panStart = new THREE.Vector2();\r\n\tvar panEnd = new THREE.Vector2();\r\n\tvar panDelta = new THREE.Vector2();\r\n\r\n\tvar dollyStart = new THREE.Vector2();\r\n\tvar dollyEnd = new THREE.Vector2();\r\n\tvar dollyDelta = new THREE.Vector2();\r\n\r\n\tfunction getAutoRotationAngle() {\r\n\r\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\r\n\r\n\t}\r\n\r\n\tfunction getZoomScale() {\r\n\r\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\r\n\r\n\t}\r\n\r\n\tfunction rotateLeft( angle ) {\r\n\r\n\t\tsphericalDelta.theta -= angle;\r\n\r\n\t}\r\n\r\n\tfunction rotateUp( angle ) {\r\n\r\n\t\tsphericalDelta.phi -= angle;\r\n\r\n\t}\r\n\r\n\tvar panLeft = function () {\r\n\r\n\t\tvar v = new THREE.Vector3();\r\n\r\n\t\treturn function panLeft( distance, objectMatrix ) {\r\n\r\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\r\n\t\t\tv.multiplyScalar( - distance );\r\n\r\n\t\t\tpanOffset.add( v );\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\tvar panUp = function () {\r\n\r\n\t\tvar v = new THREE.Vector3();\r\n\r\n\t\treturn function panUp( distance, objectMatrix ) {\r\n\r\n\t\t\tswitch ( scope.panningMode ) {\r\n\r\n\t\t\t\tcase THREE.ScreenSpacePanning:\r\n\r\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase THREE.HorizontalPanning:\r\n\r\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\r\n\t\t\t\t\tv.crossVectors( scope.object.up, v );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tv.multiplyScalar( distance );\r\n\r\n\t\t\tpanOffset.add( v );\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\t// deltaX and deltaY are in pixels; right and down are positive\r\n\tvar pan = function () {\r\n\r\n\t\tvar offset = new THREE.Vector3();\r\n\r\n\t\treturn function pan( deltaX, deltaY ) {\r\n\r\n\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\r\n\r\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\r\n\r\n\t\t\t\t// perspective\r\n\t\t\t\tvar position = scope.object.position;\r\n\t\t\t\toffset.copy( position ).sub( scope.target );\r\n\t\t\t\tvar targetDistance = offset.length();\r\n\r\n\t\t\t\t// half of the fov is center to top of screen\r\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\r\n\r\n\t\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\r\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\r\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\r\n\r\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\r\n\r\n\t\t\t\t// orthographic\r\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\r\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// camera neither orthographic nor perspective\r\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\r\n\t\t\t\tscope.enablePan = false;\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\tfunction dollyIn( dollyScale ) {\r\n\r\n\t\tif ( scope.object.isPerspectiveCamera ) {\r\n\r\n\t\t\tscale /= dollyScale;\r\n\r\n\t\t} else if ( scope.object.isOrthographicCamera ) {\r\n\r\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\r\n\t\t\tscope.object.updateProjectionMatrix();\r\n\t\t\tzoomChanged = true;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\r\n\t\t\tscope.enableZoom = false;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction dollyOut( dollyScale ) {\r\n\r\n\t\tif ( scope.object.isPerspectiveCamera ) {\r\n\r\n\t\t\tscale *= dollyScale;\r\n\r\n\t\t} else if ( scope.object.isOrthographicCamera ) {\r\n\r\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\r\n\t\t\tscope.object.updateProjectionMatrix();\r\n\t\t\tzoomChanged = true;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\r\n\t\t\tscope.enableZoom = false;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//\r\n\t// event callbacks - update the object state\r\n\t//\r\n\r\n\tfunction handleMouseDownRotate( event ) {\r\n\r\n\t\t//console.log( 'handleMouseDownRotate' );\r\n\r\n\t\trotateStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\tfunction handleMouseDownDolly( event ) {\r\n\r\n\t\t//console.log( 'handleMouseDownDolly' );\r\n\r\n\t\tdollyStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\tfunction handleMouseDownPan( event ) {\r\n\r\n\t\t//console.log( 'handleMouseDownPan' );\r\n\r\n\t\tpanStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\tfunction handleMouseMoveRotate( event ) {\r\n\r\n\t\t//console.log( 'handleMouseMoveRotate' );\r\n\r\n\t\trotateEnd.set( event.clientX, event.clientY );\r\n\t\trotateDelta.subVectors( rotateEnd, rotateStart );\r\n\r\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\r\n\r\n\t\t// rotating across whole screen goes 360 degrees around\r\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\r\n\r\n\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\r\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\r\n\r\n\t\trotateStart.copy( rotateEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleMouseMoveDolly( event ) {\r\n\r\n\t\t//console.log( 'handleMouseMoveDolly' );\r\n\r\n\t\tdollyEnd.set( event.clientX, event.clientY );\r\n\r\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\r\n\r\n\t\tif ( dollyDelta.y > 0 ) {\r\n\r\n\t\t\tdollyIn( getZoomScale() );\r\n\r\n\t\t} else if ( dollyDelta.y < 0 ) {\r\n\r\n\t\t\tdollyOut( getZoomScale() );\r\n\r\n\t\t}\r\n\r\n\t\tdollyStart.copy( dollyEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleMouseMovePan( event ) {\r\n\r\n\t\t//console.log( 'handleMouseMovePan' );\r\n\r\n\t\tpanEnd.set( event.clientX, event.clientY );\r\n\r\n\t\tpanDelta.subVectors( panEnd, panStart );\r\n\r\n\t\tpan( panDelta.x, panDelta.y );\r\n\r\n\t\tpanStart.copy( panEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleMouseUp( event ) {\r\n\r\n\t\t// console.log( 'handleMouseUp' );\r\n\r\n\t}\r\n\r\n\tfunction handleMouseWheel( event ) {\r\n\r\n\t\t// console.log( 'handleMouseWheel' );\r\n\r\n\t\tif ( event.deltaY < 0 ) {\r\n\r\n\t\t\tdollyOut( getZoomScale() );\r\n\r\n\t\t} else if ( event.deltaY > 0 ) {\r\n\r\n\t\t\tdollyIn( getZoomScale() );\r\n\r\n\t\t}\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleKeyDown( event ) {\r\n\r\n\t\t//console.log( 'handleKeyDown' );\r\n\r\n\t\tswitch ( event.keyCode ) {\r\n\r\n\t\t\tcase scope.keys.UP:\r\n\t\t\t\tpan( 0, scope.keyPanSpeed );\r\n\t\t\t\tscope.update();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.keys.BOTTOM:\r\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\r\n\t\t\t\tscope.update();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.keys.LEFT:\r\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\r\n\t\t\t\tscope.update();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.keys.RIGHT:\r\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\r\n\t\t\t\tscope.update();\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction handleTouchStartRotate( event ) {\r\n\r\n\t\t//console.log( 'handleTouchStartRotate' );\r\n\r\n\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\r\n\r\n\t}\r\n\r\n\tfunction handleTouchStartDolly( event ) {\r\n\r\n\t\t//console.log( 'handleTouchStartDolly' );\r\n\r\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\r\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\r\n\r\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\r\n\r\n\t\tdollyStart.set( 0, distance );\r\n\r\n\t}\r\n\r\n\tfunction handleTouchStartPan( event ) {\r\n\r\n\t\t//console.log( 'handleTouchStartPan' );\r\n\r\n\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\r\n\r\n\t}\r\n\r\n\tfunction handleTouchMoveRotate( event ) {\r\n\r\n\t\t//console.log( 'handleTouchMoveRotate' );\r\n\r\n\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\r\n\t\trotateDelta.subVectors( rotateEnd, rotateStart );\r\n\r\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\r\n\r\n\t\t// rotating across whole screen goes 360 degrees around\r\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\r\n\r\n\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\r\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\r\n\r\n\t\trotateStart.copy( rotateEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleTouchMoveDolly( event ) {\r\n\r\n\t\t//console.log( 'handleTouchMoveDolly' );\r\n\r\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\r\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\r\n\r\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\r\n\r\n\t\tdollyEnd.set( 0, distance );\r\n\r\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\r\n\r\n\t\tif ( dollyDelta.y > 0 ) {\r\n\r\n\t\t\tdollyOut( getZoomScale() );\r\n\r\n\t\t} else if ( dollyDelta.y < 0 ) {\r\n\r\n\t\t\tdollyIn( getZoomScale() );\r\n\r\n\t\t}\r\n\r\n\t\tdollyStart.copy( dollyEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleTouchMovePan( event ) {\r\n\r\n\t\t//console.log( 'handleTouchMovePan' );\r\n\r\n\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\r\n\r\n\t\tpanDelta.subVectors( panEnd, panStart );\r\n\r\n\t\tpan( panDelta.x, panDelta.y );\r\n\r\n\t\tpanStart.copy( panEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleTouchEnd( event ) {\r\n\r\n\t\t//console.log( 'handleTouchEnd' );\r\n\r\n\t}\r\n\r\n\tfunction checkIgnoredAreas( event ){\r\n\r\n\t\tvar rects = scope.ignoredAreas;\r\n\t\tfor(var i = 0; i < rects.length; i++){\r\n\t\t\t\r\n\t\t\tif(rects[i].ContainsPoint(event.clientX, event.clientY))\r\n\t\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t}\r\n\r\n\t//\r\n\t// event handlers - FSM: listen for events and reset state\r\n\t//\r\n\r\n\tfunction onMouseDown( event ) {\r\n\r\n\t\tif ( scope.enabled === false || checkIgnoredAreas( event ) ) return;\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tswitch ( event.button ) {\r\n\r\n\t\t\tcase scope.mouseButtons.ORBIT:\r\n\r\n\t\t\t\tif ( scope.enableRotate === false ) return;\r\n\r\n\t\t\t\thandleMouseDownRotate( event );\r\n\r\n\t\t\t\tstate = STATE.ROTATE;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.mouseButtons.ZOOM:\r\n\r\n\t\t\t\tif ( scope.enableZoom === false ) return;\r\n\r\n\t\t\t\thandleMouseDownDolly( event );\r\n\r\n\t\t\t\tstate = STATE.DOLLY;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.mouseButtons.PAN:\r\n\r\n\t\t\t\tif ( scope.enablePan === false ) return;\r\n\r\n\t\t\t\thandleMouseDownPan( event );\r\n\r\n\t\t\t\tstate = STATE.PAN;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t\tif ( state !== STATE.NONE ) {\r\n\r\n\t\t\tscope.domElement.addEventListener( 'mousemove', onMouseMove, false );\r\n\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\r\n\r\n\t\t\tscope.dispatchEvent( startEvent );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction onMouseMove( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tswitch ( state ) {\r\n\r\n\t\t\tcase STATE.ROTATE:\r\n\r\n\t\t\t\tif ( scope.enableRotate === false ) return;\r\n\r\n\t\t\t\thandleMouseMoveRotate( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase STATE.DOLLY:\r\n\r\n\t\t\t\tif ( scope.enableZoom === false ) return;\r\n\r\n\t\t\t\thandleMouseMoveDolly( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase STATE.PAN:\r\n\r\n\t\t\t\tif ( scope.enablePan === false ) return;\r\n\r\n\t\t\t\thandleMouseMovePan( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction onMouseUp( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\thandleMouseUp( event );\r\n\r\n\t\tscope.domElement.removeEventListener( 'mousemove', onMouseMove, false );\r\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\r\n\r\n\t\tscope.dispatchEvent( endEvent );\r\n\r\n\t\tstate = STATE.NONE;\r\n\r\n\t}\r\n\r\n\tfunction onMouseWheel( event ) {\r\n\r\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\r\n\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\r\n\t\tscope.dispatchEvent( startEvent );\r\n\r\n\t\thandleMouseWheel( event );\r\n\r\n\t\tscope.dispatchEvent( endEvent );\r\n\r\n\t}\r\n\r\n\tfunction onKeyDown( event ) {\r\n\r\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\r\n\r\n\t\thandleKeyDown( event );\r\n\r\n\t}\r\n\r\n\tfunction onTouchStart( event ) {\r\n\r\n\t\tif ( scope.enabled === false || checkIgnoredAreas( event ) ) return;\r\n\r\n\t\tswitch ( event.touches.length ) {\r\n\r\n\t\t\tcase 1:\t// one-fingered touch: rotate\r\n\r\n\t\t\t\tif ( scope.enableRotate === false ) return;\r\n\r\n\t\t\t\thandleTouchStartRotate( event );\r\n\r\n\t\t\t\tstate = STATE.TOUCH_ROTATE;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 2:\t// two-fingered touch: dolly\r\n\r\n\t\t\t\tif ( scope.enableZoom === false ) return;\r\n\r\n\t\t\t\thandleTouchStartDolly( event );\r\n\r\n\t\t\t\tstate = STATE.TOUCH_DOLLY;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 3: // three-fingered touch: pan\r\n\r\n\t\t\t\tif ( scope.enablePan === false ) return;\r\n\r\n\t\t\t\thandleTouchStartPan( event );\r\n\r\n\t\t\t\tstate = STATE.TOUCH_PAN;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\r\n\t\t\t\tstate = STATE.NONE;\r\n\r\n\t\t}\r\n\r\n\t\tif ( state !== STATE.NONE ) {\r\n\r\n\t\t\tscope.dispatchEvent( startEvent );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction onTouchMove( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\tevent.preventDefault();\r\n\t\tevent.stopPropagation();\r\n\r\n\t\tswitch ( event.touches.length ) {\r\n\r\n\t\t\tcase 1: // one-fingered touch: rotate\r\n\r\n\t\t\t\tif ( scope.enableRotate === false ) return;\r\n\t\t\t\tif ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?...\r\n\r\n\t\t\t\thandleTouchMoveRotate( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 2: // two-fingered touch: dolly\r\n\r\n\t\t\t\tif ( scope.enableZoom === false ) return;\r\n\t\t\t\tif ( state !== STATE.TOUCH_DOLLY ) return; // is this needed?...\r\n\r\n\t\t\t\thandleTouchMoveDolly( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 3: // three-fingered touch: pan\r\n\r\n\t\t\t\tif ( scope.enablePan === false ) return;\r\n\t\t\t\tif ( state !== STATE.TOUCH_PAN ) return; // is this needed?...\r\n\r\n\t\t\t\thandleTouchMovePan( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\r\n\t\t\t\tstate = STATE.NONE;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction onTouchEnd( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\thandleTouchEnd( event );\r\n\r\n\t\tscope.dispatchEvent( endEvent );\r\n\r\n\t\tstate = STATE.NONE;\r\n\r\n\t}\r\n\r\n\tfunction onContextMenu( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\r\n\r\n\tscope.domElement.addEventListener( 'mousedown', onMouseDown, false );\r\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\r\n\r\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\r\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\r\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\r\n\r\n\twindow.addEventListener( 'keydown', onKeyDown, false );\r\n\r\n\t// force an update at start\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nTHREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\r\nTHREE.OrbitControls.prototype.constructor = THREE.OrbitControls;\r\n\r\nObject.defineProperties( THREE.OrbitControls.prototype, {\r\n\r\n\tcenter: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .center has been renamed to .target' );\r\n\t\t\treturn this.target;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t// backward compatibility\r\n\r\n\tnoZoom: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\r\n\t\t\treturn ! this.enableZoom;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\r\n\t\t\tthis.enableZoom = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tnoRotate: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\r\n\t\t\treturn ! this.enableRotate;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\r\n\t\t\tthis.enableRotate = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tnoPan: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\r\n\t\t\treturn ! this.enablePan;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\r\n\t\t\tthis.enablePan = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tnoKeys: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\r\n\t\t\treturn ! this.enableKeys;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\r\n\t\t\tthis.enableKeys = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tstaticMoving: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\r\n\t\t\treturn ! this.enableDamping;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\r\n\t\t\tthis.enableDamping = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tdynamicDampingFactor: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\r\n\t\t\treturn this.dampingFactor;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\r\n\t\t\tthis.dampingFactor = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n} );\r\n\r\nTHREE.ScreenSpacePanning = 0;\r\nTHREE.HorizontalPanning = 1;\n\n\n// WEBPACK FOOTER //\n// ./src/min-dependencies/lib/three/controls/OrbitControls.js","import Controller from \"../scene/Controller\";\r\nimport Camera from \"../scene/Camera\";\r\nimport Transform from \"../scene/Transform\";\r\nimport Utils from \"../utils/cik/Utils\";\r\nimport EntryInputView, { EntryInputViewParams } from \"./EntryInputView\";\r\nimport CargoEntry from \"../components/common/CargoEntry\";\r\nimport SceneSetup from \"./SceneSetup\";\r\n\r\n/**\r\n * @typedef {Object} HUDViewParams\r\n * @property {import('../UX').default} ux\r\n * @property {SceneSetup} sceneSetup\r\n * @property {HTMLElement} container\r\n */\r\n\r\n/** @type {HUDViewParams} */\r\nconst defaultParams = {};\r\n\r\n// -11.3, 23.9, 215.5\r\nconst defaultCamTRS = new Transform( new THREE.Vector3(0, 100, 800), new THREE.Euler(0, Math.PI, 0) );\r\n\r\nclass HUDView extends Controller {\r\n /**\r\n * @param {HUDViewParams} params \r\n * @param {import('../scene/Camera').CameraParams} cameraParams \r\n */\r\n constructor(params, cameraParams){\r\n super(params);\r\n\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n\r\n let units = this.params.ux.params.units;\r\n\r\n this.cameraController = new Camera(cameraParams);\r\n\r\n this.cameraTransform = defaultCamTRS.Clone();\r\n this.cameraTransform.position.multiplyScalar(units);\r\n this.cameraTransform.Apply(this.cameraController);\r\n this.cameraController.camera.updateMatrixWorld();\r\n this.cameraController.OrbitControls(this.params.container);\r\n this.cameraController.SetTarget(new THREE.Vector3());\r\n this.cameraController.Hold();\r\n\r\n //var gridHelper = new THREE.GridHelper(100 * units, 20);\r\n //this.AddDefault(gridHelper);\r\n\r\n /** @type {EntryInputViewParams} */\r\n let entryInputViewParams = {ux: this.params.ux, sceneSetup: this.params.sceneSetup, scaleFigure: this.params.ux.params.scaleRefFigure};\r\n this.entryInputView = new EntryInputView(entryInputViewParams);\r\n this.AddDefault(this.entryInputView.view);\r\n\r\n this.lastUpdateTime = 0;\r\n\r\n this.params.sceneSetup.input.onMouseUp.push(this.OnMouseUp.bind(this));\r\n }\r\n\r\n OnMouseUp(){\r\n if(this.entryInputView.previewing){\r\n this.entryInputView.Preview(false);\r\n }\r\n }\r\n\r\n /**\r\n * @param {CargoEntry} entry \r\n */\r\n Preview(entry){\r\n this.entryInputView.Preview(entry);\r\n }\r\n\r\n /** @param {Number} now */\r\n Update(now){\r\n let deltaTime = now - this.lastUpdateTime;\r\n this.lastUpdateTime = now;\r\n this.cameraController.Update();\r\n \r\n this.entryInputView.Update(now, deltaTime);\r\n }\r\n}\r\n\r\nexport default HUDView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/HUDView.js","\r\nconst _position = Symbol('position');\r\nconst _rotation = Symbol('rotation');\r\n\r\nclass Transform {\r\n\r\n /**\r\n * @param {THREE.Vector3} position \r\n * @param {THREE.Euler} rotation \r\n */\r\n constructor(position, rotation){\r\n this[_position] = position || new THREE.Vector3();\r\n this[_rotation] = rotation || new THREE.Euler();\r\n }\r\n\r\n /**\r\n * @returns {THREE.Vector3}\r\n */\r\n get position(){\r\n return this[_position];\r\n }\r\n\r\n set position(value){\r\n this[_position] = value;\r\n }\r\n\r\n /**\r\n * @returns {THREE.Euler}\r\n */\r\n get rotation(){\r\n return this[_rotation];\r\n }\r\n\r\n set rotation(value){\r\n this[_rotation] = value;\r\n }\r\n\r\n /**\r\n * \r\n * @param {THREE.Object3D} target \r\n */\r\n Apply(target){\r\n target.position.copy(this[_position]);\r\n target.rotation.copy(this[_rotation]);\r\n }\r\n\r\n Clone(){\r\n var transform = new Transform(this[_position].clone(), this[_rotation].clone());\r\n return transform;\r\n }\r\n}\r\n\r\nexport default Transform;\n\n\n// WEBPACK FOOTER //\n// ./src/api/scene/Transform.js","import Logger from \"../../utils/cik/Logger\";\r\n\r\nconst _enabled = Symbol('enabled');\r\n\r\nclass PackingProperty {\r\n constructor(){\r\n this[_enabled] = false;\r\n }\r\n\r\n /** @returns {Boolean} Is property enabled */\r\n get enabled(){ return this[_enabled]; }\r\n set enabled(value){\r\n this[_enabled] = value;\r\n }\r\n\r\n Reset(){\r\n this.enabled = false;\r\n }\r\n\r\n /**\r\n * @param {PackingProperty} prop \r\n */\r\n Copy(prop){\r\n this.enabled = prop.enabled;\r\n }\r\n\r\n Clone(){\r\n Logger.Warn('PackingProperty.Clone is not implemented');\r\n }\r\n\r\n static Assert(prop){\r\n return prop instanceof PackingProperty;\r\n }\r\n}\r\n\r\nclass StackingProperty extends PackingProperty {\r\n constructor(){\r\n super();\r\n\r\n /** Maximum stacking capacity (weight) */\r\n this.capacity = Number.MAX_SAFE_INTEGER;\r\n }\r\n\r\n Reset(){\r\n super.Reset();\r\n this.capacity = Number.MAX_SAFE_INTEGER;\r\n }\r\n\r\n /**\r\n * @param {StackingProperty} prop \r\n */\r\n Copy(prop){\r\n super.Copy(prop);\r\n this.capacity = prop.capacity;\r\n }\r\n\r\n Clone(){\r\n var prop = new StackingProperty();\r\n prop.Copy(this);\r\n return prop;\r\n }\r\n}\r\n\r\nclass Constraint extends PackingProperty {\r\n constructor(){\r\n super();\r\n }\r\n\r\n Copy(prop){\r\n super.Copy(prop);\r\n }\r\n\r\n Clone(){\r\n Logger.Warn('Constraint.Clone is not implemented');\r\n }\r\n}\r\n\r\nconst orientations = { xyz: 'xyz', zyx: 'zyx', yxz: 'yxz', yzx: 'yzx', zxy: 'zxy', xzy: 'xzy' };\r\nconst _allowedOrientations = Symbol('allowedOrientations');\r\nclass RotationConstraint extends Constraint {\r\n constructor(){\r\n super();\r\n }\r\n\r\n /** Enables each orientation enumeration in array\r\n * @param {Array} value */\r\n set allowedOrientations(value){\r\n this[_allowedOrientations] = value;\r\n }\r\n get allowedOrientations(){ return this[_allowedOrientations]; }\r\n\r\n Reset(){\r\n super.Reset();\r\n if(this.allowedOrientations instanceof Array) this.allowedOrientations.length = 0;\r\n }\r\n\r\n /** @param {Boolean} allowX @param {Boolean} allowY @param {Boolean} allowZ */\r\n SetOrientationsByAxis(allowX, allowY, allowZ){\r\n let allowed = this.allowedOrientations;\r\n if(allowed) allowed.length = 0;\r\n else allowed = [];\r\n\r\n if(allowY){\r\n allowed.push(orientations.xyz, orientations.zyx);\r\n\r\n if(allowX) allowed.push(orientations.yzx);\r\n if(allowZ) allowed.push(orientations.zxy);\r\n }\r\n if(allowX) allowed.push(orientations.xzy);\r\n if(allowZ) allowed.push(orientations.yxz);\r\n\r\n this.allowedOrientations = allowed;\r\n }\r\n\r\n /** @param {Boolean} allowWH @param {Boolean} allowLH @param {Boolean} allowWL */\r\n SetOrientationsBySide(allowWH, allowLH, allowWL){\r\n let allowed = this.allowedOrientations;\r\n if(allowed) allowed.length = 0;\r\n else allowed = [];\r\n\r\n if(allowWH) allowed.push(orientations.yxz, orientations.yzx);\r\n if(allowLH) allowed.push(orientations.xzy, orientations.zxy);\r\n if(allowWL) allowed.push(orientations.xyz, orientations.zyx);\r\n\r\n this.allowedOrientations = allowed;\r\n }\r\n\r\n /**\r\n * @param {RotationConstraint} prop \r\n */\r\n Copy(prop){\r\n super.Copy(prop);\r\n this.allowedOrientations = prop.allowedOrientations instanceof Array ? prop.allowedOrientations.slice() : undefined;\r\n }\r\n\r\n Clone(){\r\n var prop = new RotationConstraint();\r\n prop.Copy(this);\r\n return prop;\r\n }\r\n\r\n /** Enumerations of orientation values, do not modify directly */\r\n static get orientations(){\r\n return orientations;\r\n }\r\n}\r\n\r\nclass TranslationConstraint extends Constraint {\r\n constructor(){\r\n super();\r\n\r\n /** Should be positioned on the platform surface (on the ground) */\r\n this.grounded = false;\r\n }\r\n\r\n Reset(){\r\n super.Reset();\r\n this.grounded = false;\r\n }\r\n\r\n /**\r\n * @param {TranslationConstraint} prop \r\n */\r\n Copy(prop){\r\n super.Copy(prop);\r\n this.grounded = prop.grounded;\r\n }\r\n\r\n Clone(){\r\n var prop = new TranslationConstraint();\r\n prop.Copy(this);\r\n return prop;\r\n }\r\n}\r\n\r\nexport {\r\n PackingProperty,\r\n StackingProperty,\r\n RotationConstraint,\r\n TranslationConstraint\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/box/PackingProperty.js","\r\nconst typeofNumber = 'number';\r\n\r\n/** @param {THREE.Color} source @param {Array} colors */\r\nfunction findNearest(source, colors){\r\n var dMin = Number.MAX_SAFE_INTEGER;\r\n var nearest = source;\r\n colors.forEach(color => {\r\n let vx = color.r - source.r,\r\n vy = color.g - source.g,\r\n vz = color.b - source.b;\r\n let d = vx * vx + vy * vy + vz * vz;\r\n if(d < dMin){\r\n dMin = d;\r\n nearest = color;\r\n }\r\n });\r\n\r\n return nearest;\r\n}\r\n\r\nvar tempColor = new THREE.Color();\r\n\r\nclass ColorTemplate{\r\n /**\r\n * @param {Array} colors \r\n */\r\n constructor(...colors){\r\n /** @type {Array} */\r\n this.colors = [];\r\n colors.forEach(color => {\r\n if( !(color instanceof THREE.Color) ) color = new THREE.Color(color);\r\n this.colors.push(color);\r\n });\r\n }\r\n\r\n /**\r\n * @template T\r\n * @param {T} target \r\n * @returns {T}\r\n */\r\n Apply(target){\r\n var scope = this;\r\n if(typeof target === typeofNumber){\r\n let mapColor = findNearest(tempColor.setHex(target), this.colors);\r\n target = mapColor.getHex();\r\n }\r\n else if(target instanceof THREE.Color){\r\n let mapColor = findNearest(target, this.colors);\r\n target.copy(mapColor);\r\n }\r\n else if(target instanceof THREE.Material){\r\n let color = target.color;\r\n if(color instanceof THREE.Color){\r\n let mapColor = findNearest(color, this.colors);\r\n color.copy(mapColor);\r\n }\r\n }\r\n else if(target instanceof THREE.Object3D){\r\n target.traverse(function(child){\r\n if(child instanceof THREE.Mesh){\r\n scope.Apply(child.material);\r\n }\r\n });\r\n }\r\n return target;\r\n }\r\n}\r\n\r\nexport default ColorTemplate;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/assets/ColorTemplate.js","import Tween from \"../Tween\";\r\nimport Signaler from \"../Signaler\";\r\n\r\nvar tempBox3 = new THREE.Box3();\r\nvar tempVec3 = new THREE.Vector3();\r\nvar clock = new THREE.Clock();\r\n\r\nclass TransitionController{\r\n constructor(){\r\n\r\n }\r\n}\r\n\r\nclass Slide extends TransitionController{\r\n /**\r\n * Slide from, to. ie: slideFromLeft -> from = 1 & to = 0\r\n * @param {string} property \r\n * @param {Number} from \r\n * @param {Number} to \r\n */\r\n constructor(property, from, to){\r\n super();\r\n\r\n this.tween = new Tween(Tween.functions.linear, 0, 0, 0);\r\n this.property = property;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n /** @param {Transition} transition */\r\n Init(transition){\r\n\r\n transition.bounds.getSize(tempVec3);\r\n let offset = tempVec3.x;\r\n transition.bounds.getCenter(tempVec3);\r\n offset += transition.target.position.x - tempVec3.x;\r\n\r\n this.tween.startValue = offset * this.from;\r\n this.tween.delta = -(offset * this.from) + offset * this.to;\r\n this.tween.duration = transition.duration;\r\n this.tween.onComplete = transition.OnComplete.bind(transition);\r\n\r\n this.tween.Hook(transition.target.position, this.property);\r\n }\r\n\r\n Start(){\r\n this.tween.Update(0);\r\n }\r\n\r\n /** @param {Number} t */\r\n Update(t){\r\n this.tween.Update(t);\r\n }\r\n}\r\n\r\nconst signals = {\r\n complete: 'complete'\r\n};\r\n\r\nconst _controller = Symbol('controller');\r\n\r\nclass Transition extends Signaler{\r\n /**\r\n * @param {THREE.Object3D} boundsView object to calculate bounds from\r\n * @param {THREE.Object3D} transformView object to transform\r\n * @param {Number} duration\r\n */\r\n constructor(boundsView, transformView, duration){\r\n super();\r\n \r\n this.bounds = new THREE.Box3();\r\n this.bounds.setFromObject(boundsView);\r\n\r\n this.target = transformView;\r\n this.duration = duration;\r\n }\r\n\r\n /** @param {TransitionController} value */\r\n set controller(value){\r\n this[_controller] = value;\r\n }\r\n\r\n get controller(){ return this[_controller]; }\r\n\r\n OnComplete(){\r\n this.Dispatch(signals.complete, this.controller);\r\n }\r\n\r\n Start(){\r\n this.startTime = clock.getElapsedTime();\r\n if(this.controller) this.controller.Start();\r\n }\r\n\r\n Update(){\r\n let t = clock.getElapsedTime() - this.startTime;\r\n if(this.controller) this.controller.Update(t);\r\n }\r\n\r\n static get signals(){\r\n return signals;\r\n }\r\n}\r\n\r\nexport {\r\n Transition, \r\n Slide\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/transitions/Transition.js","import App from \"../App\";\r\nimport LightDispatcher from \"./LightDispatcher\";\r\nimport Logger from \"../utils/cik/Logger\";\r\n\r\nconst _app = Symbol('app');\r\n\r\nconst typeofNumber = 'number';\r\n\r\nclass PackResults {\r\n \r\n /** @param {App} app */\r\n constructor(app){\r\n\r\n this[_app] = app;\r\n }\r\n\r\n get animationDuration(){ \r\n /** @type {App} */\r\n let app = this[_app];\r\n return app.view.packResultView.params.animationDuration;\r\n }\r\n set animationDuration(value){\r\n\r\n if(typeof value !== typeofNumber){\r\n Logger.Warn('PackResults.animationDuration error, parameter is not a number:', value);\r\n return;\r\n }\r\n\r\n /** @type {App} */\r\n let app = this[_app];\r\n app.view.packResultView.params.animationDuration = value; \r\n }\r\n\r\n /** Hides stacked boxes in viewer by vertical position\r\n * 0: None - 1: All (over y span)\r\n * @param {Number} value\r\n */\r\n SliceResults(value){\r\n\r\n if(typeof value !== typeofNumber){\r\n Logger.Warn('PackResults.SliceResults error, parameter is not a number:', value);\r\n return;\r\n }\r\n\r\n /** @type {App} */\r\n let app = this[_app];\r\n app.view.packResultView.Slice(value);\r\n }\r\n\r\n}\r\n\r\nconst visualizationSignals = {\r\n \r\n};\r\n\r\nclass Visualization extends LightDispatcher{\r\n \r\n /** @param {App} app */\r\n constructor(app){\r\n super();\r\n\r\n this[_app] = app;\r\n\r\n this.packResults = new PackResults(app);\r\n }\r\n\r\n /** Selects an entry in the scene, optionally highlighting packed instances\r\n * @param {string | Boolean} [entryUID] default = false (deselect) @param {Boolean} [highlightPackedInstances] default = true */\r\n SelectEntry(entryUID, highlightPackedInstances){\r\n /** @type {App} */\r\n let app = this[_app];\r\n\r\n if(entryUID && !app.packer.cargoList.GetEntry(entryUID)){\r\n Logger.Warn('Visualization.SelectEntry failed, entry not found for:', entryUID);\r\n return;\r\n }\r\n\r\n app.view.cargoListView.Select(entryUID);\r\n\r\n if(highlightPackedInstances === undefined) highlightPackedInstances = true;\r\n if(highlightPackedInstances || !entryUID) app.view.packResultView.SelectEntry(entryUID);\r\n }\r\n\r\n /** Enumeration of dispatched types */\r\n static get signals(){\r\n return visualizationSignals;\r\n }\r\n}\r\n\r\nexport default Visualization;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/Visualization.js","import LightDispatcher from \"./LightDispatcher\";\r\nimport App from \"../App\";\r\nimport CargoListView from \"../view/CargoListView\";\r\nimport CargoEntry from \"./common/CargoEntry\";\r\n\r\nconst _app = Symbol('app');\r\n\r\nconst signals = {\r\n boxEntryInteract: 'beInteract0'\r\n};\r\n\r\nclass User extends LightDispatcher{\r\n /** @param {App} app */\r\n constructor(app){\r\n super();\r\n\r\n this[_app] = app;\r\n\r\n let scope = this;\r\n /** @param {CargoEntry} cargoEntry */\r\n function onCargoInteract(cargoEntry){\r\n scope.Dispatch(signals.boxEntryInteract, cargoEntry.uid);\r\n }\r\n\r\n app.view.cargoListView.On(CargoListView.signals.interact, onCargoInteract);\r\n }\r\n\r\n /** Enumeration of dispatched types */\r\n static get signals(){\r\n return signals;\r\n }\r\n\r\n}\r\n\r\nexport default User;\n\n\n// WEBPACK FOOTER //\n// ./src/api/components/User.js","import CargoGroup from \"./CargoGroup\";\r\n\r\nvar _position = Symbol('position');\r\nvar _rotation = Symbol('rotation');\r\n\r\nclass PackingItem {\r\n constructor(){\r\n this[_position] = new THREE.Vector3();\r\n this[_rotation] = new THREE.Euler();\r\n }\r\n\r\n /** @returns {THREE.Vector3} */\r\n get position(){ return this[_position]; }\r\n set position(value){\r\n this[_position] = value;\r\n }\r\n\r\n /** @returns {THREE.Euler} */\r\n get rotation(){ return this[_position]; }\r\n set rotation(value){\r\n this[_rotation] = value;\r\n }\r\n}\r\n\r\nclass Cargo extends PackingItem {\r\n /**\r\n * \r\n * @param {CargoGroup} group\r\n */\r\n constructor(group){\r\n super();\r\n\r\n this.group = group;\r\n }\r\n\r\n get entry(){\r\n return this.group.entry;\r\n }\r\n\r\n Clone(){\r\n var cargo = new Cargo(this.group);\r\n return cargo;\r\n }\r\n\r\n ToString(){\r\n var output = 'Cargo(' + this.entry.ToString() + ')';\r\n\r\n return output;\r\n }\r\n}\r\n\r\nexport default Cargo;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/Cargo.js","import Utils from \"../../utils/cik/Utils\";\r\nimport Asset from \"../../components/assets/Asset\";\r\n\r\n/** @typedef FloatingShelfParams @property {THREE.Vector3} padding x z for padding, y for thickness @property {Number} colorHex */\r\n/** @type {FloatingShelfParams} */\r\nconst defaultParams = {\r\n padding: new THREE.Vector3(0, .001, 0),\r\n colorHex: 0xffffff\r\n};\r\n\r\nvar box3 = new THREE.Box3();\r\nvar vec3 = new THREE.Vector3();\r\n\r\nclass FloatingShelf{\r\n /** @param {THREE.Object3D} targetView @param {FloatingShelfParams} params */\r\n constructor(targetView, params){\r\n\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n\r\n this.targetView = targetView;\r\n this.view = new THREE.Object3D();\r\n\r\n let planeGeom = new THREE.BoxGeometry(1, 1, 1, 1, 1, 1);\r\n let planeMaterial = new Asset.CreateSolidMaterialMatte(this.params.colorHex);\r\n this.platformMesh = new THREE.Mesh(planeGeom, planeMaterial);\r\n Asset.ReceiveShadow(this.platformMesh);\r\n\r\n this.view.add(this.platformMesh);\r\n\r\n this.Update();\r\n }\r\n\r\n Update(){\r\n box3.setFromObject(this.targetView);\r\n const worldToLocal = new THREE.Matrix4().getInverse(this.targetView.matrixWorld);\r\n box3.applyMatrix4(worldToLocal);\r\n box3.getSize(vec3);\r\n let height = vec3.y;\r\n\r\n let padding = this.params.padding;\r\n let thickness = Math.max(.0001, padding.y);\r\n this.platformMesh.scale.set(Math.max(.0001, vec3.x + padding.x * 2), thickness, Math.max(.0001, vec3.z + padding.z * 2));\r\n\r\n box3.getCenter(vec3);\r\n this.platformMesh.position.set(vec3.x, vec3.y - height / 2 - thickness, vec3.z);\r\n }\r\n}\r\n\r\nexport default FloatingShelf;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/components/FloatingShelf.js","import Utils from \"../../utils/cik/Utils\";\r\n\r\n\r\nconst cubeGeometry = new THREE.BoxBufferGeometry(1, 1, 1, 1, 1, 1);\r\nconst outlineMaterial = new THREE.MeshBasicMaterial({side: THREE.BackSide, depthWrite:false, depthTest:true});\r\nconst boxOutlineMaterial = new THREE.MeshBasicMaterial({side: THREE.BackSide});\r\n\r\n/** @typedef OutlineParams @property {Number} color @property {Number} opacity @property {Number} offsetFactor @property {Number} offsetUnits */\r\n/** @type {OutlineParams} */\r\nconst defaultParams = {\r\n color: 0x000000,\r\n opacity: 1,\r\n offsetFactor: 1,\r\n offsetUnits: 1\r\n};\r\n\r\nvar tempBox3 = new THREE.Box3();\r\nvar tempMatrix4 = new THREE.Matrix4();\r\n\r\nclass Outline{\r\n\r\n /** @param {OutlineParams} params */\r\n constructor(params){\r\n\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n\r\n this.view = new THREE.Object3D();\r\n\r\n /** @type {Map} */\r\n this.outlines = new Map();\r\n }\r\n\r\n /** @param {THREE.Object3D} value */\r\n set object3d(value){\r\n if(!value) return this.Disable();\r\n\r\n this.view.visible = true;\r\n\r\n if(this.material === undefined) this.material = outlineMaterial.clone();\r\n let material = this.material;\r\n material.color.setHex(this.params.color);\r\n material.opacity = THREE.Math.clamp(this.params.opacity, 0, 1);\r\n material.transparent = true;//material.opacity < .999;\r\n material.polygonOffset = true;\r\n material.polygonOffsetFactor = -this.params.offsetFactor;\r\n material.polygonOffsetUnits = this.params.offsetUnits;\r\n\r\n let outline = this.outlines.get(value);\r\n if(!outline){\r\n outline = value.clone(true);\r\n if(outline instanceof THREE.Mesh){\r\n outline.material = material;\r\n }\r\n else{\r\n outline.children.forEach(oChild => oChild.traverse(function(child){\r\n if(child instanceof THREE.Mesh){\r\n let outlineReady = child.clone();\r\n outlineReady.material = material;\r\n if(child.parent){\r\n // Assuming end of hierarchical tree\r\n child.parent.add(outlineReady);\r\n child.parent.remove(child);\r\n }\r\n }\r\n }));\r\n }\r\n\r\n this.outlines.set(value, outline);\r\n }\r\n\r\n value.updateMatrixWorld();\r\n outline.matrixWorld.copy(value.matrixWorld);\r\n\r\n while(this.view.children.length > 0) this.view.remove(this.view.children[this.view.children.length - 1]);\r\n this.view.add(outline);\r\n }\r\n\r\n /** @param {THREE.Object3D} value */\r\n set box(value){\r\n if(!value) return this.Disable();\r\n\r\n this.view.visible = true;\r\n\r\n if(this.boxMaterial === undefined) this.boxMaterial = boxOutlineMaterial.clone();\r\n this.boxMaterial.color.setHex(this.params.color);\r\n this.boxMaterial.opacity = THREE.Math.clamp(this.params.opacity, 0, 1);\r\n this.boxMaterial.transparent = this.boxMaterial.opacity < .999;\r\n\r\n if(this.boxMesh === undefined){\r\n this.boxMesh = new THREE.Mesh(cubeGeometry, this.boxMaterial);\r\n }\r\n\r\n value.updateMatrixWorld();\r\n tempBox3.setFromObject(value);\r\n tempBox3.getSize(this.view.scale);\r\n this.view.scale.addScalar(this.params.offsetFactor);\r\n tempBox3.getCenter(this.view.position);\r\n\r\n let parent = this.view.parent;\r\n if(parent){\r\n parent.updateMatrixWorld();\r\n let inverse = tempMatrix4.getInverse(parent.matrixWorld);\r\n this.view.applyMatrix(inverse);\r\n }\r\n\r\n while(this.view.children.length > 0) this.view.remove(this.view.children[this.view.children.length - 1]);\r\n this.view.add(this.boxMesh);\r\n }\r\n\r\n Disable(){\r\n this.view.visible = false;\r\n }\r\n \r\n}\r\n\r\nexport default Outline;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/components/Outline.js","/**\r\n * @author arodic / https://github.com/arodic\r\n */\r\n\r\n( function () {\r\n\r\n\t'use strict';\r\n\r\n\tvar GizmoMaterial = function ( parameters ) {\r\n\r\n\t\tTHREE.MeshBasicMaterial.call( this );\r\n\r\n\t\tthis.depthTest = false;\r\n\t\tthis.depthWrite = false;\r\n\t\tthis.side = THREE.FrontSide;\r\n\t\tthis.transparent = true;\r\n\r\n\t\tthis.setValues( parameters );\r\n\r\n\t\tthis.oldColor = this.color.clone();\r\n\t\tthis.oldOpacity = this.opacity;\r\n\r\n\t\tthis.highlight = function( highlighted ) {\r\n\r\n\t\t\tif ( highlighted ) {\r\n\r\n\t\t\t\tthis.color.setRGB( 1, 1, 0 );\r\n\t\t\t\tthis.opacity = 1;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.color.copy( this.oldColor );\r\n\t\t\t\tthis.opacity = this.oldOpacity;\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGizmoMaterial.prototype = Object.create( THREE.MeshBasicMaterial.prototype );\r\n\tGizmoMaterial.prototype.constructor = GizmoMaterial;\r\n\r\n\r\n\tvar GizmoLineMaterial = function ( parameters ) {\r\n\r\n\t\tTHREE.LineBasicMaterial.call( this );\r\n\r\n\t\tthis.depthTest = false;\r\n\t\tthis.depthWrite = false;\r\n\t\tthis.transparent = true;\r\n\t\tthis.linewidth = 1;\r\n\r\n\t\tthis.setValues( parameters );\r\n\r\n\t\tthis.oldColor = this.color.clone();\r\n\t\tthis.oldOpacity = this.opacity;\r\n\r\n\t\tthis.highlight = function( highlighted ) {\r\n\r\n\t\t\tif ( highlighted ) {\r\n\r\n\t\t\t\tthis.color.setRGB( 1, 1, 0 );\r\n\t\t\t\tthis.opacity = 1;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis.color.copy( this.oldColor );\r\n\t\t\t\tthis.opacity = this.oldOpacity;\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGizmoLineMaterial.prototype = Object.create( THREE.LineBasicMaterial.prototype );\r\n\tGizmoLineMaterial.prototype.constructor = GizmoLineMaterial;\r\n\r\n\r\n\tvar pickerMaterial = new GizmoMaterial( { visible: false, transparent: false } );\r\n\r\n\r\n\tTHREE.TransformGizmo = function () {\r\n\r\n\t\tthis.init = function () {\r\n\r\n\t\t\tTHREE.Object3D.call( this );\r\n\r\n\t\t\tthis.handles = new THREE.Object3D();\r\n\t\t\tthis.pickers = new THREE.Object3D();\r\n\t\t\tthis.planes = new THREE.Object3D();\r\n\r\n\t\t\tthis.add( this.handles );\r\n\t\t\tthis.add( this.pickers );\r\n\t\t\tthis.add( this.planes );\r\n\r\n\t\t\t//// PLANES\r\n\r\n\t\t\tvar planeGeometry = new THREE.PlaneBufferGeometry( 50, 50, 2, 2 );\r\n\t\t\tvar planeMaterial = new THREE.MeshBasicMaterial( { visible: false, side: THREE.DoubleSide } );\r\n\r\n\t\t\tvar planes = {\r\n\t\t\t\t\"XY\": new THREE.Mesh( planeGeometry, planeMaterial ),\r\n\t\t\t\t\"YZ\": new THREE.Mesh( planeGeometry, planeMaterial ),\r\n\t\t\t\t\"XZ\": new THREE.Mesh( planeGeometry, planeMaterial ),\r\n\t\t\t\t\"XYZE\": new THREE.Mesh( planeGeometry, planeMaterial )\r\n\t\t\t};\r\n\r\n\t\t\tthis.activePlane = planes[ \"XYZE\" ];\r\n\r\n\t\t\tplanes[ \"YZ\" ].rotation.set( 0, Math.PI / 2, 0 );\r\n\t\t\tplanes[ \"XZ\" ].rotation.set( - Math.PI / 2, 0, 0 );\r\n\r\n\t\t\tfor ( var i in planes ) {\r\n\r\n\t\t\t\tplanes[ i ].name = i;\r\n\t\t\t\tthis.planes.add( planes[ i ] );\r\n\t\t\t\tthis.planes[ i ] = planes[ i ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//// HANDLES AND PICKERS\r\n\r\n\t\t\tvar setupGizmos = function( gizmoMap, parent ) {\r\n\r\n\t\t\t\tfor ( var name in gizmoMap ) {\r\n\r\n\t\t\t\t\tfor ( i = gizmoMap[ name ].length; i --; ) {\r\n\r\n\t\t\t\t\t\tvar object = gizmoMap[ name ][ i ][ 0 ];\r\n\t\t\t\t\t\tvar position = gizmoMap[ name ][ i ][ 1 ];\r\n\t\t\t\t\t\tvar rotation = gizmoMap[ name ][ i ][ 2 ];\r\n\r\n\t\t\t\t\t\tobject.name = name;\r\n\r\n\t\t\t\t\t\tif ( position ) object.position.set( position[ 0 ], position[ 1 ], position[ 2 ] );\r\n\t\t\t\t\t\tif ( rotation ) object.rotation.set( rotation[ 0 ], rotation[ 1 ], rotation[ 2 ] );\r\n\r\n\t\t\t\t\t\tparent.add( object );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t};\r\n\r\n\t\t\tsetupGizmos( this.handleGizmos, this.handles );\r\n\t\t\tsetupGizmos( this.pickerGizmos, this.pickers );\r\n\r\n\t\t\t// reset Transformations\r\n\r\n\t\t\tthis.traverse( function ( child ) {\r\n\r\n\t\t\t\tif ( child instanceof THREE.Mesh ) {\r\n\r\n\t\t\t\t\tchild.updateMatrix();\r\n\r\n\t\t\t\t\tvar tempGeometry = child.geometry.clone();\r\n\t\t\t\t\ttempGeometry.applyMatrix( child.matrix );\r\n\t\t\t\t\tchild.geometry = tempGeometry;\r\n\r\n\t\t\t\t\tchild.position.set( 0, 0, 0 );\r\n\t\t\t\t\tchild.rotation.set( 0, 0, 0 );\r\n\t\t\t\t\tchild.scale.set( 1, 1, 1 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} );\r\n\r\n\t\t};\r\n\r\n\t\tthis.highlight = function ( axis ) {\r\n\r\n\t\t\tthis.traverse( function( child ) {\r\n\r\n\t\t\t\tif ( child.material && child.material.highlight ) {\r\n\r\n\t\t\t\t\tif ( child.name === axis ) {\r\n\r\n\t\t\t\t\t\tchild.material.highlight( true );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tchild.material.highlight( false );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} );\r\n\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tTHREE.TransformGizmo.prototype = Object.create( THREE.Object3D.prototype );\r\n\tTHREE.TransformGizmo.prototype.constructor = THREE.TransformGizmo;\r\n\r\n\tTHREE.TransformGizmo.prototype.update = function ( rotation, eye ) {\r\n\r\n\t\tvar vec1 = new THREE.Vector3( 0, 0, 0 );\r\n\t\tvar vec2 = new THREE.Vector3( 0, 1, 0 );\r\n\t\tvar lookAtMatrix = new THREE.Matrix4();\r\n\r\n\t\tthis.traverse( function( child ) {\r\n\r\n\t\t\tif ( child.name.search( \"E\" ) !== - 1 ) {\r\n\r\n\t\t\t\tchild.quaternion.setFromRotationMatrix( lookAtMatrix.lookAt( eye, vec1, vec2 ) );\r\n\r\n\t\t\t} else if ( child.name.search( \"X\" ) !== - 1 || child.name.search( \"Y\" ) !== - 1 || child.name.search( \"Z\" ) !== - 1 ) {\r\n\r\n\t\t\t\tchild.quaternion.setFromEuler( rotation );\r\n\r\n\t\t\t}\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\tTHREE.TransformGizmoTranslate = function () {\r\n\r\n\t\tTHREE.TransformGizmo.call( this );\r\n\r\n\t\tvar arrowGeometry = new THREE.Geometry();\r\n\t\tvar mesh = new THREE.Mesh( new THREE.CylinderGeometry( 0, 0.05, 0.2, 12, 1, false ) );\r\n\t\tmesh.position.y = 0.5;\r\n\t\tmesh.updateMatrix();\r\n\r\n\t\tarrowGeometry.merge( mesh.geometry, mesh.matrix );\r\n\r\n\t\tvar lineXGeometry = new THREE.BufferGeometry();\r\n\t\tlineXGeometry.addAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 1, 0, 0 ], 3 ) );\r\n\r\n\t\tvar lineYGeometry = new THREE.BufferGeometry();\r\n\t\tlineYGeometry.addAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\r\n\r\n\t\tvar lineZGeometry = new THREE.BufferGeometry();\r\n\t\tlineZGeometry.addAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\r\n\r\n\t\tthis.handleGizmos = {\r\n\r\n\t\t\tX: [\r\n\t\t\t\t[ new THREE.Mesh( arrowGeometry, new GizmoMaterial( { color: 0xff0000 } ) ), [ 0.5, 0, 0 ], [ 0, 0, - Math.PI / 2 ] ],\r\n\t\t\t\t[ new THREE.Line( lineXGeometry, new GizmoLineMaterial( { color: 0xff0000 } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tY: [\r\n\t\t\t\t[ new THREE.Mesh( arrowGeometry, new GizmoMaterial( { color: 0x00ff00 } ) ), [ 0, 0.5, 0 ] ],\r\n\t\t\t\t[\tnew THREE.Line( lineYGeometry, new GizmoLineMaterial( { color: 0x00ff00 } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tZ: [\r\n\t\t\t\t[ new THREE.Mesh( arrowGeometry, new GizmoMaterial( { color: 0x0000ff } ) ), [ 0, 0, 0.5 ], [ Math.PI / 2, 0, 0 ] ],\r\n\t\t\t\t[ new THREE.Line( lineZGeometry, new GizmoLineMaterial( { color: 0x0000ff } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tXYZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.OctahedronGeometry( 0.1, 0 ), new GizmoMaterial( { color: 0xffffff, opacity: 0.25 } ) ), [ 0, 0, 0 ], [ 0, 0, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tXY: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.PlaneBufferGeometry( 0.29, 0.29 ), new GizmoMaterial( { color: 0xffff00, opacity: 0.25 } ) ), [ 0.15, 0.15, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tYZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.PlaneBufferGeometry( 0.29, 0.29 ), new GizmoMaterial( { color: 0x00ffff, opacity: 0.25 } ) ), [ 0, 0.15, 0.15 ], [ 0, Math.PI / 2, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tXZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.PlaneBufferGeometry( 0.29, 0.29 ), new GizmoMaterial( { color: 0xff00ff, opacity: 0.25 } ) ), [ 0.15, 0, 0.15 ], [ - Math.PI / 2, 0, 0 ] ]\r\n\t\t\t]\r\n\r\n\t\t};\r\n\r\n\t\tthis.pickerGizmos = {\r\n\r\n\t\t\tX: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.CylinderBufferGeometry( 0.2, 0, 1, 4, 1, false ), pickerMaterial ), [ 0.6, 0, 0 ], [ 0, 0, - Math.PI / 2 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tY: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.CylinderBufferGeometry( 0.2, 0, 1, 4, 1, false ), pickerMaterial ), [ 0, 0.6, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.CylinderBufferGeometry( 0.2, 0, 1, 4, 1, false ), pickerMaterial ), [ 0, 0, 0.6 ], [ Math.PI / 2, 0, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tXYZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.OctahedronGeometry( 0.2, 0 ), pickerMaterial ) ]\r\n\t\t\t],\r\n\r\n\t\t\tXY: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.PlaneBufferGeometry( 0.4, 0.4 ), pickerMaterial ), [ 0.2, 0.2, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tYZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.PlaneBufferGeometry( 0.4, 0.4 ), pickerMaterial ), [ 0, 0.2, 0.2 ], [ 0, Math.PI / 2, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tXZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.PlaneBufferGeometry( 0.4, 0.4 ), pickerMaterial ), [ 0.2, 0, 0.2 ], [ - Math.PI / 2, 0, 0 ] ]\r\n\t\t\t]\r\n\r\n\t\t};\r\n\r\n\t\tthis.setActivePlane = function ( axis, eye ) {\r\n\r\n\t\t\tvar tempMatrix = new THREE.Matrix4();\r\n\t\t\teye.applyMatrix4( tempMatrix.getInverse( tempMatrix.extractRotation( this.planes[ \"XY\" ].matrixWorld ) ) );\r\n\r\n\t\t\tif ( axis === \"X\" ) {\r\n\r\n\t\t\t\tthis.activePlane = this.planes[ \"XY\" ];\r\n\r\n\t\t\t\tif ( Math.abs( eye.y ) > Math.abs( eye.z ) ) this.activePlane = this.planes[ \"XZ\" ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( axis === \"Y\" ) {\r\n\r\n\t\t\t\tthis.activePlane = this.planes[ \"XY\" ];\r\n\r\n\t\t\t\tif ( Math.abs( eye.x ) > Math.abs( eye.z ) ) this.activePlane = this.planes[ \"YZ\" ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( axis === \"Z\" ) {\r\n\r\n\t\t\t\tthis.activePlane = this.planes[ \"XZ\" ];\r\n\r\n\t\t\t\tif ( Math.abs( eye.x ) > Math.abs( eye.y ) ) this.activePlane = this.planes[ \"YZ\" ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( axis === \"XYZ\" ) this.activePlane = this.planes[ \"XYZE\" ];\r\n\r\n\t\t\tif ( axis === \"XY\" ) this.activePlane = this.planes[ \"XY\" ];\r\n\r\n\t\t\tif ( axis === \"YZ\" ) this.activePlane = this.planes[ \"YZ\" ];\r\n\r\n\t\t\tif ( axis === \"XZ\" ) this.activePlane = this.planes[ \"XZ\" ];\r\n\r\n\t\t};\r\n\r\n\t\tthis.init();\r\n\r\n\t};\r\n\r\n\tTHREE.TransformGizmoTranslate.prototype = Object.create( THREE.TransformGizmo.prototype );\r\n\tTHREE.TransformGizmoTranslate.prototype.constructor = THREE.TransformGizmoTranslate;\r\n\r\n\tTHREE.TransformGizmoRotate = function () {\r\n\r\n\t\tTHREE.TransformGizmo.call( this );\r\n\r\n\t\tvar CircleGeometry = function ( radius, facing, arc ) {\r\n\r\n\t\t\tvar geometry = new THREE.BufferGeometry();\r\n\t\t\tvar vertices = [];\r\n\t\t\tarc = arc ? arc : 1;\r\n\r\n\t\t\tfor ( var i = 0; i <= 64 * arc; ++ i ) {\r\n\r\n\t\t\t\tif ( facing === 'x' ) vertices.push( 0, Math.cos( i / 32 * Math.PI ) * radius, Math.sin( i / 32 * Math.PI ) * radius );\r\n\t\t\t\tif ( facing === 'y' ) vertices.push( Math.cos( i / 32 * Math.PI ) * radius, 0, Math.sin( i / 32 * Math.PI ) * radius );\r\n\t\t\t\tif ( facing === 'z' ) vertices.push( Math.sin( i / 32 * Math.PI ) * radius, Math.cos( i / 32 * Math.PI ) * radius, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tgeometry.addAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );\r\n\t\t\treturn geometry;\r\n\r\n\t\t};\r\n\r\n\t\tthis.handleGizmos = {\r\n\r\n\t\t\tX: [\r\n\t\t\t\t[ new THREE.Line( new CircleGeometry( 1, 'x', 0.5 ), new GizmoLineMaterial( { color: 0xff0000 } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tY: [\r\n\t\t\t\t[ new THREE.Line( new CircleGeometry( 1, 'y', 0.5 ), new GizmoLineMaterial( { color: 0x00ff00 } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tZ: [\r\n\t\t\t\t[ new THREE.Line( new CircleGeometry( 1, 'z', 0.5 ), new GizmoLineMaterial( { color: 0x0000ff } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tE: [\r\n\t\t\t\t[ new THREE.Line( new CircleGeometry( 1.25, 'z', 1 ), new GizmoLineMaterial( { color: 0xcccc00 } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tXYZE: [\r\n\t\t\t\t[ new THREE.Line( new CircleGeometry( 1, 'z', 1 ), new GizmoLineMaterial( { color: 0x787878 } ) ) ]\r\n\t\t\t]\r\n\r\n\t\t};\r\n\r\n\t\tthis.pickerGizmos = {\r\n\r\n\t\t\tX: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.TorusBufferGeometry( 1, 0.12, 4, 12, Math.PI ), pickerMaterial ), [ 0, 0, 0 ], [ 0, - Math.PI / 2, - Math.PI / 2 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tY: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.TorusBufferGeometry( 1, 0.12, 4, 12, Math.PI ), pickerMaterial ), [ 0, 0, 0 ], [ Math.PI / 2, 0, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.TorusBufferGeometry( 1, 0.12, 4, 12, Math.PI ), pickerMaterial ), [ 0, 0, 0 ], [ 0, 0, - Math.PI / 2 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tE: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.TorusBufferGeometry( 1.25, 0.12, 2, 24 ), pickerMaterial ) ]\r\n\t\t\t],\r\n\r\n\t\t\tXYZE: [\r\n\t\t\t\t[ new THREE.Mesh() ]// TODO\r\n\t\t\t]\r\n\r\n\t\t};\r\n\r\n\t\tthis.setActivePlane = function ( axis ) {\r\n\r\n\t\t\tif ( axis === \"E\" ) this.activePlane = this.planes[ \"XYZE\" ];\r\n\r\n\t\t\tif ( axis === \"X\" ) this.activePlane = this.planes[ \"YZ\" ];\r\n\r\n\t\t\tif ( axis === \"Y\" ) this.activePlane = this.planes[ \"XZ\" ];\r\n\r\n\t\t\tif ( axis === \"Z\" ) this.activePlane = this.planes[ \"XY\" ];\r\n\r\n\t\t};\r\n\r\n\t\tthis.update = function ( rotation, eye2 ) {\r\n\r\n\t\t\tTHREE.TransformGizmo.prototype.update.apply( this, arguments );\r\n\r\n\t\t\tvar tempMatrix = new THREE.Matrix4();\r\n\t\t\tvar worldRotation = new THREE.Euler( 0, 0, 1 );\r\n\t\t\tvar tempQuaternion = new THREE.Quaternion();\r\n\t\t\tvar unitX = new THREE.Vector3( 1, 0, 0 );\r\n\t\t\tvar unitY = new THREE.Vector3( 0, 1, 0 );\r\n\t\t\tvar unitZ = new THREE.Vector3( 0, 0, 1 );\r\n\t\t\tvar quaternionX = new THREE.Quaternion();\r\n\t\t\tvar quaternionY = new THREE.Quaternion();\r\n\t\t\tvar quaternionZ = new THREE.Quaternion();\r\n\t\t\tvar eye = eye2.clone();\r\n\r\n\t\t\tworldRotation.copy( this.planes[ \"XY\" ].rotation );\r\n\t\t\ttempQuaternion.setFromEuler( worldRotation );\r\n\r\n\t\t\ttempMatrix.makeRotationFromQuaternion( tempQuaternion ).getInverse( tempMatrix );\r\n\t\t\teye.applyMatrix4( tempMatrix );\r\n\r\n\t\t\tthis.traverse( function( child ) {\r\n\r\n\t\t\t\ttempQuaternion.setFromEuler( worldRotation );\r\n\r\n\t\t\t\tif ( child.name === \"X\" ) {\r\n\r\n\t\t\t\t\tquaternionX.setFromAxisAngle( unitX, Math.atan2( - eye.y, eye.z ) );\r\n\t\t\t\t\ttempQuaternion.multiplyQuaternions( tempQuaternion, quaternionX );\r\n\t\t\t\t\tchild.quaternion.copy( tempQuaternion );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( child.name === \"Y\" ) {\r\n\r\n\t\t\t\t\tquaternionY.setFromAxisAngle( unitY, Math.atan2( eye.x, eye.z ) );\r\n\t\t\t\t\ttempQuaternion.multiplyQuaternions( tempQuaternion, quaternionY );\r\n\t\t\t\t\tchild.quaternion.copy( tempQuaternion );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( child.name === \"Z\" ) {\r\n\r\n\t\t\t\t\tquaternionZ.setFromAxisAngle( unitZ, Math.atan2( eye.y, eye.x ) );\r\n\t\t\t\t\ttempQuaternion.multiplyQuaternions( tempQuaternion, quaternionZ );\r\n\t\t\t\t\tchild.quaternion.copy( tempQuaternion );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} );\r\n\r\n\t\t};\r\n\r\n\t\tthis.init();\r\n\r\n\t};\r\n\r\n\tTHREE.TransformGizmoRotate.prototype = Object.create( THREE.TransformGizmo.prototype );\r\n\tTHREE.TransformGizmoRotate.prototype.constructor = THREE.TransformGizmoRotate;\r\n\r\n\tTHREE.TransformGizmoScale = function () {\r\n\r\n\t\tTHREE.TransformGizmo.call( this );\r\n\r\n\t\tvar arrowGeometry = new THREE.Geometry();\r\n\t\tvar mesh = new THREE.Mesh( new THREE.BoxGeometry( 0.125, 0.125, 0.125 ) );\r\n\t\tmesh.position.y = 0.5;\r\n\t\tmesh.updateMatrix();\r\n\r\n\t\tarrowGeometry.merge( mesh.geometry, mesh.matrix );\r\n\r\n\t\tvar lineXGeometry = new THREE.BufferGeometry();\r\n\t\tlineXGeometry.addAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 1, 0, 0 ], 3 ) );\r\n\r\n\t\tvar lineYGeometry = new THREE.BufferGeometry();\r\n\t\tlineYGeometry.addAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\r\n\r\n\t\tvar lineZGeometry = new THREE.BufferGeometry();\r\n\t\tlineZGeometry.addAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\r\n\r\n\t\tthis.handleGizmos = {\r\n\r\n\t\t\tX: [\r\n\t\t\t\t[ new THREE.Mesh( arrowGeometry, new GizmoMaterial( { color: 0xff0000 } ) ), [ 0.5, 0, 0 ], [ 0, 0, - Math.PI / 2 ] ],\r\n\t\t\t\t[ new THREE.Line( lineXGeometry, new GizmoLineMaterial( { color: 0xff0000 } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tY: [\r\n\t\t\t\t[ new THREE.Mesh( arrowGeometry, new GizmoMaterial( { color: 0x00ff00 } ) ), [ 0, 0.5, 0 ] ],\r\n\t\t\t\t[ new THREE.Line( lineYGeometry, new GizmoLineMaterial( { color: 0x00ff00 } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tZ: [\r\n\t\t\t\t[ new THREE.Mesh( arrowGeometry, new GizmoMaterial( { color: 0x0000ff } ) ), [ 0, 0, 0.5 ], [ Math.PI / 2, 0, 0 ] ],\r\n\t\t\t\t[ new THREE.Line( lineZGeometry, new GizmoLineMaterial( { color: 0x0000ff } ) ) ]\r\n\t\t\t],\r\n\r\n\t\t\tXYZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.BoxBufferGeometry( 0.125, 0.125, 0.125 ), new GizmoMaterial( { color: 0xffffff, opacity: 0.25 } ) ) ]\r\n\t\t\t]\r\n\r\n\t\t};\r\n\r\n\t\tthis.pickerGizmos = {\r\n\r\n\t\t\tX: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.CylinderBufferGeometry( 0.2, 0, 1, 4, 1, false ), pickerMaterial ), [ 0.6, 0, 0 ], [ 0, 0, - Math.PI / 2 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tY: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.CylinderBufferGeometry( 0.2, 0, 1, 4, 1, false ), pickerMaterial ), [ 0, 0.6, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.CylinderBufferGeometry( 0.2, 0, 1, 4, 1, false ), pickerMaterial ), [ 0, 0, 0.6 ], [ Math.PI / 2, 0, 0 ] ]\r\n\t\t\t],\r\n\r\n\t\t\tXYZ: [\r\n\t\t\t\t[ new THREE.Mesh( new THREE.BoxBufferGeometry( 0.4, 0.4, 0.4 ), pickerMaterial ) ]\r\n\t\t\t]\r\n\r\n\t\t};\r\n\r\n\t\tthis.setActivePlane = function ( axis, eye ) {\r\n\r\n\t\t\tvar tempMatrix = new THREE.Matrix4();\r\n\t\t\teye.applyMatrix4( tempMatrix.getInverse( tempMatrix.extractRotation( this.planes[ \"XY\" ].matrixWorld ) ) );\r\n\r\n\t\t\tif ( axis === \"X\" ) {\r\n\r\n\t\t\t\tthis.activePlane = this.planes[ \"XY\" ];\r\n\t\t\t\tif ( Math.abs( eye.y ) > Math.abs( eye.z ) ) this.activePlane = this.planes[ \"XZ\" ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( axis === \"Y\" ) {\r\n\r\n\t\t\t\tthis.activePlane = this.planes[ \"XY\" ];\r\n\t\t\t\tif ( Math.abs( eye.x ) > Math.abs( eye.z ) ) this.activePlane = this.planes[ \"YZ\" ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( axis === \"Z\" ) {\r\n\r\n\t\t\t\tthis.activePlane = this.planes[ \"XZ\" ];\r\n\t\t\t\tif ( Math.abs( eye.x ) > Math.abs( eye.y ) ) this.activePlane = this.planes[ \"YZ\" ];\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( axis === \"XYZ\" ) this.activePlane = this.planes[ \"XYZE\" ];\r\n\r\n\t\t};\r\n\r\n\t\tthis.init();\r\n\r\n\t};\r\n\r\n\tTHREE.TransformGizmoScale.prototype = Object.create( THREE.TransformGizmo.prototype );\r\n\tTHREE.TransformGizmoScale.prototype.constructor = THREE.TransformGizmoScale;\r\n\r\n\tTHREE.TransformControls = function ( camera, domElement ) {\r\n\r\n\t\t// TODO: Make non-uniform scale and rotate play nice in hierarchies\r\n\t\t// TODO: ADD RXYZ contol\r\n\r\n\t\tTHREE.Object3D.call( this );\r\n\r\n\t\tdomElement = ( domElement !== undefined ) ? domElement : document;\r\n\r\n\t\tthis.camera = camera;\r\n\t\tthis.object = undefined;\r\n\t\tthis.visible = false;\r\n\t\tthis.translationSnap = null;\r\n\t\tthis.rotationSnap = null;\r\n\t\tthis.space = \"world\";\r\n\t\tthis.size = 1;\r\n\t\tthis.axis = null;\r\n\r\n\t\tvar scope = this;\r\n\r\n\t\tvar _mode = \"translate\";\r\n\t\tvar _dragging = false;\r\n\t\tvar _gizmo = {\r\n\r\n\t\t\t\"translate\": new THREE.TransformGizmoTranslate(),\r\n\t\t\t\"rotate\": new THREE.TransformGizmoRotate(),\r\n\t\t\t\"scale\": new THREE.TransformGizmoScale()\r\n\t\t};\r\n\r\n\t\tfor ( var type in _gizmo ) {\r\n\r\n\t\t\tvar gizmoObj = _gizmo[ type ];\r\n\r\n\t\t\tgizmoObj.visible = ( type === _mode );\r\n\t\t\tthis.add( gizmoObj );\r\n\r\n\t\t}\r\n\r\n\t\tvar changeEvent = { type: \"change\" };\r\n\t\tvar mouseDownEvent = { type: \"mouseDown\" };\r\n\t\tvar mouseUpEvent = { type: \"mouseUp\", mode: _mode };\r\n\t\tvar objectChangeEvent = { type: \"objectChange\" };\r\n\r\n\t\tvar ray = new THREE.Raycaster();\r\n\t\tvar pointerVector = new THREE.Vector2();\r\n\r\n\t\tvar point = new THREE.Vector3();\r\n\t\tvar offset = new THREE.Vector3();\r\n\r\n\t\tvar rotation = new THREE.Vector3();\r\n\t\tvar offsetRotation = new THREE.Vector3();\r\n\t\tvar scale = 1;\r\n\r\n\t\tvar lookAtMatrix = new THREE.Matrix4();\r\n\t\tvar eye = new THREE.Vector3();\r\n\r\n\t\tvar tempMatrix = new THREE.Matrix4();\r\n\t\tvar tempVector = new THREE.Vector3();\r\n\t\tvar tempQuaternion = new THREE.Quaternion();\r\n\t\tvar unitX = new THREE.Vector3( 1, 0, 0 );\r\n\t\tvar unitY = new THREE.Vector3( 0, 1, 0 );\r\n\t\tvar unitZ = new THREE.Vector3( 0, 0, 1 );\r\n\r\n\t\tvar quaternionXYZ = new THREE.Quaternion();\r\n\t\tvar quaternionX = new THREE.Quaternion();\r\n\t\tvar quaternionY = new THREE.Quaternion();\r\n\t\tvar quaternionZ = new THREE.Quaternion();\r\n\t\tvar quaternionE = new THREE.Quaternion();\r\n\r\n\t\tvar oldPosition = new THREE.Vector3();\r\n\t\tvar oldScale = new THREE.Vector3();\r\n\t\tvar oldRotationMatrix = new THREE.Matrix4();\r\n\r\n\t\tvar parentRotationMatrix = new THREE.Matrix4();\r\n\t\tvar parentScale = new THREE.Vector3();\r\n\r\n\t\tvar worldPosition = new THREE.Vector3();\r\n\t\tvar worldRotation = new THREE.Euler();\r\n\t\tvar worldRotationMatrix = new THREE.Matrix4();\r\n\t\tvar camPosition = new THREE.Vector3();\r\n\t\tvar camRotation = new THREE.Euler();\r\n\r\n\t\tdomElement.addEventListener( \"mousedown\", onPointerDown, false );\r\n\t\tdomElement.addEventListener( \"touchstart\", onPointerDown, false );\r\n\r\n\t\tdomElement.addEventListener( \"mousemove\", onPointerHover, false );\r\n\t\tdomElement.addEventListener( \"touchmove\", onPointerHover, false );\r\n\r\n\t\tdomElement.addEventListener( \"mousemove\", onPointerMove, false );\r\n\t\tdomElement.addEventListener( \"touchmove\", onPointerMove, false );\r\n\r\n\t\tdomElement.addEventListener( \"mouseup\", onPointerUp, false );\r\n\t\tdomElement.addEventListener( \"mouseout\", onPointerUp, false );\r\n\t\tdomElement.addEventListener( \"touchend\", onPointerUp, false );\r\n\t\tdomElement.addEventListener( \"touchcancel\", onPointerUp, false );\r\n\t\tdomElement.addEventListener( \"touchleave\", onPointerUp, false );\r\n\r\n\t\tthis.dispose = function () {\r\n\r\n\t\t\tdomElement.removeEventListener( \"mousedown\", onPointerDown );\r\n\t\t\tdomElement.removeEventListener( \"touchstart\", onPointerDown );\r\n\r\n\t\t\tdomElement.removeEventListener( \"mousemove\", onPointerHover );\r\n\t\t\tdomElement.removeEventListener( \"touchmove\", onPointerHover );\r\n\r\n\t\t\tdomElement.removeEventListener( \"mousemove\", onPointerMove );\r\n\t\t\tdomElement.removeEventListener( \"touchmove\", onPointerMove );\r\n\r\n\t\t\tdomElement.removeEventListener( \"mouseup\", onPointerUp );\r\n\t\t\tdomElement.removeEventListener( \"mouseout\", onPointerUp );\r\n\t\t\tdomElement.removeEventListener( \"touchend\", onPointerUp );\r\n\t\t\tdomElement.removeEventListener( \"touchcancel\", onPointerUp );\r\n\t\t\tdomElement.removeEventListener( \"touchleave\", onPointerUp );\r\n\r\n\t\t};\r\n\r\n\t\tthis.attach = function ( object ) {\r\n\r\n\t\t\tthis.object = object;\r\n\t\t\tthis.visible = true;\r\n\t\t\tthis.update();\r\n\r\n\t\t};\r\n\r\n\t\tthis.detach = function () {\r\n\r\n\t\t\tthis.object = undefined;\r\n\t\t\tthis.visible = false;\r\n\t\t\tthis.axis = null;\r\n\r\n\t\t};\r\n\r\n\t\tthis.getMode = function () {\r\n\r\n\t\t\treturn _mode;\r\n\r\n\t\t};\r\n\r\n\t\tthis.setMode = function ( mode ) {\r\n\r\n\t\t\t_mode = mode ? mode : _mode;\r\n\r\n\t\t\tif ( _mode === \"scale\" ) scope.space = \"local\";\r\n\r\n\t\t\tfor ( var type in _gizmo ) _gizmo[ type ].visible = ( type === _mode );\r\n\r\n\t\t\tthis.update();\r\n\t\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\t};\r\n\r\n\t\tthis.setTranslationSnap = function ( translationSnap ) {\r\n\r\n\t\t\tscope.translationSnap = translationSnap;\r\n\r\n\t\t};\r\n\r\n\t\tthis.setRotationSnap = function ( rotationSnap ) {\r\n\r\n\t\t\tscope.rotationSnap = rotationSnap;\r\n\r\n\t\t};\r\n\r\n\t\tthis.setSize = function ( size ) {\r\n\r\n\t\t\tscope.size = size;\r\n\t\t\tthis.update();\r\n\t\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\t};\r\n\r\n\t\tthis.setSpace = function ( space ) {\r\n\r\n\t\t\tscope.space = space;\r\n\t\t\tthis.update();\r\n\t\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\t};\r\n\r\n\t\tthis.update = function () {\r\n\r\n\t\t\tif ( scope.object === undefined ) return;\r\n\r\n\t\t\tscope.object.updateMatrixWorld();\r\n\t\t\tworldPosition.setFromMatrixPosition( scope.object.matrixWorld );\r\n\t\t\tworldRotation.setFromRotationMatrix( tempMatrix.extractRotation( scope.object.matrixWorld ) );\r\n\r\n\t\t\tscope.camera.updateMatrixWorld();\r\n\t\t\tcamPosition.setFromMatrixPosition( scope.camera.matrixWorld );\r\n\t\t\tcamRotation.setFromRotationMatrix( tempMatrix.extractRotation( scope.camera.matrixWorld ) );\r\n\r\n\t\t\tscale = worldPosition.distanceTo( camPosition ) / 6 * scope.size;\r\n\t\t\tthis.position.copy( worldPosition );\r\n\t\t\tthis.scale.set( scale, scale, scale );\r\n\r\n\t\t\tif ( scope.camera instanceof THREE.PerspectiveCamera ) {\r\n\r\n\t\t\t\teye.copy( camPosition ).sub( worldPosition ).normalize();\r\n\r\n\t\t\t} else if ( scope.camera instanceof THREE.OrthographicCamera ) {\r\n\r\n\t\t\t\teye.copy( camPosition ).normalize();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( scope.space === \"local\" ) {\r\n\r\n\t\t\t\t_gizmo[ _mode ].update( worldRotation, eye );\r\n\r\n\t\t\t} else if ( scope.space === \"world\" ) {\r\n\r\n\t\t\t\t_gizmo[ _mode ].update( new THREE.Euler(), eye );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_gizmo[ _mode ].highlight( scope.axis );\r\n\r\n\t\t};\r\n\r\n\t\tfunction onPointerHover( event ) {\r\n\r\n\t\t\tif ( scope.object === undefined || _dragging === true || ( event.button !== undefined && event.button !== 0 ) ) return;\r\n\r\n\t\t\tvar pointer = event.changedTouches ? event.changedTouches[ 0 ] : event;\r\n\r\n\t\t\tvar intersect = intersectObjects( pointer, _gizmo[ _mode ].pickers.children );\r\n\r\n\t\t\tvar axis = null;\r\n\r\n\t\t\tif ( intersect ) {\r\n\r\n\t\t\t\taxis = intersect.object.name;\r\n\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( scope.axis !== axis ) {\r\n\r\n\t\t\t\tscope.axis = axis;\r\n\t\t\t\tscope.update();\r\n\t\t\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction onPointerDown( event ) {\r\n\r\n\t\t\tif ( scope.object === undefined || _dragging === true || ( event.button !== undefined && event.button !== 0 ) ) return;\r\n\r\n\t\t\tvar pointer = event.changedTouches ? event.changedTouches[ 0 ] : event;\r\n\r\n\t\t\tif ( pointer.button === 0 || pointer.button === undefined ) {\r\n\r\n\t\t\t\tvar intersect = intersectObjects( pointer, _gizmo[ _mode ].pickers.children );\r\n\r\n\t\t\t\tif ( intersect ) {\r\n\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t\t\tscope.dispatchEvent( mouseDownEvent );\r\n\r\n\t\t\t\t\tscope.axis = intersect.object.name;\r\n\r\n\t\t\t\t\tscope.update();\r\n\r\n\t\t\t\t\teye.copy( camPosition ).sub( worldPosition ).normalize();\r\n\r\n\t\t\t\t\t_gizmo[ _mode ].setActivePlane( scope.axis, eye );\r\n\r\n\t\t\t\t\tvar planeIntersect = intersectObjects( pointer, [ _gizmo[ _mode ].activePlane ] );\r\n\r\n\t\t\t\t\tif ( planeIntersect ) {\r\n\r\n\t\t\t\t\t\toldPosition.copy( scope.object.position );\r\n\t\t\t\t\t\toldScale.copy( scope.object.scale );\r\n\r\n\t\t\t\t\t\toldRotationMatrix.extractRotation( scope.object.matrix );\r\n\t\t\t\t\t\tworldRotationMatrix.extractRotation( scope.object.matrixWorld );\r\n\r\n\t\t\t\t\t\tparentRotationMatrix.extractRotation( scope.object.parent.matrixWorld );\r\n\t\t\t\t\t\tparentScale.setFromMatrixScale( tempMatrix.getInverse( scope.object.parent.matrixWorld ) );\r\n\r\n\t\t\t\t\t\toffset.copy( planeIntersect.point );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_dragging = true;\r\n\r\n\t\t}\r\n\r\n\t\tfunction onPointerMove( event ) {\r\n\r\n\t\t\tif ( scope.object === undefined || scope.axis === null || _dragging === false || ( event.button !== undefined && event.button !== 0 ) ) return;\r\n\r\n\t\t\tvar pointer = event.changedTouches ? event.changedTouches[ 0 ] : event;\r\n\r\n\t\t\tvar planeIntersect = intersectObjects( pointer, [ _gizmo[ _mode ].activePlane ] );\r\n\r\n\t\t\tif ( planeIntersect === false ) return;\r\n\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\r\n\t\t\tpoint.copy( planeIntersect.point );\r\n\r\n\t\t\tif ( _mode === \"translate\" ) {\r\n\r\n\t\t\t\tpoint.sub( offset );\r\n\t\t\t\tpoint.multiply( parentScale );\r\n\r\n\t\t\t\tif ( scope.space === \"local\" ) {\r\n\r\n\t\t\t\t\tpoint.applyMatrix4( tempMatrix.getInverse( worldRotationMatrix ) );\r\n\r\n\t\t\t\t\tif ( scope.axis.search( \"X\" ) === - 1 ) point.x = 0;\r\n\t\t\t\t\tif ( scope.axis.search( \"Y\" ) === - 1 ) point.y = 0;\r\n\t\t\t\t\tif ( scope.axis.search( \"Z\" ) === - 1 ) point.z = 0;\r\n\r\n\t\t\t\t\tpoint.applyMatrix4( oldRotationMatrix );\r\n\r\n\t\t\t\t\tscope.object.position.copy( oldPosition );\r\n\t\t\t\t\tscope.object.position.add( point );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( scope.space === \"world\" || scope.axis.search( \"XYZ\" ) !== - 1 ) {\r\n\r\n\t\t\t\t\tif ( scope.axis.search( \"X\" ) === - 1 ) point.x = 0;\r\n\t\t\t\t\tif ( scope.axis.search( \"Y\" ) === - 1 ) point.y = 0;\r\n\t\t\t\t\tif ( scope.axis.search( \"Z\" ) === - 1 ) point.z = 0;\r\n\r\n\t\t\t\t\tpoint.applyMatrix4( tempMatrix.getInverse( parentRotationMatrix ) );\r\n\r\n\t\t\t\t\tscope.object.position.copy( oldPosition );\r\n\t\t\t\t\tscope.object.position.add( point );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( scope.translationSnap !== null ) {\r\n\r\n\t\t\t\t\tif ( scope.space === \"local\" ) {\r\n\r\n\t\t\t\t\t\tscope.object.position.applyMatrix4( tempMatrix.getInverse( worldRotationMatrix ) );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( scope.axis.search( \"X\" ) !== - 1 ) scope.object.position.x = Math.round( scope.object.position.x / scope.translationSnap ) * scope.translationSnap;\r\n\t\t\t\t\tif ( scope.axis.search( \"Y\" ) !== - 1 ) scope.object.position.y = Math.round( scope.object.position.y / scope.translationSnap ) * scope.translationSnap;\r\n\t\t\t\t\tif ( scope.axis.search( \"Z\" ) !== - 1 ) scope.object.position.z = Math.round( scope.object.position.z / scope.translationSnap ) * scope.translationSnap;\r\n\r\n\t\t\t\t\tif ( scope.space === \"local\" ) {\r\n\r\n\t\t\t\t\t\tscope.object.position.applyMatrix4( worldRotationMatrix );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( _mode === \"scale\" ) {\r\n\r\n\t\t\t\tpoint.sub( offset );\r\n\t\t\t\tpoint.multiply( parentScale );\r\n\r\n\t\t\t\tif ( scope.space === \"local\" ) {\r\n\r\n\t\t\t\t\tif ( scope.axis === \"XYZ\" ) {\r\n\r\n\t\t\t\t\t\tscale = 1 + ( ( point.y ) / Math.max( oldScale.x, oldScale.y, oldScale.z ) );\r\n\r\n\t\t\t\t\t\tscope.object.scale.x = oldScale.x * scale;\r\n\t\t\t\t\t\tscope.object.scale.y = oldScale.y * scale;\r\n\t\t\t\t\t\tscope.object.scale.z = oldScale.z * scale;\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tpoint.applyMatrix4( tempMatrix.getInverse( worldRotationMatrix ) );\r\n\r\n\t\t\t\t\t\tif ( scope.axis === \"X\" ) scope.object.scale.x = oldScale.x * ( 1 + point.x / oldScale.x );\r\n\t\t\t\t\t\tif ( scope.axis === \"Y\" ) scope.object.scale.y = oldScale.y * ( 1 + point.y / oldScale.y );\r\n\t\t\t\t\t\tif ( scope.axis === \"Z\" ) scope.object.scale.z = oldScale.z * ( 1 + point.z / oldScale.z );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( _mode === \"rotate\" ) {\r\n\r\n\t\t\t\tpoint.sub( worldPosition );\r\n\t\t\t\tpoint.multiply( parentScale );\r\n\t\t\t\ttempVector.copy( offset ).sub( worldPosition );\r\n\t\t\t\ttempVector.multiply( parentScale );\r\n\r\n\t\t\t\tif ( scope.axis === \"E\" ) {\r\n\r\n\t\t\t\t\tpoint.applyMatrix4( tempMatrix.getInverse( lookAtMatrix ) );\r\n\t\t\t\t\ttempVector.applyMatrix4( tempMatrix.getInverse( lookAtMatrix ) );\r\n\r\n\t\t\t\t\trotation.set( Math.atan2( point.z, point.y ), Math.atan2( point.x, point.z ), Math.atan2( point.y, point.x ) );\r\n\t\t\t\t\toffsetRotation.set( Math.atan2( tempVector.z, tempVector.y ), Math.atan2( tempVector.x, tempVector.z ), Math.atan2( tempVector.y, tempVector.x ) );\r\n\r\n\t\t\t\t\ttempQuaternion.setFromRotationMatrix( tempMatrix.getInverse( parentRotationMatrix ) );\r\n\r\n\t\t\t\t\tquaternionE.setFromAxisAngle( eye, rotation.z - offsetRotation.z );\r\n\t\t\t\t\tquaternionXYZ.setFromRotationMatrix( worldRotationMatrix );\r\n\r\n\t\t\t\t\ttempQuaternion.multiplyQuaternions( tempQuaternion, quaternionE );\r\n\t\t\t\t\ttempQuaternion.multiplyQuaternions( tempQuaternion, quaternionXYZ );\r\n\r\n\t\t\t\t\tscope.object.quaternion.copy( tempQuaternion );\r\n\r\n\t\t\t\t} else if ( scope.axis === \"XYZE\" ) {\r\n\r\n\t\t\t\t\tquaternionE.setFromEuler( point.clone().cross( tempVector ).normalize() ); // rotation axis\r\n\r\n\t\t\t\t\ttempQuaternion.setFromRotationMatrix( tempMatrix.getInverse( parentRotationMatrix ) );\r\n\t\t\t\t\tquaternionX.setFromAxisAngle( quaternionE, - point.clone().angleTo( tempVector ) );\r\n\t\t\t\t\tquaternionXYZ.setFromRotationMatrix( worldRotationMatrix );\r\n\r\n\t\t\t\t\ttempQuaternion.multiplyQuaternions( tempQuaternion, quaternionX );\r\n\t\t\t\t\ttempQuaternion.multiplyQuaternions( tempQuaternion, quaternionXYZ );\r\n\r\n\t\t\t\t\tscope.object.quaternion.copy( tempQuaternion );\r\n\r\n\t\t\t\t} else if ( scope.space === \"local\" ) {\r\n\r\n\t\t\t\t\tpoint.applyMatrix4( tempMatrix.getInverse( worldRotationMatrix ) );\r\n\r\n\t\t\t\t\ttempVector.applyMatrix4( tempMatrix.getInverse( worldRotationMatrix ) );\r\n\r\n\t\t\t\t\trotation.set( Math.atan2( point.z, point.y ), Math.atan2( point.x, point.z ), Math.atan2( point.y, point.x ) );\r\n\t\t\t\t\toffsetRotation.set( Math.atan2( tempVector.z, tempVector.y ), Math.atan2( tempVector.x, tempVector.z ), Math.atan2( tempVector.y, tempVector.x ) );\r\n\r\n\t\t\t\t\tquaternionXYZ.setFromRotationMatrix( oldRotationMatrix );\r\n\r\n\t\t\t\t\tif ( scope.rotationSnap !== null ) {\r\n\r\n\t\t\t\t\t\tquaternionX.setFromAxisAngle( unitX, Math.round( ( rotation.x - offsetRotation.x ) / scope.rotationSnap ) * scope.rotationSnap );\r\n\t\t\t\t\t\tquaternionY.setFromAxisAngle( unitY, Math.round( ( rotation.y - offsetRotation.y ) / scope.rotationSnap ) * scope.rotationSnap );\r\n\t\t\t\t\t\tquaternionZ.setFromAxisAngle( unitZ, Math.round( ( rotation.z - offsetRotation.z ) / scope.rotationSnap ) * scope.rotationSnap );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tquaternionX.setFromAxisAngle( unitX, rotation.x - offsetRotation.x );\r\n\t\t\t\t\t\tquaternionY.setFromAxisAngle( unitY, rotation.y - offsetRotation.y );\r\n\t\t\t\t\t\tquaternionZ.setFromAxisAngle( unitZ, rotation.z - offsetRotation.z );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( scope.axis === \"X\" ) quaternionXYZ.multiplyQuaternions( quaternionXYZ, quaternionX );\r\n\t\t\t\t\tif ( scope.axis === \"Y\" ) quaternionXYZ.multiplyQuaternions( quaternionXYZ, quaternionY );\r\n\t\t\t\t\tif ( scope.axis === \"Z\" ) quaternionXYZ.multiplyQuaternions( quaternionXYZ, quaternionZ );\r\n\r\n\t\t\t\t\tscope.object.quaternion.copy( quaternionXYZ );\r\n\r\n\t\t\t\t} else if ( scope.space === \"world\" ) {\r\n\r\n\t\t\t\t\trotation.set( Math.atan2( point.z, point.y ), Math.atan2( point.x, point.z ), Math.atan2( point.y, point.x ) );\r\n\t\t\t\t\toffsetRotation.set( Math.atan2( tempVector.z, tempVector.y ), Math.atan2( tempVector.x, tempVector.z ), Math.atan2( tempVector.y, tempVector.x ) );\r\n\r\n\t\t\t\t\ttempQuaternion.setFromRotationMatrix( tempMatrix.getInverse( parentRotationMatrix ) );\r\n\r\n\t\t\t\t\tif ( scope.rotationSnap !== null ) {\r\n\r\n\t\t\t\t\t\tquaternionX.setFromAxisAngle( unitX, Math.round( ( rotation.x - offsetRotation.x ) / scope.rotationSnap ) * scope.rotationSnap );\r\n\t\t\t\t\t\tquaternionY.setFromAxisAngle( unitY, Math.round( ( rotation.y - offsetRotation.y ) / scope.rotationSnap ) * scope.rotationSnap );\r\n\t\t\t\t\t\tquaternionZ.setFromAxisAngle( unitZ, Math.round( ( rotation.z - offsetRotation.z ) / scope.rotationSnap ) * scope.rotationSnap );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tquaternionX.setFromAxisAngle( unitX, rotation.x - offsetRotation.x );\r\n\t\t\t\t\t\tquaternionY.setFromAxisAngle( unitY, rotation.y - offsetRotation.y );\r\n\t\t\t\t\t\tquaternionZ.setFromAxisAngle( unitZ, rotation.z - offsetRotation.z );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tquaternionXYZ.setFromRotationMatrix( worldRotationMatrix );\r\n\r\n\t\t\t\t\tif ( scope.axis === \"X\" ) tempQuaternion.multiplyQuaternions( tempQuaternion, quaternionX );\r\n\t\t\t\t\tif ( scope.axis === \"Y\" ) tempQuaternion.multiplyQuaternions( tempQuaternion, quaternionY );\r\n\t\t\t\t\tif ( scope.axis === \"Z\" ) tempQuaternion.multiplyQuaternions( tempQuaternion, quaternionZ );\r\n\r\n\t\t\t\t\ttempQuaternion.multiplyQuaternions( tempQuaternion, quaternionXYZ );\r\n\r\n\t\t\t\t\tscope.object.quaternion.copy( tempQuaternion );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tscope.update();\r\n\t\t\tscope.dispatchEvent( changeEvent );\r\n\t\t\tscope.dispatchEvent( objectChangeEvent );\r\n\r\n\t\t}\r\n\r\n\t\tfunction onPointerUp( event ) {\r\n\r\n\t\t\tevent.preventDefault(); // Prevent MouseEvent on mobile\r\n\r\n\t\t\tif ( event.button !== undefined && event.button !== 0 ) return;\r\n\r\n\t\t\tif ( _dragging && ( scope.axis !== null ) ) {\r\n\r\n\t\t\t\tmouseUpEvent.mode = _mode;\r\n\t\t\t\tscope.dispatchEvent( mouseUpEvent );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_dragging = false;\r\n\r\n\t\t\tif ( 'TouchEvent' in window && event instanceof TouchEvent ) {\r\n\r\n\t\t\t\t// Force \"rollover\"\r\n\r\n\t\t\t\tscope.axis = null;\r\n\t\t\t\tscope.update();\r\n\t\t\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tonPointerHover( event );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction intersectObjects( pointer, objects ) {\r\n\r\n\t\t\tvar rect = domElement.getBoundingClientRect();\r\n\t\t\tvar x = ( pointer.clientX - rect.left ) / rect.width;\r\n\t\t\tvar y = ( pointer.clientY - rect.top ) / rect.height;\r\n\r\n\t\t\tpointerVector.set( ( x * 2 ) - 1, - ( y * 2 ) + 1 );\r\n\t\t\tray.setFromCamera( pointerVector, scope.camera );\r\n\r\n\t\t\tvar intersections = ray.intersectObjects( objects, true );\r\n\t\t\treturn intersections[ 0 ] ? intersections[ 0 ] : false;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tTHREE.TransformControls.prototype = Object.create( THREE.Object3D.prototype );\r\n\tTHREE.TransformControls.prototype.constructor = THREE.TransformControls;\r\n\r\n}() );\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/min-dependencies/lib/three/controls/TransformControls.js","import Dimensions from \"../../components/box/Dimensions\";\r\nimport RuntimeTester from \"../../debug/RuntimeTester\";\r\n\r\nconst type = 'Volume';\r\nconst _box3 = Symbol('box3');\r\n\r\nclass Volume {\r\n constructor(){\r\n /**\r\n * @type {THREE.Vector3}\r\n */\r\n this.position = new THREE.Vector3();\r\n\r\n /**\r\n * @type {Dimensions}\r\n */\r\n this.dimensions = new Dimensions();\r\n\r\n this[_box3] = new THREE.Box3();\r\n }\r\n\r\n /** @returns {THREE.Box3} */\r\n get box3(){\r\n /** @type {THREE.Box3} */\r\n let b = this[_box3];\r\n b.setFromCenterAndSize(this.position, this.dimensions.vec3);\r\n return b;\r\n }\r\n\r\n toJSON(){\r\n return {\r\n type: type,\r\n position: this.position,\r\n dimensions: this.dimensions\r\n };\r\n }\r\n\r\n ToString(){\r\n return this.dimensions.ToString();\r\n }\r\n\r\n static FromJSON(data, volume){\r\n if( ! volume ) {\r\n if(data.type !== type) console.warn('Data supplied is not: ' + type);\r\n\r\n volume = new Volume();\r\n }\r\n\r\n volume.position = new THREE.Vector3(data.position.x, data.position.y, data.position.z);\r\n volume.dimensions = Dimensions.FromJSON(data.dimensions);\r\n\r\n RuntimeTester.Test('Dimensions.FromJSON', () => {\r\n return Dimensions.Assert(volume.dimensions);\r\n }, true);\r\n\r\n return volume;\r\n }\r\n}\r\n\r\nexport default Volume;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/container/Volume.js","/** @author chadiik */\r\n\r\nimport { epsilon, smallValue, smallValueSqrt } from \"./core/Math2D\";\r\nimport Region from \"./core/Region\";\r\nimport RegionsTree from \"./core/RegionsTree\";\r\nimport { Container, Item } from \"./core/Components\";\r\nimport { PackedItem, PackedContainer } from \"./core/PackedComponents\";\r\nimport Heuristic from \"./heuristics/Heuristic\";\r\nimport { debugLog, sleep } from './CUBDebug';\r\nimport HeuRegular from \"./heuristics/HeuRegular\";\r\nimport HeuParametric1 from \"./heuristics/HeuParametric1\";\r\n\r\nconst heuristics = {\r\n HeuRegular: HeuRegular,\r\n HeuParametric1: HeuParametric1\r\n};\r\n\r\nvar tempRegion = new Region();\r\n\r\nclass CUB{\r\n /**\r\n * @param {Container} container \r\n */\r\n constructor(container){\r\n \r\n this.container = container;\r\n this.packedContainer = new PackedContainer(container);\r\n\r\n let firstRegion = new Region(0, 0, 0, container.width, container.height, container.length, 0);\r\n firstRegion.SetWeights(0, container.weightCapacity, 0);\r\n this.regionsTree = new RegionsTree(firstRegion);\r\n }\r\n\r\n /** @param {PackedItem} packedItem @param {Boolean} [harsh] default = false */\r\n ProcessRegionsPerPackedItem(packedItem, harsh){\r\n let regions = this.regionsTree.regions;\r\n let itemVolume = packedItem.ref.volume;\r\n \r\n // Creates temporary region for following calculations\r\n let packedRegion = tempRegion.Set(packedItem.x, packedItem.y, packedItem.z, packedItem.packedWidth, packedItem.packedHeight, packedItem.packedLength, 0);\r\n packedRegion.SetWeights(packedItem.ref.weight, 0, packedItem.ref.stackingCapacity);\r\n\r\n for(let iRegion = 0; iRegion < regions.length; iRegion++){\r\n let region = regions[iRegion];\r\n\r\n if(itemVolume > region.volume && packedRegion.ContainsRegion(smallValue, region)){\r\n regions.splice(iRegion, 1);\r\n iRegion--;\r\n console.log('Contained region' + iRegion + ' deleted');\r\n continue;\r\n }\r\n\r\n if(packedRegion.Intersects(-smallValue, region)){\r\n\r\n if(harsh){\r\n console.log('\\tIntersecting region' + iRegion + ' deleted (!)');\r\n regions.slice(iRegion, 1);\r\n iRegion--;\r\n continue;\r\n }\r\n \r\n let regionRemains = this.regionsTree.Occupy(region, packedRegion);\r\n iRegion --;\r\n }\r\n }\r\n }\r\n\r\n ProcessRegionsForPackedItems(harsh){\r\n let packedItems = this.packedContainer.packedItems;\r\n let numPackedItems = packedItems.length;\r\n\r\n for(let iItem = 0; iItem < numPackedItems; iItem++){\r\n let packedItem = packedItems[iItem];\r\n this.ProcessRegionsPerPackedItem(packedItem, harsh);\r\n }\r\n }\r\n\r\n ProcessRegions(){\r\n\r\n let containerWidth = this.container.width,\r\n containerHeight = this.container.height;\r\n\r\n // Recalculate preferred insertion side per region (left or right)\r\n this.regionsTree.ProcessRegionsPreferredX(containerWidth);\r\n\r\n // Merge and expand free regions (can span several packed item tops)\r\n this.regionsTree.ProcessRegionsMergeExpand(containerWidth, containerHeight);\r\n\r\n // Removes regions that are completely enclosed in packed volumes, and correct any intersecting ones\r\n this.ProcessRegionsForPackedItems(false);\r\n\r\n // Removes unuseable regions\r\n this.regionsTree.ProcessRegionsForZeroRegions();\r\n\r\n // Removes regions that are completely enclosed in larger regions\r\n this.regionsTree.ProcessRegionsEnclosed();\r\n\r\n // Recalculate preferred insertion side per region (left or right)\r\n this.regionsTree.ProcessRegionsPreferredX(containerWidth);\r\n\r\n // Sort by z (first) and volume (second)\r\n this.regionsTree.Sort(Region.SortDeepestSmallest);\r\n }\r\n\r\n /** @param {Item} item @param {Heuristic} heuristic */\r\n FitUsingHeuristic(item, heuristic){\r\n \r\n let result = heuristic.Fit(item);\r\n\r\n if(result){\r\n let placement = result.packedRegion;\r\n placement.SetWeights(item.weight, 0, item.stackingCapacity);\r\n\r\n // Create a new packed item\r\n let packedItem = new PackedItem(item, placement.x, placement.y, placement.z, placement.width, placement.height, placement.length, result.orientation);\r\n\r\n // Reserve the tested sub region: regionFitTest from the containing region: region\r\n let regionRemains = this.regionsTree.Occupy(result.containingRegion, placement);\r\n\r\n return packedItem;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @param {Heuristic} heuristic @param {Heuristic} fallback */\r\n async Solve(heuristic, fallback){\r\n let scope = this;\r\n let packedContainer = this.packedContainer;\r\n\r\n let log = { successful: 0, failed: 0, heuristic: 0, fallback: 0 };\r\n\r\n // Helper function\r\n /** @param {Item} item @param {Heuristic} workingHeuristic @param {Boolean} final */\r\n function unpackItem(item, workingHeuristic, final){\r\n if(final) packedContainer.Unpack(item);\r\n workingHeuristic.Unpack(item);\r\n\r\n if(final) log.failed++;\r\n }\r\n\r\n // Helper function\r\n /** @param {PackedItem} packedItem @param {Heuristic} workingHeuristic */\r\n function packItem(packedItem, workingHeuristic){\r\n packedContainer.Pack(packedItem);\r\n packedItem.ref.quantity--;\r\n\r\n if(workingHeuristic === heuristic) log.heuristic++;\r\n else log.fallback++;\r\n\r\n log.successful++;\r\n }\r\n\r\n let nextItem;\r\n\r\n /** @param {Heuristic} workingHeuristic @param {Boolean} final */\r\n async function fitWith(workingHeuristic, final){\r\n while( nextItem = await workingHeuristic.NextItem() ){\r\n\r\n scope.ProcessRegions();\r\n packedContainer.packedItems.sort(PackedItem.Sort);\r\n \r\n // Try to pack item\r\n let packedItem = scope.FitUsingHeuristic(nextItem, workingHeuristic);\r\n \r\n if( packedItem === false ){\r\n unpackItem(nextItem, workingHeuristic, final);\r\n }\r\n else{\r\n packItem(packedItem, workingHeuristic);\r\n }\r\n \r\n /**/await sleep(30);\r\n }\r\n }\r\n\r\n await fitWith(heuristic, false);\r\n if(fallback){\r\n await fitWith(fallback, true);\r\n }\r\n\r\n console.log('Solved:', log);\r\n\r\n return packedContainer;\r\n }\r\n\r\n /** @param {Heuristic} heuristic @param {Heuristic} fallback */\r\n async Solve1(heuristic, fallback){\r\n let packedContainer = this.packedContainer;\r\n\r\n // Helper function\r\n /** @param {Item} item */\r\n function unpackItem(item){\r\n packedContainer.Unpack(item);\r\n heuristic.Unpack(item);\r\n \r\n if(fallback) fallback.Unpack(item);\r\n }\r\n\r\n // Helper function\r\n /** @param {PackedItem} packedItem */\r\n function packItem(packedItem){\r\n packedContainer.Pack(packedItem);\r\n packedItem.ref.quantity--;\r\n }\r\n\r\n let log = { successful: 0, failed: 0, heuristic: 0, fallback: 0 };\r\n\r\n let nextItem;\r\n while( nextItem = await heuristic.NextItem() ){\r\n\r\n this.ProcessRegions();\r\n packedContainer.packedItems.sort(PackedItem.Sort);\r\n\r\n // Try to pack item\r\n let packedItem = this.FitUsingHeuristic(nextItem, heuristic);\r\n if( packedItem ){\r\n log.heuristic++;\r\n }\r\n else if( fallback ){\r\n // Fallback if failed\r\n // nextItem = await fallback.NextItem();\r\n packedItem = this.FitUsingHeuristic(nextItem, fallback);\r\n\r\n log.fallback++;\r\n }\r\n\r\n if( packedItem === false ){\r\n\r\n unpackItem(nextItem);\r\n log.failed++;\r\n }\r\n else{\r\n\r\n packItem(packedItem);\r\n log.successful++;\r\n }\r\n\r\n /**/await sleep(200);\r\n }\r\n\r\n console.log('Solved:', log);\r\n\r\n return packedContainer;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * \r\n * @param {Container} container \r\n * @param {Array} items\r\n * @param {Heuristic} heuristic\r\n */\r\nasync function pack(container, items, heuristic){\r\n let cub = new CUB(container);\r\n\r\n heuristic.workingSet.SetItems(items);\r\n heuristic.workingSet.SetPackedContainer(cub.packedContainer);\r\n heuristic.workingSet.SetRegionsTree(cub.regionsTree);\r\n\r\n let fallback = new HeuRegular();\r\n fallback.workingSet.SetItems(items);\r\n fallback.workingSet.SetPackedContainer(cub.packedContainer);\r\n fallback.workingSet.SetRegionsTree(cub.regionsTree);\r\n\r\n let result = await cub.Solve(heuristic, fallback);\r\n \r\n return result;\r\n}\r\n\r\nexport {\r\n Item,\r\n Container,\r\n pack,\r\n heuristics\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/CUB.js","import Item from \"./components/Item\";\r\nimport Container from \"./components/Container\";\r\n\r\n\r\n/**\r\n * @param {Array} objects \r\n * @param {Array} m - mapping to Item.constructor, ie: [ID, Length, ...]\r\n */\r\nfunction toItems(objects, m){\r\n var items = [];\r\n objects.forEach(o => {\r\n items.push(new Item(o[m[0]], o[m[1]], o[m[2]], o[m[3]], o[m[4]]));\r\n });\r\n return items;\r\n}\r\n\r\nclass TestData{\r\n /**\r\n * @param {Container} container \r\n * @param {Array} items \r\n */\r\n constructor(container, items){\r\n this.container = container;\r\n this.items = items;\r\n }\r\n}\r\n\r\nclass AFitTest{\r\n\r\n static GenerateDataSample1(){\r\n var containerData = { ID: 1000, Name: 'Box1', Length: 15, Width: 13, Height: 9 };\r\n var itemsData = [\r\n { ID: 1000, Name: 'Item1', Length: 5, Width: 4, Height: 2, Quantity: 1 },\r\n\t\t { ID: 1001, Name: 'Item2', Length: 2, Width: 1, Height: 1, Quantity: 3 },\r\n\t\t { ID: 1002, Name: 'Item3', Length: 9, Width: 7, Height: 3, Quantity: 4 },\r\n\t\t { ID: 1003, Name: 'Item4', Length: 13, Width: 6, Height: 3, Quantity: 8 },\r\n\t\t { ID: 1004, Name: 'Item5', Length: 17, Width: 8, Height: 6, Quantity: 1 },\r\n { ID: 1005, Name: 'Item6', Length: 3, Width: 3, Height: 2, Quantity: 2 }\r\n ];\r\n\r\n var container = Object.assign(new Container(), containerData);\r\n var items = toItems(itemsData, ['ID', 'Length', 'Width', 'Height', 'Quantity']);\r\n\r\n var data = new TestData(container, items);\r\n return data;\r\n }\r\n\r\n static GenerateDataSample2(){\r\n var containerData = { ID: 1000, Name: 'Box1', Length: 60, Width: 35, Height: 25 };\r\n var itemsData = [\r\n { ID: 1000, Name: 'Item1', Length: 30, Width: 50, Height: 20, Quantity: 1 },\r\n\t\t { ID: 1003, Name: 'Item4', Length: 13, Width: 6, Height: 3, Quantity: 6 },\r\n\t\t { ID: 1004, Name: 'Item5', Length: 17, Width: 8, Height: 6, Quantity: 3 },\r\n { ID: 1005, Name: 'Item6', Length: 5, Width: 5, Height: 2, Quantity: 16 }\r\n ];\r\n\r\n var container = Object.assign(new Container(), containerData);\r\n var items = toItems(itemsData, ['ID', 'Length', 'Width', 'Height', 'Quantity']);\r\n\r\n var data = new TestData(container, items);\r\n return data;\r\n }\r\n\r\n static GenerateDataSampleFlatdeck(){\r\n var containerData = { ID: 1000, Name: 'Box1', Length: 576, Width: 102, Height: 102 };\r\n var itemsData = [\r\n { ID: 1000, Name: 'Item1', Length: 100, Width: 70, Height: 90, Quantity: 3 },\r\n\t\t { ID: 1003, Name: 'Item4', Length: 60, Width: 60, Height: 60, Quantity: 7 },\r\n\t\t { ID: 1004, Name: 'Item5', Length: 40, Width: 20, Height: 30, Quantity: 4 },\r\n { ID: 1005, Name: 'Item6', Length: 30, Width: 20, Height: 30, Quantity: 20 }\r\n ];\r\n\r\n var container = Object.assign(new Container(), containerData);\r\n var items = toItems(itemsData, ['ID', 'Length', 'Width', 'Height', 'Quantity']);\r\n\r\n var data = new TestData(container, items);\r\n return data;\r\n }\r\n\r\n static GenerateDataSampleFlatdeck2(){\r\n var containerData = { ID: 1000, Name: 'Box1', Length: 576, Width: 102, Height: 102, WeightCapacity: 48000 };\r\n var itemsData = [\r\n { ID: 1000, Name: 'Item1', Length: 100, Width: 70, Height: 90, Quantity: 3 },\r\n\t\t { ID: 1003, Name: 'Item4', Length: 60, Width: 60, Height: 60, Quantity: 7, StackingCapacity: 0 },\r\n\t\t { ID: 1004, Name: 'Item5', Length: 40, Width: 28, Height: 30, Quantity: 4 },\r\n { ID: 1005, Name: 'Item6', Length: 30, Width: 23, Height: 34, Quantity: 20 },\r\n { ID: 1005, Name: 'Item6', Length: 45, Width: 20, Height: 30, Quantity: 30 },\r\n { ID: 1005, Name: 'Item6', Length: 35, Width: 22, Height: 18, Quantity: 27 }\r\n ];\r\n\r\n var container = Object.assign(new Container(), containerData);\r\n var items = toItems(itemsData, ['ID', 'Length', 'Width', 'Height', 'Quantity']);\r\n\r\n var data = new TestData(container, items);\r\n return data;\r\n }\r\n}\r\n\r\nexport default AFitTest;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/afit/AFitTest.js","\r\nfunction almost(n1, n2){\r\n return Math.abs(n1 - n2) < .01;\r\n}\r\n\r\nclass Item{\r\n /**\r\n * @param {Object} id \r\n * @param {Number} dim1 \r\n * @param {Number} dim2 \r\n * @param {Number} dim3 \r\n * @param {Number} quantity \r\n */\r\n constructor(id, dim1, dim2, dim3, quantity){\r\n this.ID = id;\r\n this.IsPacked = false;\r\n this.Dim1 = dim2;\r\n this.Dim2 = dim1;\r\n this.Dim3 = dim3;\r\n this.CoordX = 0;\r\n this.CoordY = 0;\r\n this.CoordZ = 0;\r\n this.Quantity = quantity;\r\n this.PackDimX = 0;\r\n this.PackDimY = 0;\r\n this.PackDimZ = 0;\r\n this.Volume = this.Dim1 * this.Dim2 * this.Dim3;\r\n }\r\n\r\n /** \r\n * @param {Item} item\r\n * @returns {string} - axis order (xyz, xzy, yxz, yzx, zxy or zyx)\r\n */\r\n static ResolveOrientation(item){\r\n var w = item.Dim1, l = item.Dim2, h = item.Dim3;\r\n\r\n if(almost(item.PackDimX, w)){ // x\r\n if(almost(item.PackDimY, h)){ // y\r\n return 'xyz';\r\n }\r\n else if(almost(item.PackDimY, l)){ // z\r\n return 'xzy';\r\n }\r\n }\r\n else if(almost(item.PackDimX, h)){ // y\r\n if(almost(item.PackDimY, w)){ // x\r\n return 'yxz';\r\n }\r\n else if(almost(item.PackDimY, l)){ // z\r\n return 'yzx';\r\n }\r\n }\r\n else if(almost(item.PackDimX, l)){ // z\r\n if(almost(item.PackDimY, w)){ // x\r\n return 'zxy';\r\n }\r\n else if(almost(item.PackDimY, h)){ // y\r\n return 'zyx';\r\n }\r\n }\r\n\r\n return 'xyz';\r\n }\r\n}\r\n\r\nexport default Item;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/afit/components/Item.js","\r\nclass Container{\r\n /**\r\n * @param {Object} id \r\n * @param {Number} width \r\n * @param {Number} length \r\n * @param {Number} height \r\n */\r\n constructor(id, width, length, height){\r\n this.ID = id;\r\n\r\n this.Width = length || 0;\r\n this.Length = width || 0;\r\n this.Height = height || 0;\r\n }\r\n}\r\n\r\nexport default Container;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/afit/components/Container.js","import { epsilon, smallValue, smallValueSqrt } from \"../core/Math2D\";\r\nimport Heuristic from \"./Heuristic\";\r\nimport { Item } from \"../core/Components\";\r\nimport Region from \"../core/Region\";\r\n\r\nclass HeuRegularParams extends Heuristic.Params{\r\n constructor(){ super(); }\r\n}\r\n\r\nvar tempRegion = new Region();\r\n\r\nclass HeuRegularSet extends Heuristic.WorkingSet{\r\n constructor(...args){\r\n super(...args);\r\n }\r\n\r\n /** @param {Array} items */\r\n SetItems(items){\r\n super.SetItems(items);\r\n \r\n this.items.sort(Item.VolumeSort);\r\n }\r\n\r\n /** @param {Region} region */\r\n FitFunction(region){\r\n let item = this.workingItem;\r\n let validOrientations = item.validOrientations;\r\n for(let iOrient = 0; iOrient < validOrientations.length; iOrient++){\r\n let orientation = validOrientations[iOrient];\r\n\r\n let dimensions = item.GetOrientedDimensions(orientation);\r\n\r\n // Fit test (success: Region, failure: false)\r\n let regionFitTest = region.FitTest(smallValue, \r\n dimensions[0], dimensions[1], dimensions[2],\r\n item.weight, item.grounded,\r\n tempRegion);\r\n if(regionFitTest !== false){\r\n\r\n let result = new Heuristic.Result(region, regionFitTest, orientation);\r\n return result;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nclass HeuRegular extends Heuristic{\r\n constructor(){\r\n\r\n let params = undefined;\r\n super(params, HeuRegularSet);\r\n\r\n /** @type {HeuRegularSet} */\r\n this.workingSet;\r\n }\r\n\r\n /** @param {Item} item */\r\n Fit(item){\r\n let result = false;\r\n let validItem = this.workingSet.SetWorkingItem(item);\r\n\r\n if(validItem){\r\n result = this.workingSet.Fit();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n\r\nHeuRegular.Params = HeuRegularParams;\r\nHeuRegular.WorkingSet = HeuRegularSet;\r\n\r\nexport default HeuRegular;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/heuristics/HeuRegular.js","import { epsilon, smallValue, smallValueSqrt } from \"../core/Math2D\";\r\nimport Heuristic from \"./Heuristic\";\r\nimport { Item } from \"../core/Components\";\r\nimport Region from \"../core/Region\";\r\n\r\nclass ScoringParams {\r\n /** Scoring weights\r\n * @param {Number} minZ score for tightly packing in length (Z)\r\n * @param {Number} minWaste score for minimizing wasted space\r\n */\r\n constructor(minZ, minWaste){\r\n this.minZ = minZ;\r\n this.minWaste = minWaste;\r\n }\r\n}\r\n\r\nclass HeuParametric1Params extends Heuristic.Params{\r\n constructor(){\r\n super();\r\n\r\n /** Defaults minZ = .9, minWaste = .1 \r\n * @type {ScoringParams} */\r\n this.scoring = new ScoringParams(.9, .1);\r\n }\r\n}\r\n\r\n/** @typedef Score @property {Region} region region index @property {Number} orientation orientation index @property {Number} n score */\r\n/** @param {Region} region region index @param {Number} orientation orientation index @param {Number} n score */\r\nfunction scoreConstructor(region, orientation, n){ return { region: region, orientation: orientation, n: n }; }\r\n\r\nfunction sortByN(a, b){\r\n if(isNaN(a.n) || isNaN(b.n)) return 0;\r\n\r\n if(a.n < b.n) return -1;\r\n if(a.n > b.n) return 1;\r\n return 0;\r\n}\r\n\r\nconst minRegionAxis = smallValue;\r\n\r\nvar tempRegion = new Region();\r\n\r\n/** @type {Array} */\r\nvar orientationScoreTable = [];\r\n\r\nclass HeuParametric1Set extends Heuristic.WorkingSet{\r\n constructor(...args){\r\n super(...args);\r\n\r\n /** @type {HeuParametric1Params} */\r\n this.params;\r\n }\r\n\r\n /** @param {Array} items */\r\n SetItems(items){\r\n super.SetItems(items);\r\n \r\n this.items.sort(Item.VolumeSort);\r\n\r\n this.minDimensions = Item.GetMinDimensions(this.items);\r\n this.minDimensionsNoWasteFactor = [1, 1, 1];\r\n\r\n /** @type {Array} */\r\n this.regionScoreTable = [];\r\n }\r\n\r\n /**\r\n * @param {Region} fit \r\n * @param {Array} newRegions \r\n */\r\n RateFit(fit, newRegions){\r\n \r\n // Try out a recursive deep rate fit\r\n let containerLength = this.packedContainer.container.length;\r\n let minDimensions = this.minDimensions;\r\n let minDimensionsNoWasteFactor = this.minDimensionsNoWasteFactor;\r\n let minZScore = 1 - (fit.z + fit.length) / containerLength; // 0-1\r\n\r\n // new regions usability score\r\n let minWasteScore = 1; // have completely filled the region if newRegions.length === 0\r\n if(newRegions.length > 0){\r\n minWasteScore = 0;\r\n for(let iRegion = 0; iRegion < newRegions.length; iRegion++){\r\n let region = newRegions[iRegion];\r\n \r\n let scoreW = 0, scoreH = 0, scoreL = 0;\r\n if(region.width >= minDimensions[0] && (region.width - minDimensions[0]) < minDimensions[0] * minDimensionsNoWasteFactor[0]) scoreW += 1;\r\n if(region.height >= minDimensions[1] && (region.width - minDimensions[1]) < minDimensions[1] * minDimensionsNoWasteFactor[1]) scoreH += 1;\r\n if(region.length >= minDimensions[2] && (region.width - minDimensions[2]) < minDimensions[2] * minDimensionsNoWasteFactor[2]) scoreL += 1;\r\n \r\n minWasteScore += scoreW * .5 + scoreH * .3 + scoreL * .2;\r\n }\r\n minWasteScore /= newRegions.length;\r\n }\r\n\r\n let minZWeight = this.params.scoring.minZ;\r\n let minWasteWeight = this.params.scoring.minWaste;\r\n let score = minZScore * minZWeight + minWasteScore * minWasteWeight;\r\n return score;\r\n }\r\n\r\n /** @param {Region} region */\r\n FitFunction(region){\r\n\r\n let regionScoreTable = this.regionScoreTable;\r\n\r\n let item = this.workingItem;\r\n let validOrientations = item.validOrientations;\r\n \r\n if(region.volume > item.volume){\r\n let dummyRegion = tempRegion.Copy(region);\r\n\r\n orientationScoreTable.length = 0;\r\n for(let iOrient = 0; iOrient < validOrientations.length; iOrient++){\r\n let orientation = validOrientations[iOrient];\r\n\r\n let dimensions = item.GetOrientedDimensions(orientation);\r\n let regionFitTest = region.FitTest(smallValue, \r\n dimensions[0], dimensions[1], dimensions[2], \r\n item.weight, item.grounded);\r\n \r\n if(regionFitTest !== false){\r\n\r\n // Subtracts fit from region and calculates new bounding regions\r\n let newRegions = dummyRegion.Subtract(regionFitTest, minRegionAxis);\r\n if(newRegions === undefined) newRegions = [];\r\n if(dummyRegion.length > minRegionAxis)\r\n newRegions.push(dummyRegion);\r\n\r\n let score = this.RateFit(regionFitTest, newRegions)\r\n let orientationScore = scoreConstructor(region, orientation, score);\r\n orientationScoreTable.push(orientationScore);\r\n }\r\n }\r\n\r\n if(orientationScoreTable.length > 0){\r\n orientationScoreTable.sort(sortByN);\r\n let regionScore = orientationScoreTable.pop();\r\n regionScoreTable.push(regionScore);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @returns {Heuristic.Result} */\r\n Fit(){\r\n \r\n this.regionsTree.Find(this.FitFunction, this);\r\n\r\n if(this.regionScoreTable.length > 0){\r\n\r\n this.regionScoreTable.sort(sortByN);\r\n let highestScore = this.regionScoreTable.pop();\r\n\r\n let containingRegion = highestScore.region,\r\n orientation = this.workingItem.validOrientations[highestScore.orientation];\r\n let dimensions = this.workingItem.GetOrientedDimensions(orientation);\r\n\r\n // Fit test (success: Region, failure: false)\r\n let regionFitTest = containingRegion.FitTest(smallValue, \r\n dimensions[0], dimensions[1], dimensions[2],\r\n this.workingItem.weight, this.workingItem.grounded);\r\n \r\n if(regionFitTest !== false){\r\n \r\n let result = new Heuristic.Result(containingRegion, regionFitTest, orientation);\r\n return result;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nclass HeuParametric1 extends Heuristic{\r\n /** @param {HeuParametric1Params} params */\r\n constructor(params){\r\n\r\n super(params || (new HeuParametric1Params()), HeuParametric1Set);\r\n\r\n /** @type {HeuParametric1Set} */\r\n this.workingSet;\r\n }\r\n\r\n /** @param {Item} item */\r\n Fit(item){\r\n let result = false;\r\n let validItem = this.workingSet.SetWorkingItem(item);\r\n\r\n if(validItem){\r\n result = this.workingSet.Fit();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n\r\nHeuParametric1.Params = HeuParametric1Params;\r\nHeuParametric1.WorkingSet = HeuParametric1Set;\r\n\r\nexport default HeuParametric1;\n\n\n// WEBPACK FOOTER //\n// ./src/api/packer/cubX/heuristics/HeuParametric1.js","import CargoListView from \"./CargoListView\";\r\nimport Packer from \"../packer/Packer\";\r\nimport CargoList from \"../packer/CargoList\";\r\nimport PackingSpaceView from \"./PackingSpaceView\";\r\nimport PackingSpace from \"../packer/PackingSpace\";\r\nimport SceneSetup from \"../view/SceneSetup\";\r\nimport Utils from \"../utils/cik/Utils\";\r\nimport PackResultView from \"./PackResultView\";\r\nimport UpdateComponent from \"../utils/cik/input/UpdateComponent\";\r\nimport Container from \"../packer/container/Container\";\r\nimport BoxEntry from \"../components/box/BoxEntry\";\r\nimport DomUI from \"./dom/DomUI\";\r\nimport OrthoviewsNavigator from \"./OrthoviewsNavigator\";\r\nimport Camera from \"../scene/Camera\";\r\n\r\n/**\r\n * @typedef {Object} ViewParams\r\n * @property {import('../UX').default} ux\r\n * @property {Number} transitionDuration\r\n * @property {Object} cargoListView\r\n * @property {Number} cargoListView.paddingZ\r\n * @property {Number} cargoListView.paddingY\r\n * @property {import('./CargoListView').CargoListViewParams} cargoListView.params\r\n * @property {Object} packResultView\r\n * @property {import('./PackResultView').PackResultViewParams} packResultView.params\r\n */\r\n\r\n /** @type {ViewParams} */\r\nconst defaultParams = {\r\n ux: undefined,\r\n transitionDuration: 1.5,\r\n cargoListView: {\r\n paddingZ: 120,\r\n paddingY: 40,\r\n params: {}\r\n },\r\n packResultView: {\r\n params: {\r\n animationDuration: 1\r\n }\r\n }\r\n};\r\n\r\nvar tempBox3 = new THREE.Box3();\r\nvar tempVec = new THREE.Vector3();\r\n\r\nclass View {\r\n /**\r\n * Constructor\r\n * @param {Packer} packer \r\n * @param {DomUI} domUI; \r\n * @param {SceneSetup} sceneSetup \r\n * @param {ViewParams} params \r\n */\r\n constructor(packer, sceneSetup, domUI, params){\r\n\r\n this.sceneSetup = sceneSetup;\r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n\r\n this.domUI = domUI;\r\n this.domUI.CreateOrthoViewsIcons();\r\n this.domUI.On(DomUI.signals.orthoViewSelected, this.OnOrthoViewSelected.bind(this));\r\n\r\n var scope = this;\r\n var units = this.params.ux.params.units;\r\n\r\n // Fill lights\r\n if(true){\r\n let lights = this.sceneSetup.DefaultLights(this.sceneSetup.sceneController, true, true);\r\n\r\n let dl = lights.filter(light => light instanceof THREE.DirectionalLight)[0];\r\n let dlData = {\"color\":\"0xfceeee\",\"intensity\":1,\"castShadow\":true,\"shadow.bias\":0.00001,\"shadow.radius\":4,\"shadow.mapSize.x\":4096,\"shadow.mapSize.y\":4096,\"shadow.camera.left\":-400,\"shadow.camera.top\":300,\"shadow.camera.right\":400,\"shadow.camera.bottom\":-300,\"shadow.camera.near\":20,\"shadow.camera.far\":800};\r\n let Config = require('../utils/cik/config/Config').default;\r\n Config.Load(dl, dlData);\r\n\r\n if(this.sceneSetup.ux.params.hud){\r\n this.sceneSetup.DefaultLights(this.sceneSetup.hud);\r\n }\r\n\r\n let dlComp = lights.filter(light => light instanceof THREE.DirectionalLight)[1];\r\n dlComp.castShadow = true;\r\n }\r\n\r\n let orthoviewsNavParams = {ux: this.params.ux};\r\n this.orthoviewsNavigator = new OrthoviewsNavigator(this.sceneSetup.cameraController, orthoviewsNavParams);\r\n\r\n // Packing space\r\n this.packingSpaceView = new PackingSpaceView();\r\n this.sceneSetup.sceneController.AddDefault(this.packingSpaceView.view);\r\n /** @param {Container} container */\r\n function onContainerAdded(container){\r\n scope.packingSpaceView.Add(container);\r\n\r\n tempBox3.setFromObject(scope.packingSpaceView.view);\r\n tempBox3.getSize(tempVec);\r\n\r\n /** @type {THREE.Box3} */\r\n let box3 = container.combinedVolume.box3;\r\n scope.sceneSetup.cameraController.TransitionToFrame(scope.params.transitionDuration, tempBox3);\r\n\r\n let containerSize = Math.max(tempVec.x, tempVec.y, tempVec.z);\r\n scope.cargoListView.view.position.z = containerSize / 2 + scope.params.cargoListView.paddingZ * units;\r\n scope.cargoListView.view.position.y = scope.params.cargoListView.paddingY * units;\r\n }\r\n packer.packingSpace.On(PackingSpace.signals.containerAdded, onContainerAdded);\r\n\r\n // Cargo list\r\n this.params.cargoListView.params.ux = this.params.ux;\r\n this.cargoListView = new CargoListView(this.params.cargoListView.params);\r\n\r\n this.sceneSetup.input.AddRaycastGroup('OnClick', 'cargoListView', this.cargoListView.raycastGroup);\r\n\r\n this.sceneSetup.sceneController.AddDefault(this.cargoListView.view);\r\n\r\n function onCargoListViewChanged(){\r\n tempBox3.setFromObject(scope.cargoListView.view);\r\n tempBox3.getCenter(tempVec);\r\n let listViewCenterX = tempVec.x;\r\n scope.cargoListView.view.getWorldPosition(tempVec);\r\n let offsetX = listViewCenterX - tempVec.x;\r\n\r\n /** @type {THREE.Box3} */\r\n let box3 = tempBox3;\r\n scope.sceneSetup.cameraController.TransitionToFrame(scope.params.transitionDuration, box3, .7);\r\n\r\n tempBox3.setFromObject(scope.packingSpaceView.view);\r\n tempBox3.getCenter(tempVec);\r\n let centerX = tempVec.x;\r\n\r\n scope.cargoListView.view.position.x = centerX - offsetX;\r\n }\r\n function onCargoGroupAdded(group){\r\n scope.cargoListView.Add(group);\r\n onCargoListViewChanged();\r\n }\r\n packer.cargoList.On(CargoList.signals.groupAdded, onCargoGroupAdded);\r\n function onCargoGroupRemoved(group){\r\n scope.cargoListView.Remove(group);\r\n onCargoListViewChanged();\r\n }\r\n packer.cargoList.On(CargoList.signals.groupRemoved, onCargoGroupRemoved);\r\n function onCargoGroupModified(group){\r\n scope.cargoListView.UpdateGroup(group);\r\n onCargoListViewChanged();\r\n }\r\n packer.cargoList.On(CargoList.signals.groupModified, onCargoGroupModified);\r\n\r\n // Packing result\r\n this.params.packResultView.params.ux = this.params.ux;\r\n this.packResultView = new PackResultView(this.cargoListView, this.packingSpaceView, this.params.packResultView.params);\r\n this.sceneSetup.sceneController.AddDefault(this.packResultView.view);\r\n\r\n /** @param {Packer.PackingResult} packingResult */\r\n async function onPackUpdate(packingResult){\r\n scope.orthoviewsNavigator.Navigate(OrthoviewsNavigator.orthoviews.home, false);\r\n await scope.packResultView.DisplayPackingResult(packingResult);\r\n }\r\n packer.On(Packer.signals.packUpdate, onPackUpdate);\r\n\r\n var updateComponent = new UpdateComponent(true, 1/30, this.Update.bind(this));\r\n this.sceneSetup.input.updateComponents.push(updateComponent);\r\n\r\n this.orthoviewsNavigator.boundingView = this.packingSpaceView.view;\r\n this.orthoviewsNavigator.cargoListView = this.cargoListView;\r\n\r\n if(this.params.ux.params.hud){\r\n this.HUDSetup();\r\n }\r\n\r\n if(this.params.ux.params.configure){\r\n this.Configure();\r\n }\r\n }\r\n\r\n /** @param {Number} now */\r\n Update(now){\r\n this.packResultView.Update();\r\n this.cargoListView.Update();\r\n }\r\n\r\n HUDSetup(){\r\n var units = this.params.ux.params.units;\r\n var input = this.sceneSetup.input;\r\n var hud = this.sceneSetup.hud;\r\n var scope = this;\r\n\r\n\r\n }\r\n\r\n ClearPackingResults(){\r\n this.packResultView.Clear();\r\n }\r\n\r\n /** @param {DomUI.orthoviews} viewType */\r\n OnOrthoViewSelected(viewType){\r\n switch(viewType){\r\n case DomUI.orthoviews.home: this.orthoviewsNavigator.Navigate(OrthoviewsNavigator.orthoviews.home); break;\r\n case DomUI.orthoviews.top: this.orthoviewsNavigator.Navigate(OrthoviewsNavigator.orthoviews.top); break;\r\n case DomUI.orthoviews.front: this.orthoviewsNavigator.Navigate(OrthoviewsNavigator.orthoviews.front); break;\r\n case DomUI.orthoviews.side: this.orthoviewsNavigator.Navigate(OrthoviewsNavigator.orthoviews.side); break;\r\n }\r\n }\r\n\r\n Configure(){\r\n\r\n var Smart = require('../utils/cik/config/Smart').default;\r\n var Config = require('../utils/cik/config/Config').default;\r\n var Control3D = require('../utils/cik/config/Control3D').default;\r\n\r\n var scope = this;\r\n var input = this.sceneSetup.input;\r\n\r\n if(this.params.ux.params.hud){\r\n var hudControl3D = Control3D.Request('hud');\r\n\r\n Config.MakeShortcut('Configure', 'Show HUDControl3D', function(){\r\n hudControl3D.Toggle(scope.cargoListView.view);\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default View;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/View.js","import CargoBoxView from \"./CargoBoxView\";\r\nimport BoxEntry from \"../components/box/BoxEntry\";\r\nimport Asset from \"../components/assets/Asset\";\r\n\r\nconst unitCubeEdgeGeometry = new THREE.EdgesGeometry(new THREE.BoxBufferGeometry(1, 1, 1, 1, 1, 1));\r\nconst wireframeMaterialTemplate = new THREE.LineBasicMaterial({color: 0xffffff, flatShading: true});\r\n\r\nconst _wireMaterialSettings = Symbol('wireMatSet');\r\n\r\nclass PackedCargoBoxView extends CargoBoxView {\r\n /**\r\n * @param {BoxEntry} boxEntry \r\n */\r\n constructor(boxEntry){\r\n super(boxEntry);\r\n\r\n var meshMaterial = this.mesh.material;\r\n meshMaterial.polygonOffset = true;\r\n meshMaterial.polygonOffsetFactor = 2;\r\n meshMaterial.polygonOffsetUnits = 1;\r\n meshMaterial.transparent = true;\r\n meshMaterial.opacity = .5;\r\n meshMaterial.blending = THREE.NormalBlending;\r\n meshMaterial.depthTest = true;\r\n meshMaterial.depthWrite = false;\r\n\r\n this.mesh.castShadow = this.mesh.receiveShadow = true;\r\n\r\n var material = wireframeMaterialTemplate.clone();\r\n this.wireMesh = new THREE.LineSegments(unitCubeEdgeGeometry, material);\r\n this.wireMesh.renderOrder = Number.MAX_SAFE_INTEGER - 1;\r\n this.wireMesh.scale.copy(boxEntry.dimensions.vec3);\r\n\r\n this.view.add(this.wireMesh);\r\n }\r\n\r\n /** @returns {BoxEntry} */\r\n get entry(){ return super.entry; }\r\n set entry(value){\r\n super.entry = value;\r\n this.scale = value.dimensions.vec3;\r\n }\r\n\r\n /** @param {Number} value */\r\n set focus(value){\r\n super.focus = value;\r\n\r\n if(this[_wireMaterialSettings]) Asset.RestoreMaterial(this.wireMesh.material, this[_wireMaterialSettings]);\r\n\r\n if(Math.abs(1 - value) > .0001){\r\n if(this[_wireMaterialSettings] === undefined){\r\n this.wireMesh.material = this.wireMesh.material.clone();\r\n this[_wireMaterialSettings] = {};\r\n Asset.SetMaterialFocus(this.wireMesh.material, value, this[_wireMaterialSettings]);\r\n }\r\n else{\r\n Asset.SetMaterialFocus(this.wireMesh.material, value);\r\n }\r\n }\r\n }\r\n\r\n get focus(){ return super.focus; }\r\n\r\n /**\r\n * @param {Number} x \r\n * @param {Number} y \r\n * @param {Number} z \r\n */\r\n SetScale(x, y, z){\r\n this.mesh.scale.set(x, y, z);\r\n this.wireMesh.scale.set(x, y, z);\r\n }\r\n\r\n /**\r\n * @param {Number} x in radians\r\n * @param {Number} y in radians\r\n * @param {Number} z in radians\r\n */\r\n SetRotationAngles(x, y, z){\r\n this.mesh.rotation.set(x, y, z);\r\n this.wireMesh.rotation.set(x, y, z);\r\n }\r\n\r\n /**\r\n * @param {CargoBoxView} cargoView \r\n */\r\n Extend(cargoView){\r\n this.entry = cargoView.entry;\r\n this.mesh.material.color = cargoView.mesh.material.color;\r\n }\r\n}\r\n\r\nexport default PackedCargoBoxView;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/PackedCargoBoxView.js","import PackResultView from \"../PackResultView\";\r\nimport Packer from \"../../packer/Packer\";\r\nimport Pool from \"../../utils/cik/Pool\";\r\n\r\nvar tempRange = [];\r\n\r\nclass Range{\r\n /**\r\n * \r\n * @param {Array} args [min,max...] pairs\r\n */\r\n constructor(...args){\r\n /** @type {Array} */\r\n this.min = [];\r\n /** @type {Array} */\r\n this.max = [];\r\n\r\n for(let i = 0, halfLength = args.length; i < halfLength; i++){\r\n this.min.push(args[i * 2]);\r\n this.max.push(args[i * 2 + 1]);\r\n }\r\n }\r\n\r\n /** @param {Array} args */\r\n Min(...args){\r\n this.min.length = 0;\r\n this.min.push(...args);\r\n return this;\r\n }\r\n\r\n /** @param {Array} args */\r\n Max(...args){\r\n this.max.length = 0;\r\n this.max.push(...args);\r\n return this;\r\n }\r\n\r\n /** @param {Number} index @returns {Number} */\r\n Length(index){\r\n return this.max[index] - this.min[index];\r\n }\r\n\r\n /** @param {Array} args */\r\n Evaluate(...args){\r\n tempRange.length = 0;\r\n for(let i = 0; i < args.length; i++){\r\n let min = this.min[i],\r\n max = this.max[i],\r\n v = args[i];\r\n let value = v * (max - min) + min;\r\n tempRange.push(value);\r\n }\r\n return tempRange;\r\n }\r\n}\r\n\r\nconst range = {\r\n frequency: 0,\r\n volume: 1\r\n};\r\n\r\nconst _playing = Symbol('playing');\r\nconst _iid = Symbol('iid');\r\n\r\nclass Note{\r\n constructor(){\r\n this.wave = new Pizzicato.Sound({ \r\n source: 'wave', \r\n options: {\r\n type: 'sine',\r\n frequency: 440\r\n }\r\n });\r\n\r\n this[_playing] = false;\r\n }\r\n\r\n /** @param {Number} value */\r\n set frequency(value){\r\n this.wave.frequency = value;\r\n }\r\n\r\n /** @returns {Boolean} */\r\n get playing(){ return this[_playing]; }\r\n\r\n Play(duration){\r\n this[_playing] = true;\r\n this.wave.play();\r\n let scope = this;\r\n function onNoteComplete(){ scope.Stop(); }\r\n this[_iid] = window.setTimeout(onNoteComplete, Math.floor(duration * 1000));\r\n }\r\n\r\n Stop(){\r\n if(this[_iid] !== undefined) window.clearTimeout(this[_iid]);\r\n this[_iid] = undefined;\r\n\r\n this.wave.stop();\r\n this[_playing] = false;\r\n }\r\n}\r\n\r\n/**\r\n * @returns {Note}\r\n */\r\nfunction poolNewFN(){\r\n let note = new Note();\r\n return note;\r\n}\r\n\r\n/**\r\n * @param {Note} object \r\n * @returns {Note}\r\n */\r\nfunction poolResetFN(object){\r\n return object;\r\n}\r\n\r\nclass Toner{\r\n constructor(){\r\n\r\n this.pool = new Pool(poolNewFN, poolResetFN);\r\n \r\n this.ranges = new Range(\r\n 100, 900, // freq\r\n 0, 1, // volume\r\n 0.2, 0.8 // duration\r\n );\r\n\r\n window.Toner = this;\r\n }\r\n\r\n GetNote(){\r\n /** @type {Note} */\r\n let note = this.pool.Request();\r\n return note;\r\n }\r\n\r\n RelaseNote(note){\r\n this.pool.Return(note);\r\n }\r\n\r\n /** @param {Number} x @param {Number} y @param {Number} z */\r\n Coords(x, y, z){\r\n\r\n const divs = 6;\r\n let divLength = this.ranges.Length(range.frequency) / divs;\r\n let values = this.ranges.Evaluate(x, y, z);\r\n\r\n let frequency = Math.floor(values[0]),\r\n volume = values[1],\r\n duration = values[2];\r\n\r\n let note = this.GetNote();\r\n note.frequency = frequency;\r\n note.Play(duration);\r\n\r\n let scope = this;\r\n function onNoteComplete(){\r\n scope.RelaseNote(note);\r\n }\r\n window.setInterval(onNoteComplete, Math.floor(duration * 1000));\r\n }\r\n}\r\n\r\nclass Musipack{\r\n /**\r\n * \r\n * @param {PackResultView} packResultView \r\n */\r\n constructor(packResultView){\r\n\r\n console.log('Musicpack hooked in!');\r\n\r\n this.toner = new Toner();\r\n\r\n packResultView.Once(PackResultView.signals.packVizStart, function(){\r\n packResultView.params.animationDuration = 8;\r\n });\r\n \r\n packResultView.On(PackResultView.signals.cargoVizPack, this.OnItemPacked.bind(this));\r\n packResultView.On(PackResultView.signals.cargoVizUnpack, this.OnItemUnpacked.bind(this));\r\n }\r\n\r\n /** @param {Packer.PackedCargo} item */\r\n OnItemPacked(item){\r\n this.EvaluateItem(item);\r\n }\r\n\r\n /** @param {Packer.PackedCargo} item */\r\n OnItemUnpacked(item){\r\n this.EvaluateItem(item);\r\n }\r\n\r\n /** @param {Packer.PackedCargo} item */\r\n EvaluateItem(item){\r\n if(item && item.position){\r\n let x = item.position.x,\r\n y = item.position.y,\r\n z = item.position.z;\r\n\r\n let w = item.containingVolume.dimensions.width,\r\n h = item.containingVolume.dimensions.height,\r\n l = item.containingVolume.dimensions.length;\r\n \r\n this.toner.Coords(x / w, y / h, z / l);\r\n }\r\n }\r\n}\r\n\r\nexport default Musipack;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/components/Musipack.js","import UX from \"../UX\";\r\nimport Camera from \"../scene/Camera\";\r\nimport Utils from \"../utils/cik/Utils\";\r\nimport CargoListView from \"./CargoListView\";\r\nimport NaNRecovery from \"../utils/cik/NaNRecovery\";\r\n\r\n/** @typedef OrthoviewsNavigatorParams @property {UX} ux @property {Number} transitionDuration */\r\n/** @type {OrthoviewsNavigatorParams} */\r\nconst defaultParams = {\r\n transitionDuration: 1\r\n};\r\n\r\nconst orthoviews = {\r\n home: 'home',\r\n top: 'top',\r\n front: 'front',\r\n side: 'side'\r\n};\r\n\r\nvar tempBox3 = new THREE.Box3(),\r\n tempVec3 = new THREE.Vector3(),\r\n tempCamOffset = new THREE.Vector3();\r\n\r\n/** @type {import('../scene/Camera').FrameCoords} */\r\nvar tempCoords = {position: new THREE.Vector3(), center: new THREE.Vector3()};\r\n\r\nconst _cargoListView = Symbol('cargoListView'),\r\n _boundingView = Symbol('boundingView'),\r\n _recovery = Symbol('recovery');\r\n\r\nclass OrthoviewsNavigator{\r\n /** @param {Camera} cameraController @param {OrthoviewsNavigatorParams} params */\r\n constructor(cameraController, params){\r\n \r\n this.params = Utils.AssignUndefined(params, defaultParams);\r\n this.cameraController = cameraController;\r\n\r\n this.nanRecovery = new NaNRecovery(this.cameraController, 'position.x', 'position.y', 'position.z', 'rotation.x', 'rotation.y', 'rotation.z', 'camera.fov');\r\n\r\n const Smart = require('../utils/cik/config/Smart').default;\r\n\r\n let scope = this;\r\n let smart = new Smart(this.cameraController.camera, 'FOV');\r\n smart.MakeShortcut('Configure');\r\n function onChange(){\r\n scope.cameraController.camera.updateProjectionMatrix();\r\n }\r\n smart.Config(null, this.cameraController.camera, onChange, Smart.serializeModes.none,\r\n 'fov'\r\n );\r\n }\r\n\r\n /** @param {THREE.Object3D} boundingView */\r\n set boundingView(value){\r\n this[_boundingView] = value;\r\n }\r\n\r\n get boundingView(){ return this[_boundingView]; }\r\n\r\n /** @param {CargoListView} value */\r\n set cargoListView(value){\r\n this[_cargoListView] = value;\r\n }\r\n\r\n get cargoListView(){ return this[_cargoListView]; }\r\n\r\n /** @param {orthoviews} viewType @param {Boolean} [changeFOV] true by default */\r\n Navigate(viewType, changeFOV){\r\n\r\n let neededRecovery = this.nanRecovery.AssertUpdateRecover();\r\n console.log('Navigating to: ' + viewType + (neededRecovery ? ', recovered from NaN.' : '.'));\r\n\r\n const duration = 1;\r\n\r\n var distanceMultiplier = .3;\r\n if(changeFOV === undefined) changeFOV = true;\r\n var fov = changeFOV ? 8 : this.params.ux.params.fov;\r\n var slideDown = true;\r\n\r\n tempBox3.setFromObject(this.boundingView);\r\n \r\n let orientation = tempCamOffset;\r\n switch(viewType){\r\n case orthoviews.home: \r\n orientation.set(1, -1, 1);\r\n fov = this.params.ux.params.fov;\r\n distanceMultiplier = .5;\r\n break;\r\n\r\n case orthoviews.top:\r\n orientation.set(0.01, -1, 0);\r\n distanceMultiplier = .3;\r\n break;\r\n\r\n case orthoviews.front:\r\n this.cargoListView.SlideUp(tempBox3.max.y + 40 * this.params.ux.params.units, duration);\r\n distanceMultiplier = .2;\r\n slideDown = false;\r\n orientation.set(0, 0, 1);\r\n break;\r\n\r\n case orthoviews.side:\r\n distanceMultiplier = .3;\r\n orientation.set(1, 0, 0);\r\n break;\r\n }\r\n\r\n if(slideDown) this.cargoListView.SlideDown(duration);\r\n\r\n this.cameraController.TransitionToFOV(duration * 1.5, fov);\r\n\r\n let endCoords = this.cameraController.CalcFrameCoords(tempBox3, distanceMultiplier, orientation, fov);\r\n this.cameraController.TransitionFromToCoords(this.params.transitionDuration, undefined, endCoords);\r\n }\r\n\r\n static get orthoviews(){\r\n return orthoviews;\r\n }\r\n}\r\n\r\nexport default OrthoviewsNavigator;\n\n\n// WEBPACK FOOTER //\n// ./src/api/view/OrthoviewsNavigator.js","\r\n/** @param {*} obj @param {string} key */\r\nfunction getKey(obj, key){\r\n return key.split('.').reduce(function(a, b){\r\n return a && a[b];\r\n }, obj);\r\n}\r\n\r\n/** @param {*} obj @param {string} key */\r\nfunction setKey(obj, key, val){\r\n key = key.split('.');\r\n while (key.length > 1) obj = obj[key.shift()];\r\n let endKey = key.shift();\r\n obj[endKey] = val;\r\n return obj[endKey];\r\n}\r\n\r\nconst typeofNumber = 'number';\r\n\r\nclass NaNRecovery{\r\n /**\r\n * Properties that needs to be considered\r\n * @param {*} root\r\n * @param {...string} keys \r\n */\r\n constructor(root, ...keys){\r\n this.root = root;\r\n /** @type {Map} */\r\n this.properties = new Map();\r\n this.Watch(...keys);\r\n }\r\n\r\n /**\r\n * Properties that needs to be considered\r\n * @param {...string} keys \r\n */\r\n Watch(...keys){\r\n if(keys !== undefined && keys.length > 0){\r\n keys.forEach(key => {\r\n let value = getKey(this.root, key);\r\n this.properties.set(key, value);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Checks the current values, recover any NaN (or typeof != number), otherwise update the stored number\r\n */\r\n AssertUpdateRecover(){\r\n let neededRecovery = false;\r\n let keys = this.properties.keys();\r\n for(let key of keys){\r\n // get the current value\r\n let value = getKey(this.root, key);\r\n // recover if not a number\r\n if(isNaN(value) || (typeof value !== typeofNumber)){\r\n neededRecovery = true;\r\n value = this.properties.get(key);\r\n }\r\n // update\r\n this.properties.set(key, value);\r\n setKey(this.root, key, value);\r\n };\r\n\r\n return neededRecovery;\r\n }\r\n}\r\n\r\nexport default NaNRecovery;\n\n\n// WEBPACK FOOTER //\n// ./src/api/utils/cik/NaNRecovery.js"],"sourceRoot":""}