@zxh19890103/wik
Version:
The world-class JavaScript library for building large-scale digital warehouse both on 2D and 3D.
11 lines (10 loc) • 26.3 kB
JavaScript
"use strict";/*!
* Wik 1.0.0-dev01
* https://wik.zhangxinghai.cn/
*
* Copyright 2023-present Sea Zhang
* Released under the MIT license
*
* Date: Fri, 17 Feb 2023 14:08:06 GMT
*/Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("three"),d=require("./_shared.js"),M=require("react"),Pe=i=>i&&typeof i=="object"&&"default"in i?i:{default:i},m=Pe(u),T=Pe(M);class mt extends m.default.Camera{}const L=new m.default.Color,X=new m.default.Matrix4,ve=new m.default.Matrix4;new m.default.Vector3;const Oe=new m.default.Matrix4;Oe.multiplyScalar(0);let Ze=1990;class K extends m.default.InstancedMesh{constructor(t,o,e){var a;super(t,o,e),this.instances=new Map,this.index2id=new Map,this.isInstancedMeshInstance=!1,this.$$instanceOf=null,this.instanceIndex=-1,this.total=0,this.removedTotal=0,this.indexTrash=[],this.uniformColor=16777215,this.instanceColor=new m.default.InstancedBufferAttribute(new Float32Array(e*3),3);const s=(a=o.color)==null?void 0:a.getHex();s&&(this.uniformColor=s),L.setHex(this.uniformColor);for(let r=0;r<e;r++)L.toArray(this.instanceColor.array,r*3)}getInstanceAt(t){for(const[o,e]of this.instances)if(e.instanceIndex===t)return e;return null}deleteInstanceAt(t){const o=this.index2id.get(t);return o?(this.deleteInstance(o),!0):!1}deleteInstance(t){const o=this.instances.get(t);!o||(this.setMatrixAt(o.instanceIndex,Oe),this.instances.delete(t),this.index2id.delete(o.instanceIndex),this.removedTotal+=1,this.indexTrash.push(o.instanceIndex),this.total-=1)}delete(){this.deleteInstance(this.id)}getNextIndex(){const t=this.indexTrash.shift();return t!==void 0?t:this.total}addInstance(t,o=0,e){const s=this.createInstance(),{x:a,y:r,z:c}=t,l=this.getNextIndex();return X.makeTranslation(a,r,c),o!==void 0&&o!==0&&(ve.makeRotationZ(o),X.multiply(ve)),this.setMatrixAt(l,X),s.position.set(a,r,c),e&&(L.setHex(e),this.setColorAt(l,L),s.color=e),this.instances.set(s.id,s),s.instanceIndex=l,this.index2id.set(l,s.id),this.total+=1,s}updateInstances(){const t=this.total+this.removedTotal;this.instanceMatrix.updateRange={offset:0,count:t*16},this.instanceColor.updateRange={offset:0,count:t*3},this.instanceMatrix.needsUpdate=!0,this.instanceColor.needsUpdate=!0}createInstance(){const t=Ze++,o=Object.create(this,{id:{value:t,writable:!1,configurable:!1,enumerable:!1},position:{value:new m.default.Vector3,writable:!1,configurable:!1,enumerable:!1},color:{value:this.uniformColor,writable:!0,configurable:!1,enumerable:!1}});return o.$$instanceOf=this,o.isInstancedMeshInstance=!0,o.model=null,o}setColor(t){L.set(t),this.setColorAt(this.instanceIndex,L),this.color=t,this.instanceColor.needsUpdate=!0}getColor(){return this.getColorAt(this.instanceIndex,L),L.getHex()}setColorAt(t,o){o.toArray(this.instanceColor.array,t*3)}}const N=(i,t,o=0)=>[-1,-1,0,1,-1,0,1,1,0,-1,1,0].map((e,s)=>{switch(s%3){case 0:return i*e;case 1:return t*e;case 2:return e+o}});class Q extends m.default.LineSegments{constructor(t,o){const e=new u.BufferGeometry,{vertices:s,indices:a}=Te(o);e.setAttribute("position",new m.default.Float32BufferAttribute(s,3)),e.setIndex(a),super(e,Q.material),this.meta=o,this.packs=[],this.boards=[],this.position.set(t.x,t.y,t.z)}onClick(t){console.log("clicked")}getPackSlots(t){const{distanceOffGround:o,heightPerLayer:e,height:s,width:a}=this.meta,{x:r,y:c,z:l}=this.position,w=[],g=t.width+10,f=Math.floor(a/g),x=Math.floor(s/e);for(let E=0;E<x;E+=1)for(let v=0;v<f;v+=1)w.push({layer:E,n:v,position:{x:-a/2+v*g+g/2+r,y:c,z:t.height/2+l+o+E*e}});return w}getBoardSlots(){const{distanceOffGround:t,heightPerLayer:o,width:e,depth:s,height:a}=this.meta,r=Math.floor(a/o),{x:c,y:l,z:w}=this.position,g=[];for(let f=0;f<r;f++)g.push({layer:f,w:e-10,h:s-10,position:{x:c,y:l,z:w+t+f*o}});return g}static get material(){return W||(W=new u.LineBasicMaterial({linewidth:12,color:15989471})),W}}class Xe extends K{constructor(t,o){const e=new u.BufferGeometry,{vertices:s,indices:a}=Te(o);e.setAttribute("position",new m.default.Float32BufferAttribute(s,3)),e.setIndex(a),super(e,new m.default.MeshBasicMaterial({color:16746258,transparent:!0,opacity:.8}),t)}}const We=[0,1,1,2,2,3,3,0];let F=null;const Te=i=>{if(F)return F;const{width:t,depth:o,height:e,distanceOffGround:s,heightPerLayer:a}=i,r=t/2,c=o/2,l=[],w=[];l.push(...N(r,c,0));let g=s,f=1;for(;g<e;)l.push(...N(r,c,g)),w.push(...qe(We,f*4)),f>1&&(f%2?w.push(f*4,(f-1)*4+3,f*4+2,(f-1)*4+1):w.push(f*4+3,(f-1)*4,f*4+1,(f-1)*4+2)),f+=1,g+=a;return l.push(...N(r,c,e)),w.push(0,f*4,1,f*4+1,2,f*4+2,3,f*4+3),F={vertices:l,indices:w},F},qe=(i,t)=>i.map(o=>o+t);let W=null;class Ke extends m.default.Mesh{constructor(t,o){super(new m.default.BoxGeometry(o.width,o.depth,o.height),new m.default.MeshPhongMaterial({color:16777215,transparent:!1,opacity:.76})),this.position.set(t.x,t.y,t.z)}}class Qe extends K{constructor(t,o){super(new u.BoxGeometry(o.width,o.depth,o.height),new m.default.MeshPhongMaterial({color:15767570,transparent:!0,opacity:.89}),t)}onSelect(){const t=this.getColor();return this.setColor(65432),t}onUnSelect(t,o){this.setColor(t)}onHover(){const t=this.getColor();return this.setColor(15732632),t}onUnHover(t){this.setColor(t)}onClick(t){console.log("click pack.",this.id)}}var Je=Object.defineProperty,et=Object.getOwnPropertyDescriptor,Le=(i,t,o,e)=>{for(var s=e>1?void 0:e?et(t,o):t,a=i.length-1,r;a>=0;a--)(r=i[a])&&(s=(e?r(t,o,s):r(s))||s);return e&&s&&Je(t,o,s),s};class J extends d.Behavior{onLoad(){}onUnload(){}onHover(t,o){!t.onHover||!t.onUnHover||this.interactiveStateActionManager.push(t,"Hover",o)}onUnHover(t,o){!t.onHover||!t.onUnHover||this.interactiveStateActionManager.pop(t,"Hover")}onDblClick(t,o){t.onDblClick&&t.onDblClick(o)}onClick(t,o){t.onClick&&t.onClick(o),!(!t.onSelect||!t.onUnSelect)&&(this.selectionManager.clearMany(),this.selectionManager.current(t,o))}}Le([d.inject(d.interfaces.ISelectionManager)],J.prototype,"selectionManager",2);Le([d.inject(d.interfaces.IStateActionManager)],J.prototype,"interactiveStateActionManager",2);class tt extends d.Behavior{constructor(t){super(),this.warehouse=t,this.raycaster=null,this.pointer=null,this.isMouseDown=!1,this.isMouseMovedAfterDown=!1,this.isPointerMoving=!1,this.activatedObj3d=null,this.domElement=null,this.raycaster=new m.default.Raycaster,this.pointer=new m.default.Vector2(0,0),this.domElement=t.renderer.domElement}onLoad(){const{warehouse:t,domElement:o}=this;let e=null;const s=()=>{this.isPointerMoving=!1,e=null};this.mousemove=r=>{r.preventDefault(),this.pointer.x=r.offsetX/o.clientWidth*2-1,this.pointer.y=-(r.offsetY/o.clientHeight)*2+1,this.isPointerMoving=!0,clearTimeout(e),e=setTimeout(s,300),this.isMouseDown&&(this.isMouseMovedAfterDown=!0)},this.mousedown=r=>{this.isMouseDown=!0,this.activatedObj3d&&(console.log("obj is down"),t.fireBehavior("mousedown",this.activatedObj3d))},this.mouseup=r=>{this.activatedObj3d?(console.log("obj is up"),this.isMouseMovedAfterDown&&t.cancelClickEventFire()):this.isMouseMovedAfterDown||(console.log("noop click"),t.fireBehavior("click",t.scene,null)),this.isMouseDown&&(this.isMouseDown=!1,this.isMouseMovedAfterDown=!1)},this.mouseclick=r=>{!this.activatedObj3d||t.isClickEventFireCancelled||t.fireBehavior("click",this.activatedObj3d)};const a=t.onTick;this.userOnTick=a,t.onTick=()=>{if(a&&a(),!this.isPointerMoving)return;let r=null;this.intersection=null;const c=[];this.raycaster.setFromCamera(this.pointer,this.warehouse.camera);for(const[l,w]of this.warehouse.typedLists){const g=this.raycaster.intersectObjects([...w.items],!1);g.length!==0&&c.push(g[0])}if(c.length>0){c.sort(nt);const l=c[0];r=l.object,l.instanceId!==void 0&&l.instanceId!==null&&(r=r.getInstanceAt(l.instanceId)),this.intersection=l}this.activatedObj3d!==r&&(this.activatedObj3d&&t.fireBehavior("mouseout",this.activatedObj3d),this.activatedObj3d=r,r&&t.fireBehavior("mouseover",r))},o.addEventListener("mousemove",this.mousemove),o.addEventListener("mousedown",this.mousedown),o.addEventListener("mouseup",this.mouseup),o.addEventListener("click",this.mouseclick)}onUnload(){this.warehouse.onTick=this.userOnTick,this.domElement.removeEventListener("mousemove",this.mousemove),this.domElement.removeEventListener("mousedown",this.mousedown),this.domElement.removeEventListener("mouseup",this.mouseup),this.domElement.removeEventListener("click",this.mouseclick)}}const nt=(i,t)=>i.distance-t.distance;class ee extends u.BufferGeometry{constructor(t,o){super();const e=[...N(t/2,o/2,0),...N(t/2,o/2,0)],s=[0,1,2,2,3,0,6,5,4,4,7,6],a=Array(e.length).fill(0).map((r,c)=>c%3===2?c<12?1:-1:0);this.setAttribute("position",new m.default.Float32BufferAttribute(e,3)),this.setAttribute("normal",new m.default.Float32BufferAttribute(a,3)),this.setIndex(s)}}class ot extends u.Mesh{constructor(t,o){super(new ee(t,o),new u.MeshPhongMaterial({color:3442432,transparent:!0,opacity:.5})),this.position.setComponent(2,-1)}}class Ae extends d.CoreList{constructor(){super(...arguments),this.itemKey="id",this.mounted=!1}mount(t){this.assign("scene",t),this.assign("mounted",!0);for(const o of this.items)t.add(o),d.util$$.writeProp(o,"$$warehouse",this.$$parent)}unmount(){for(const t of this.items)this.scene.remove(t),d.util$$.writeProp(t,"$$warehouse",null);this.assign("scene",null),this.assign("mounted",!1)}_add(t){var o;d.util$$.writeProp(t,"$$warehouse",this.$$parent),(o=this.scene)==null||o.add(t),super._add(t)}_remove(t){var o;(o=this.scene)==null||o.remove(t),super._remove(t)}_clear(){var t;for(const o of this.items)(t=this.scene)==null||t.remove(o);super._clear()}create(...t){throw new Error("Method not implemented.")}}var st=Object.defineProperty,it=Object.getOwnPropertyDescriptor,te=(i,t,o,e)=>{for(var s=e>1?void 0:e?it(t,o):t,a=i.length-1,r;a>=0;a--)(r=i[a])&&(s=(e?r(t,o,s):r(s))||s);return e&&s&&st(t,o,s),s};let H=class extends d.Core{constructor(){super(...arguments),this.mounted=!1,this.layouted=!1,this.camera=null,this.renderer=null,this.typedLists=new Map}fireBehavior(i,t,o){if(!!t){if(t===this.scene){this.modeManager.apply(d.const$$.event2behavior[i],t,o);return}this.modeManager.apply(d.const$$.event2behavior[`item@${i}`],t,o)}}mount(i,t,o){if(!this.mounted){this.assign({scene:i,camera:o,renderer:t});for(const[e,s]of this.typedLists)s.mounted||s.mount(i);{const e=new m.default.DirectionalLight(16777215,1);e.position.set(0,0,1),i.add(e);const s=new m.default.AmbientLight(16777215,.3);i.add(s);const a=new m.default.GridHelper(5e3);a.rotateX(Math.PI/2),i.add(a);const r=new ot(5e3,5e3);i.add(r);const c=new m.default.AxesHelper(300);c.setColors(new m.default.Color(3442672),new m.default.Color(16731904),new m.default.Color(65423)),i.add(c);const l=new m.default.Mesh(new m.default.SphereGeometry(100,60,60),new m.default.MeshPhongMaterial({color:65433}));l.position.set(0,0,700),i.add(l)}this.modeManager.create("default",this.injector.$new(tt,this),this.injector.$new(J)),this.modeManager.create("readonly"),this.modeManager.mode="readonly",d.util$$.writeReadonlyProp(this,"mounted",!0),d.tryInvokingOwn(this,"onMounted"),(async()=>{const e=await this.getLayoutData();await this.layout(e),d.util$$.writeReadonlyProp(this,"layouted",!0),d.tryInvokingOwn(this,"onLayouted")})()}}dispose(){}queryListAll(){throw new Error("Method not implemented.")}queryList(i){return this.typedLists.get(i)}addList(i){if(this.typedLists.has(i))return;const t=this.injector.$new(Ae);return this.typedLists.set(i,t),this.setEventChild(t),this.mounted&&t.mount(this.scene),t}removeList(i){const t=this.typedLists.get(i);!t||(this.typedLists.delete(i),t.setEventParent(null),t.mounted&&t.unmount())}each(i,t){throw new Error("Method not implemented.")}first(i){throw new Error("Method not implemented.")}item(i,t){throw new Error("Method not implemented.")}query(i,t){throw new Error("Method not implemented.")}add(i,t){const o=this.typedLists.get(i);!o||(o.add(t),this.onAdd&&this.onAdd(t))}update(i,t,o){throw new Error("Method not implemented.")}remove(i,t){const o=this.typedLists.get(i);!o||(typeof t=="string"?o.removeById(t):o.remove(t))}getLayoutData(){return Promise.resolve(null)}configModes(){return{}}create(i,...t){return this.injector.$new(i,...t)}[Symbol.iterator](){throw new Error("Method not implemented.")}};te([d.inject(d.interfaces.ISelectionManager)],H.prototype,"selectionManager",2);te([d.inject(d.interfaces.IModeManager)],H.prototype,"modeManager",2);H=te([d.deco$$.mixin(d.ClickCancelMix)],H);class at extends u.Mesh{constructor(t,o,e){super(new ee(o,e),new m.default.MeshBasicMaterial({color:16777215,transparent:!0,opacity:.8})),this.position.set(t.x,t.y,t.z)}}class rt extends K{constructor(t,o){super(new ee(o.width,o.depth),new m.default.MeshBasicMaterial({color:16777215,transparent:!0,opacity:.8}),t)}}const ct=Object.freeze(Object.defineProperty({__proto__:null,InstancedRack:Xe,Shelf:Q,Pack:Ke,InstancePack:Qe,get Warehouse3D(){return H},InstanceBoard:rt,Board:at,Object3DList:Ae},Symbol.toStringTag,{value:"Module"}));new u.Matrix4,new u.Matrix4;new u.Raycaster;new u.Vector3;new u.Matrix4;new u.Matrix4;new u.Vector3;const xe={type:"change"},q={type:"start"},_e={type:"end"};class lt extends u.EventDispatcher{constructor(t,o){super(),this.object=t,this.domElement=o,this.domElement.style.touchAction="none",this.enabled=!0,this.target=new u.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:u.MOUSE.ROTATE,MIDDLE:u.MOUSE.DOLLY,RIGHT:u.MOUSE.PAN},this.touches={ONE:u.TOUCH.ROTATE,TWO:u.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this.getPolarAngle=function(){return c.phi},this.getAzimuthalAngle=function(){return c.theta},this.getDistance=function(){return this.object.position.distanceTo(this.target)},this.listenToKeyEvents=function(n){n.addEventListener("keydown",ge),this._domElementKeyEvents=n},this.saveState=function(){e.target0.copy(e.target),e.position0.copy(e.object.position),e.zoom0=e.object.zoom},this.reset=function(){e.target.copy(e.target0),e.object.position.copy(e.position0),e.object.zoom=e.zoom0,e.object.updateProjectionMatrix(),e.dispatchEvent(xe),e.update(),a=s.NONE},this.update=function(){const n=new u.Vector3,h=new u.Quaternion().setFromUnitVectors(t.up,new u.Vector3(0,1,0)),y=h.clone().invert(),b=new u.Vector3,_=new u.Quaternion,k=2*Math.PI;return function(){const Ee=e.object.position;n.copy(Ee).sub(e.target),n.applyQuaternion(h),c.setFromVector3(n),e.autoRotate&&a===s.NONE&&z(Ce()),e.enableDamping?(c.theta+=l.theta*e.dampingFactor,c.phi+=l.phi*e.dampingFactor):(c.theta+=l.theta,c.phi+=l.phi);let P=e.minAzimuthAngle,O=e.maxAzimuthAngle;return isFinite(P)&&isFinite(O)&&(P<-Math.PI?P+=k:P>Math.PI&&(P-=k),O<-Math.PI?O+=k:O>Math.PI&&(O-=k),P<=O?c.theta=Math.max(P,Math.min(O,c.theta)):c.theta=c.theta>(P+O)/2?Math.max(P,c.theta):Math.min(O,c.theta)),c.phi=Math.max(e.minPolarAngle,Math.min(e.maxPolarAngle,c.phi)),c.makeSafe(),c.radius*=w,c.radius=Math.max(e.minDistance,Math.min(e.maxDistance,c.radius)),e.enableDamping===!0?e.target.addScaledVector(g,e.dampingFactor):e.target.add(g),n.setFromSpherical(c),n.applyQuaternion(y),Ee.copy(e.target).add(n),e.object.lookAt(e.target),e.enableDamping===!0?(l.theta*=1-e.dampingFactor,l.phi*=1-e.dampingFactor,g.multiplyScalar(1-e.dampingFactor)):(l.set(0,0,0),g.set(0,0,0)),w=1,f||b.distanceToSquared(e.object.position)>r||8*(1-_.dot(e.object.quaternion))>r?(e.dispatchEvent(xe),b.copy(e.object.position),_.copy(e.object.quaternion),f=!1,!0):!1}}(),this.dispose=function(){e.domElement.removeEventListener("contextmenu",ye),e.domElement.removeEventListener("pointerdown",me),e.domElement.removeEventListener("pointercancel",pe),e.domElement.removeEventListener("wheel",we),e.domElement.removeEventListener("pointermove",B),e.domElement.removeEventListener("pointerup",G),e._domElementKeyEvents!==null&&e._domElementKeyEvents.removeEventListener("keydown",ge)};const e=this,s={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let a=s.NONE;const r=1e-6,c=new u.Spherical,l=new u.Spherical;let w=1;const g=new u.Vector3;let f=!1;const x=new u.Vector2,E=new u.Vector2,v=new u.Vector2,A=new u.Vector2,S=new u.Vector2,C=new u.Vector2,I=new u.Vector2,j=new u.Vector2,R=new u.Vector2,p=[],V={};function Ce(){return 2*Math.PI/60/60*e.autoRotateSpeed}function U(){return Math.pow(.95,e.zoomSpeed)}function z(n){l.theta-=n}function ne(n){l.phi-=n}const oe=function(){const n=new u.Vector3;return function(y,b){n.setFromMatrixColumn(b,0),n.multiplyScalar(-y),g.add(n)}}(),se=function(){const n=new u.Vector3;return function(y,b){e.screenSpacePanning===!0?n.setFromMatrixColumn(b,1):(n.setFromMatrixColumn(b,0),n.crossVectors(e.object.up,n)),n.multiplyScalar(y),g.add(n)}}(),D=function(){const n=new u.Vector3;return function(y,b){const _=e.domElement;if(e.object.isPerspectiveCamera){const k=e.object.position;n.copy(k).sub(e.target);let $=n.length();$*=Math.tan(e.object.fov/2*Math.PI/180),oe(2*y*$/_.clientHeight,e.object.matrix),se(2*b*$/_.clientHeight,e.object.matrix)}else e.object.isOrthographicCamera?(oe(y*(e.object.right-e.object.left)/e.object.zoom/_.clientWidth,e.object.matrix),se(b*(e.object.top-e.object.bottom)/e.object.zoom/_.clientHeight,e.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),e.enablePan=!1)}}();function Y(n){e.object.isPerspectiveCamera?w/=n:e.object.isOrthographicCamera?(e.object.zoom=Math.max(e.minZoom,Math.min(e.maxZoom,e.object.zoom*n)),e.object.updateProjectionMatrix(),f=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function ie(n){e.object.isPerspectiveCamera?w*=n:e.object.isOrthographicCamera?(e.object.zoom=Math.max(e.minZoom,Math.min(e.maxZoom,e.object.zoom/n)),e.object.updateProjectionMatrix(),f=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),e.enableZoom=!1)}function ae(n){x.set(n.clientX,n.clientY)}function Ie(n){I.set(n.clientX,n.clientY)}function re(n){A.set(n.clientX,n.clientY)}function je(n){E.set(n.clientX,n.clientY),v.subVectors(E,x).multiplyScalar(e.rotateSpeed);const h=e.domElement;z(2*Math.PI*v.x/h.clientHeight),ne(2*Math.PI*v.y/h.clientHeight),x.copy(E),e.update()}function De(n){j.set(n.clientX,n.clientY),R.subVectors(j,I),R.y>0?Y(U()):R.y<0&&ie(U()),I.copy(j),e.update()}function ke(n){S.set(n.clientX,n.clientY),C.subVectors(S,A).multiplyScalar(e.panSpeed),D(C.x,C.y),A.copy(S),e.update()}function Re(n){n.deltaY<0?ie(U()):n.deltaY>0&&Y(U()),e.update()}function Ne(n){let h=!1;switch(n.code){case e.keys.UP:D(0,e.keyPanSpeed),h=!0;break;case e.keys.BOTTOM:D(0,-e.keyPanSpeed),h=!0;break;case e.keys.LEFT:D(e.keyPanSpeed,0),h=!0;break;case e.keys.RIGHT:D(-e.keyPanSpeed,0),h=!0;break}h&&(n.preventDefault(),e.update())}function ce(){if(p.length===1)x.set(p[0].pageX,p[0].pageY);else{const n=.5*(p[0].pageX+p[1].pageX),h=.5*(p[0].pageY+p[1].pageY);x.set(n,h)}}function le(){if(p.length===1)A.set(p[0].pageX,p[0].pageY);else{const n=.5*(p[0].pageX+p[1].pageX),h=.5*(p[0].pageY+p[1].pageY);A.set(n,h)}}function ue(){const n=p[0].pageX-p[1].pageX,h=p[0].pageY-p[1].pageY,y=Math.sqrt(n*n+h*h);I.set(0,y)}function He(){e.enableZoom&&ue(),e.enablePan&&le()}function Ve(){e.enableZoom&&ue(),e.enableRotate&&ce()}function de(n){if(p.length==1)E.set(n.pageX,n.pageY);else{const y=Z(n),b=.5*(n.pageX+y.x),_=.5*(n.pageY+y.y);E.set(b,_)}v.subVectors(E,x).multiplyScalar(e.rotateSpeed);const h=e.domElement;z(2*Math.PI*v.x/h.clientHeight),ne(2*Math.PI*v.y/h.clientHeight),x.copy(E)}function he(n){if(p.length===1)S.set(n.pageX,n.pageY);else{const h=Z(n),y=.5*(n.pageX+h.x),b=.5*(n.pageY+h.y);S.set(y,b)}C.subVectors(S,A).multiplyScalar(e.panSpeed),D(C.x,C.y),A.copy(S)}function fe(n){const h=Z(n),y=n.pageX-h.x,b=n.pageY-h.y,_=Math.sqrt(y*y+b*b);j.set(0,_),R.set(0,Math.pow(j.y/I.y,e.zoomSpeed)),Y(R.y),I.copy(j)}function Ue(n){e.enableZoom&&fe(n),e.enablePan&&he(n)}function $e(n){e.enableZoom&&fe(n),e.enableRotate&&de(n)}function me(n){e.enabled!==!1&&(p.length===0&&(e.domElement.setPointerCapture(n.pointerId),e.domElement.addEventListener("pointermove",B),e.domElement.addEventListener("pointerup",G)),Ge(n),n.pointerType==="touch"?Ye(n):Fe(n))}function B(n){e.enabled!==!1&&(n.pointerType==="touch"?Be(n):ze(n))}function G(n){be(n),p.length===0&&(e.domElement.releasePointerCapture(n.pointerId),e.domElement.removeEventListener("pointermove",B),e.domElement.removeEventListener("pointerup",G)),e.dispatchEvent(_e),a=s.NONE}function pe(n){be(n)}function Fe(n){let h;switch(n.button){case 0:h=e.mouseButtons.LEFT;break;case 1:h=e.mouseButtons.MIDDLE;break;case 2:h=e.mouseButtons.RIGHT;break;default:h=-1}switch(h){case u.MOUSE.DOLLY:if(e.enableZoom===!1)return;Ie(n),a=s.DOLLY;break;case u.MOUSE.ROTATE:if(n.ctrlKey||n.metaKey||n.shiftKey){if(e.enablePan===!1)return;re(n),a=s.PAN}else{if(e.enableRotate===!1)return;ae(n),a=s.ROTATE}break;case u.MOUSE.PAN:if(n.ctrlKey||n.metaKey||n.shiftKey){if(e.enableRotate===!1)return;ae(n),a=s.ROTATE}else{if(e.enablePan===!1)return;re(n),a=s.PAN}break;default:a=s.NONE}a!==s.NONE&&e.dispatchEvent(q)}function ze(n){switch(a){case s.ROTATE:if(e.enableRotate===!1)return;je(n);break;case s.DOLLY:if(e.enableZoom===!1)return;De(n);break;case s.PAN:if(e.enablePan===!1)return;ke(n);break}}function we(n){e.enabled===!1||e.enableZoom===!1||a!==s.NONE||(n.preventDefault(),e.dispatchEvent(q),Re(n),e.dispatchEvent(_e))}function ge(n){e.enabled===!1||e.enablePan===!1||Ne(n)}function Ye(n){switch(Me(n),p.length){case 1:switch(e.touches.ONE){case u.TOUCH.ROTATE:if(e.enableRotate===!1)return;ce(),a=s.TOUCH_ROTATE;break;case u.TOUCH.PAN:if(e.enablePan===!1)return;le(),a=s.TOUCH_PAN;break;default:a=s.NONE}break;case 2:switch(e.touches.TWO){case u.TOUCH.DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;He(),a=s.TOUCH_DOLLY_PAN;break;case u.TOUCH.DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;Ve(),a=s.TOUCH_DOLLY_ROTATE;break;default:a=s.NONE}break;default:a=s.NONE}a!==s.NONE&&e.dispatchEvent(q)}function Be(n){switch(Me(n),a){case s.TOUCH_ROTATE:if(e.enableRotate===!1)return;de(n),e.update();break;case s.TOUCH_PAN:if(e.enablePan===!1)return;he(n),e.update();break;case s.TOUCH_DOLLY_PAN:if(e.enableZoom===!1&&e.enablePan===!1)return;Ue(n),e.update();break;case s.TOUCH_DOLLY_ROTATE:if(e.enableZoom===!1&&e.enableRotate===!1)return;$e(n),e.update();break;default:a=s.NONE}}function ye(n){e.enabled!==!1&&n.preventDefault()}function Ge(n){p.push(n)}function be(n){delete V[n.pointerId];for(let h=0;h<p.length;h++)if(p[h].pointerId==n.pointerId){p.splice(h,1);return}}function Me(n){let h=V[n.pointerId];h===void 0&&(h=new u.Vector2,V[n.pointerId]=h),h.set(n.pageX,n.pageY)}function Z(n){const h=n.pointerId===p[0].pointerId?p[1]:p[0];return V[h.pointerId]}e.domElement.addEventListener("contextmenu",ye),e.domElement.addEventListener("pointerdown",me),e.domElement.addEventListener("pointercancel",pe),e.domElement.addEventListener("wheel",we,{passive:!1}),this.update()}}const ut=i=>{const t=M.useRef(),[o,e]=M.useState({...d.__context_value__,mvMappings:i.mvMappings}),{injector:s}=M.useContext(d.__world_context__);M.useEffect(()=>{const r=t.current,c=new m.default.WebGLRenderer({alpha:!0});c.setClearColor(0,1),c.clear(),r.appendChild(c.domElement);const l=new m.default.PerspectiveCamera(45,1,1,Number.MAX_SAFE_INTEGER);l.position.set(5e3,0,1e3),l.up.set(0,0,1),l.lookAt(0,0,0);const w=()=>{const E=r.clientWidth,v=r.clientHeight;c.setSize(E,v),l.aspect=E/v,l.updateProjectionMatrix()};w();const g=new m.default.Scene;let f=null;new lt(l,c.domElement);const x=()=>{requestAnimationFrame(x),f&&f.onTick&&f.onTick(),c.render(g,l)};setTimeout(x,0),window.onresize=w,f=d.createWarehouse(s,i.warehouse),f==null||f.mount(g,c,l),e({...o,mvMappings:i.mvMappings,warehouse:f})},[]);const{warehouse:a}=o;return T.default.createElement(d.__warehouse_context__.Provider,{value:o},T.default.createElement("div",{style:d.whStyle,className:"wik-warehouse",ref:t},a&&T.default.createElement(T.default.Fragment,null,T.default.createElement(d.SelectionContext,{warehouse:a}),i.modes&&T.default.createElement(d.Modes,{warehouse:a}),T.default.Children.map(i.children,r=>T.default.createElement(r.type,{...r.props,parent:a})))))},Se=M.memo(i=>{const{parent:t,model:o,type:e,instanced:s}=i,{warehouse:a,mvMappings:r}=M.useContext(d.__warehouse_context__);return M.useEffect(()=>{const c=r[e];return c(o,a),()=>{}},[]),null}),dt=M.memo(i=>{const{type:t}=i,{warehouse:o,mvMappings:e}=M.useContext(d.__warehouse_context__),[s]=M.useState(()=>{let r;return r=o.queryList(t),r||(r=o.addList(t),r)}),{items:a}=d.useViewSet(i);return React.createElement(React.Fragment,null,a.map(r=>React.createElement(d.View,{key:r.id,type:t,parent:s,model:r})))}),ht=M.memo(i=>{const{type:t}=i,{warehouse:o,mvMappings:e}=M.useContext(d.__warehouse_context__),[s,a]=M.useState(null),[r]=M.useState(()=>{let l;return l=o.queryList(t),l||(l=o.addList(t),l)});M.useEffect(()=>{const l=e[t],w=l(i.model,o);return o.add(t,w),a(w),()=>{o.remove(t,w)}},[]);const{items:c}=d.useViewSet(i);return s?React.createElement(React.Fragment,null,c.map(l=>React.createElement(Se,{instanced:s,key:l.id,type:t,parent:r,model:l}))):null}),ft=Object.freeze(Object.defineProperty({__proto__:null,useEvented:d.useEvented,useGlobalTick:d.useGlobalTick,Fetch:d.Fetch,FPS:d.FPS,Modes:d.Modes,SelectShell:d.SelectShell,MultipleSelectShell:d.MultipleSelectShell,LayerPosition:d.LayerPosition,__world_context__:d.__world_context__,World:d.World,Warehouse3D:ut,InstancedView:Se,ViewSet3D:dt,InstancedViewSet3D:ht,View:d.View},Symbol.toStringTag,{value:"Module"}));exports.wik=d.index;exports.wikutil=d.index$1;exports.wikdom=ft;exports.wikui=ct;
//# sourceMappingURL=i3d.js.map