@planara/core 2.5.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/colors.d.ts +8 -0
- package/dist/constants/colors.d.ts.map +1 -1
- package/dist/constants/figure-geometries.d.ts +2 -0
- package/dist/constants/figure-geometries.d.ts.map +1 -1
- package/dist/constants/layers.d.ts +15 -2
- package/dist/constants/layers.d.ts.map +1 -1
- package/dist/constants/threshold.d.ts +1 -1
- package/dist/constants/threshold.d.ts.map +1 -1
- package/dist/core/editor-renderer.d.ts.map +1 -1
- package/dist/handlers/scene/add-figure-scene-handler.d.ts.map +1 -1
- package/dist/handlers/select/edge-select-handler.d.ts +0 -2
- package/dist/handlers/select/edge-select-handler.d.ts.map +1 -1
- package/dist/handlers/select/vertex-select-handler.d.ts +43 -0
- package/dist/handlers/select/vertex-select-handler.d.ts.map +1 -0
- package/dist/index.cjs.js +2 -2
- package/dist/index.es.js +512 -359
- package/dist/index.umd.js +2 -2
- package/dist/interfaces/policy/tool-availability-policy.d.ts +12 -0
- package/dist/interfaces/policy/tool-availability-policy.d.ts.map +1 -0
- package/dist/ioc/container.d.ts.map +1 -1
- package/dist/managers/tool/tool-manager.d.ts +3 -0
- package/dist/managers/tool/tool-manager.d.ts.map +1 -1
- package/dist/policy/tool-availability-policy.d.ts +13 -0
- package/dist/policy/tool-availability-policy.d.ts.map +1 -0
- package/dist/utils/helpers.d.ts +6 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(d,j){typeof exports=="object"&&typeof module<"u"?j(exports,require("reflect-metadata"),require("three"),require("@planara/types"),require("@planara/three"),require("tsyringe"),require("events"),require("mobx")):typeof define=="function"&&define.amd?define(["exports","reflect-metadata","three","@planara/types","@planara/three","tsyringe","events","mobx"],j):(d=typeof globalThis<"u"?globalThis:d||self,j(d.PlanaraCore={},d.Reflect,d.THREE,d.PlanaraTypes,d.PlanaraThree,d.tsyringe,d.events,d.mobx))})(this,(function(d,j,l,c,L,h,ye,Se){"use strict";function we(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const i=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,i.get?i:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const a=we(l),Pe={[c.FigureType.Plane]:()=>new a.PlaneGeometry(1,1,1,1),[c.FigureType.Cube]:()=>new a.BoxGeometry(1,1,1,1,1,1),[c.FigureType.UVSphere]:()=>new a.SphereGeometry(.5,32,16),[c.FigureType.Icosphere]:()=>new a.IcosahedronGeometry(.5,0),[c.FigureType.Cylinder]:()=>new a.CylinderGeometry(.5,.5,1,32,1,!1),[c.FigureType.Cone]:()=>new a.ConeGeometry(.5,1,32,1,!1),[c.FigureType.Torus]:()=>new a.TorusGeometry(.5,.2,16,64),[c.FigureType.Circle]:()=>new a.CircleGeometry(.5,32),[c.FigureType.Sphere]:()=>new a.SphereGeometry(.5,32,16),[c.FigureType.Custom]:function(){throw new Error("Custom geometry is not generated here.")}},te=new a.MeshStandardMaterial({color:12566463,metalness:0,roughness:.6});class A{scene;camera;renderer;canvas;meshes=[];constructor(e){this.canvas=e,this.scene=new a.Scene,this.scene.background=new a.Color(1710618),this.camera=new a.PerspectiveCamera(45,e.clientWidth/e.clientHeight,.1,1e3),this.camera.position.set(1,1,7),this.renderer=new a.WebGLRenderer({canvas:e,antialias:!0}),this.renderer.setSize(e.clientWidth,e.clientHeight);const s=new a.AmbientLight(16777215,.5);this.scene.add(s);const i=new a.DirectionalLight(16777215,1);i.position.set(5,10,7),this.scene.add(i)}resize(){this.camera.aspect=this.canvas.clientWidth/this.canvas.clientHeight,this.camera.updateProjectionMatrix(),this.renderer.setSize(this.canvas.clientWidth,this.canvas.clientHeight)}render(){this.renderer.render(this.scene,this.camera)}update(){}loop(){this.update(),this.render(),requestAnimationFrame(()=>this.loop())}addFigure(e){const s=new a.BufferGeometry;s.setAttribute("position",new a.Float32BufferAttribute(e.position,3)),e.normal&&s.setAttribute("normal",new a.Float32BufferAttribute(e.normal,3)),e.uv&&s.setAttribute("uv",new a.Float32BufferAttribute(e.uv,2));const i=new a.Mesh(s,te);return this.scene.add(i),this.meshes.push(i),i}addMesh(e){this.scene&&(this.scene.add(e),this.meshes.push(e))}removeMesh(e){this.scene&&(this.scene.remove(e),this.meshes=this.meshes.filter(s=>s!==e))}getMeshes(){return this.meshes}addObject(e,s){this.scene&&(typeof s=="number"&&e.layers.set(s),this.scene.add(e))}removeObject(e){this.scene&&(e.parent?e.parent.remove(e):this.scene.remove(e))}enableCameraLayer(e){this.camera&&this.camera.layers.enable(e)}dispose(){this.meshes&&(this.meshes.length=0,this.meshes=[]),this.scene=null,this.camera=null,this.renderer?.dispose(),this.canvas=null}}var Oe=Object.getOwnPropertyDescriptor,De=(t,e,s,i)=>{for(var o=i>1?void 0:i?Oe(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o};d.EventBus=class{_emitter;constructor(){this._emitter=new ye.EventEmitter}emit(e,s){this._emitter.emit(e,s)}on(e,s){this._emitter.on(e,s)}off(e,s){this._emitter.off(e,s)}},d.EventBus=De([h.injectable()],d.EventBus);var P=(t=>(t.SelectHover="select.hover",t.SelectClick="select.click",t.ToolSelect="tool.select",t))(P||{});const je=.03,Le=10;var Ce=Object.getOwnPropertyDescriptor,Te=(t,e,s,i)=>{for(var o=i>1?void 0:i?Ce(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},se=(t,e)=>(s,i)=>e(s,i,t);d.EditorRenderer=class extends A{constructor(e,s){super(e),this._canvas=e,this._bus=s;const i=new a.GridHelper(10,10);i.position.y=-.001,this.scene.add(i);const o=new L.SymmetricAxesHelper(6);this.scene.add(o),this._orbit=new L.OrbitWithState(this.camera,this.renderer.domElement),this._orbit.enableDamping=!0,this._orbit.dampingFactor=.05,this._cameraGizmo=new L.CameraAxesGizmo(this.renderer,this.camera,{size:96,margin:36}),this._raycaster=new a.Raycaster,this._mouse=new a.Vector2,this.scene.add(new a.HemisphereLight(16777215,4473924,.6)),this.camera.layers.enable(0),this.camera.layers.enable(1),this._transform=new L.ModelingTransformControls(this.camera,this.renderer.domElement),this._transformHelper=this._transform.getHelper(),this.scene.add(this._transformHelper),this._isEventListenersAdded||this._initMouseListeners()}_orbit;_transform;_transformHelper;_raycaster;_mouse;_isEventListenersAdded=!1;_lastHovered=null;_cameraGizmo;update(){this._orbit.update()}addFigure(e){const s=super.addFigure(e);s.layers.enable(0);const i=new a.EdgesGeometry(s.geometry),o=new a.LineSegments(i,new a.LineBasicMaterial({color:8947848,linewidth:1}));return o.layers.set(1),s.add(o),s}setTransformControlsMode(e){this._transform.setMode(e)}attachTransformControls(e){this._transform.attach(e)}detachTransformControls(){this._transform.detach()}setRaycastMode(e){const s=this._raycaster;switch(s.params.Line.threshold=0,s.params.Points.threshold=0,e){case c.SelectMode.Mesh:case c.SelectMode.Face:s.layers.set(0);break;case c.SelectMode.Edge:s.layers.set(1),s.params.Line.threshold=je;break;case c.SelectMode.Vertex:s.layers.set(2),s.params.Points.threshold=Le;break}}dispose(){this._isEventListenersAdded&&(this.canvas.removeEventListener("mousemove",this._handleMouseMove,!1),this.canvas.removeEventListener("click",this._handleMouseClick,!1),this.canvas.removeEventListener("pointerdown",e=>this._transform.pointerDown(e)),this.canvas.removeEventListener("pointermove",e=>this._transform.pointerMove(e)),this.canvas.removeEventListener("pointerup",e=>this._transform.pointerUp(e)),this.canvas.removeEventListener("pointerleave",()=>this._transform.pointerHover(null)),this._transform.removeEventListener("dragging-changed",()=>{this._orbit.enabled=!this._transform.dragging}),this._isEventListenersAdded=!1),this._orbit?.dispose(),this._transform?.dispose(),this._transformHelper?.parent&&this._transformHelper.parent.remove(this._transformHelper),this._lastHovered=null,super.dispose()}render(){super.render(),this._cameraGizmo.render(this.canvas.width,this.canvas.height)}_initMouseListeners(){this.canvas.addEventListener("mousemove",this._handleMouseMove,!1),this.canvas.addEventListener("click",this._handleMouseClick,!1),this.canvas.addEventListener("pointerdown",e=>this._transform.pointerDown(e)),this.canvas.addEventListener("pointermove",e=>this._transform.pointerMove(e)),this.canvas.addEventListener("pointerup",e=>this._transform.pointerUp(e)),this.canvas.addEventListener("pointerleave",()=>this._transform.pointerHover(null)),this._transform.addEventListener("dragging-changed",()=>{this._orbit.enabled=!this._transform.dragging}),this._isEventListenersAdded=!0}_handleMouseMove=e=>{this._processRaycastEvent(e,P.SelectHover,!0)};_handleMouseClick=e=>{this._processRaycastEvent(e,P.SelectClick,!1)};_processRaycastEvent(e,s,i){if(this._orbit.isInteracting||this._transform.dragging)return;const o=this._canvas.getBoundingClientRect();this._mouse.x=(e.clientX-o.left)/o.width*2-1,this._mouse.y=-((e.clientY-o.top)/o.height)*2+1,this._raycaster.setFromCamera(this._mouse,this.camera);const n=this._raycaster.intersectObjects(this.meshes,!0)[0]??null,p=n?.object??null;i?p!==this._lastHovered&&(this.meshes.forEach(m=>m.userData.isHit=!1),p&&(p.userData.isHit=!0),this._lastHovered=p,this._bus.emit(s,n?{intersection:n}:null)):this._bus.emit(s,n?{intersection:n}:null)}},d.EditorRenderer=Te([h.injectable(),se(0,h.inject("Canvas")),se(1,h.inject("EventBus"))],d.EditorRenderer);const ie={type:"change"},I={type:"start"},oe={type:"end"},C=new l.Ray,re=new l.Plane,Ee=Math.cos(70*l.MathUtils.DEG2RAD),f=new l.Vector3,g=2*Math.PI,_={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},x=1e-6;class Ae extends l.Controls{constructor(e,s=null){super(e,s),this.state=_.NONE,this.target=new l.Vector3,this.cursor=new l.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=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.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:l.MOUSE.ROTATE,MIDDLE:l.MOUSE.DOLLY,RIGHT:l.MOUSE.PAN},this.touches={ONE:l.TOUCH.ROTATE,TWO:l.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new l.Vector3,this._lastQuaternion=new l.Quaternion,this._lastTargetPosition=new l.Vector3,this._quat=new l.Quaternion().setFromUnitVectors(e.up,new l.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new l.Spherical,this._sphericalDelta=new l.Spherical,this._scale=1,this._panOffset=new l.Vector3,this._rotateStart=new l.Vector2,this._rotateEnd=new l.Vector2,this._rotateDelta=new l.Vector2,this._panStart=new l.Vector2,this._panEnd=new l.Vector2,this._panDelta=new l.Vector2,this._dollyStart=new l.Vector2,this._dollyEnd=new l.Vector2,this._dollyDelta=new l.Vector2,this._dollyDirection=new l.Vector3,this._mouse=new l.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=xe.bind(this),this._onPointerDown=Ie.bind(this),this._onPointerUp=Re.bind(this),this._onContextMenu=Ve.bind(this),this._onMouseWheel=He.bind(this),this._onKeyDown=Ne.bind(this),this._onTouchStart=Fe.bind(this),this._onTouchMove=Ye.bind(this),this._onMouseDown=ke.bind(this),this._onMouseMove=Ue.bind(this),this._interceptControlDown=ze.bind(this),this._interceptControlUp=$e.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(ie),this.update(),this.state=_.NONE}update(e=null){const s=this.object.position;f.copy(s).sub(this.target),f.applyQuaternion(this._quat),this._spherical.setFromVector3(f),this.autoRotate&&this.state===_.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,o=this.maxAzimuthAngle;isFinite(i)&&isFinite(o)&&(i<-Math.PI?i+=g:i>Math.PI&&(i-=g),o<-Math.PI?o+=g:o>Math.PI&&(o-=g),i<=o?this._spherical.theta=Math.max(i,Math.min(o,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+o)/2?Math.max(i,this._spherical.theta):Math.min(o,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const n=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=n!=this._spherical.radius}if(f.setFromSpherical(this._spherical),f.applyQuaternion(this._quatInverse),s.copy(this.target).add(f),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let n=null;if(this.object.isPerspectiveCamera){const p=f.length();n=this._clampDistance(p*this._scale);const m=p-n;this.object.position.addScaledVector(this._dollyDirection,m),this.object.updateMatrixWorld(),r=!!m}else if(this.object.isOrthographicCamera){const p=new l.Vector3(this._mouse.x,this._mouse.y,0);p.unproject(this.object);const m=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=m!==this.object.zoom;const b=new l.Vector3(this._mouse.x,this._mouse.y,0);b.unproject(this.object),this.object.position.sub(b).add(p),this.object.updateMatrixWorld(),n=f.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;n!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position):(C.origin.copy(this.object.position),C.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(C.direction))<Ee?this.object.lookAt(this.target):(re.setFromNormalAndCoplanarPoint(this.object.up,this.target),C.intersectPlane(re,this.target))))}else if(this.object.isOrthographicCamera){const n=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),n!==this.object.zoom&&(this.object.updateProjectionMatrix(),r=!0)}return this._scale=1,this._performCursorZoom=!1,r||this._lastPosition.distanceToSquared(this.object.position)>x||8*(1-this._lastQuaternion.dot(this.object.quaternion))>x||this._lastTargetPosition.distanceToSquared(this.target)>x?(this.dispatchEvent(ie),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?g/60*this.autoRotateSpeed*e:g/60/60*this.autoRotateSpeed}_getZoomScale(e){const s=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*s)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,s){f.setFromMatrixColumn(s,0),f.multiplyScalar(-e),this._panOffset.add(f)}_panUp(e,s){this.screenSpacePanning===!0?f.setFromMatrixColumn(s,1):(f.setFromMatrixColumn(s,0),f.crossVectors(this.object.up,f)),f.multiplyScalar(e),this._panOffset.add(f)}_pan(e,s){const i=this.domElement;if(this.object.isPerspectiveCamera){const o=this.object.position;f.copy(o).sub(this.target);let r=f.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*r/i.clientHeight,this.object.matrix),this._panUp(2*s*r/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(s*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,s){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),o=e-i.left,r=s-i.top,n=i.width,p=i.height;this._mouse.x=o/n*2-1,this._mouse.y=-(r/p)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const s=this.domElement;this._rotateLeft(g*this._rotateDelta.x/s.clientHeight),this._rotateUp(g*this._rotateDelta.y/s.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let s=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(g*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),s=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-g*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),s=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(g*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),s=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-g*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),s=!0;break}s&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),i=.5*(e.pageX+s.x),o=.5*(e.pageY+s.y);this._rotateStart.set(i,o)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),i=.5*(e.pageX+s.x),o=.5*(e.pageY+s.y);this._panStart.set(i,o)}}_handleTouchStartDolly(e){const s=this._getSecondPointerPosition(e),i=e.pageX-s.x,o=e.pageY-s.y,r=Math.sqrt(i*i+o*o);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const i=this._getSecondPointerPosition(e),o=.5*(e.pageX+i.x),r=.5*(e.pageY+i.y);this._rotateEnd.set(o,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const s=this.domElement;this._rotateLeft(g*this._rotateDelta.x/s.clientHeight),this._rotateUp(g*this._rotateDelta.y/s.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),i=.5*(e.pageX+s.x),o=.5*(e.pageY+s.y);this._panEnd.set(i,o)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const s=this._getSecondPointerPosition(e),i=e.pageX-s.x,o=e.pageY-s.y,r=Math.sqrt(i*i+o*o);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const n=(e.pageX+s.x)*.5,p=(e.pageY+s.y)*.5;this._updateZoomParameters(n,p)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let s=0;s<this._pointers.length;s++)if(this._pointers[s]==e.pointerId){this._pointers.splice(s,1);return}}_isTrackingPointer(e){for(let s=0;s<this._pointers.length;s++)if(this._pointers[s]==e.pointerId)return!0;return!1}_trackPointer(e){let s=this._pointerPositions[e.pointerId];s===void 0&&(s=new l.Vector2,this._pointerPositions[e.pointerId]=s),s.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){const s=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[s]}_customWheelEvent(e){const s=e.deltaMode,i={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(s){case 1:i.deltaY*=16;break;case 2:i.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(i.deltaY*=10),i}}function Ie(t){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(t.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.domElement.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(t)&&(this._addPointer(t),t.pointerType==="touch"?this._onTouchStart(t):this._onMouseDown(t)))}function xe(t){this.enabled!==!1&&(t.pointerType==="touch"?this._onTouchMove(t):this._onMouseMove(t))}function Re(t){switch(this._removePointer(t),this._pointers.length){case 0:this.domElement.releasePointerCapture(t.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(oe),this.state=_.NONE;break;case 1:const e=this._pointers[0],s=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:s.x,pageY:s.y});break}}function ke(t){let e;switch(t.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case l.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(t),this.state=_.DOLLY;break;case l.MOUSE.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=_.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=_.ROTATE}break;case l.MOUSE.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=_.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=_.PAN}break;default:this.state=_.NONE}this.state!==_.NONE&&this.dispatchEvent(I)}function Ue(t){switch(this.state){case _.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(t);break;case _.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(t);break;case _.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(t);break}}function He(t){this.enabled===!1||this.enableZoom===!1||this.state!==_.NONE||(t.preventDefault(),this.dispatchEvent(I),this._handleMouseWheel(this._customWheelEvent(t)),this.dispatchEvent(oe))}function Ne(t){this.enabled!==!1&&this._handleKeyDown(t)}function Fe(t){switch(this._trackPointer(t),this._pointers.length){case 1:switch(this.touches.ONE){case l.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(t),this.state=_.TOUCH_ROTATE;break;case l.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(t),this.state=_.TOUCH_PAN;break;default:this.state=_.NONE}break;case 2:switch(this.touches.TWO){case l.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(t),this.state=_.TOUCH_DOLLY_PAN;break;case l.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(t),this.state=_.TOUCH_DOLLY_ROTATE;break;default:this.state=_.NONE}break;default:this.state=_.NONE}this.state!==_.NONE&&this.dispatchEvent(I)}function Ye(t){switch(this._trackPointer(t),this.state){case _.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(t),this.update();break;case _.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(t),this.update();break;case _.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(t),this.update();break;case _.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(t),this.update();break;default:this.state=_.NONE}}function Ve(t){this.enabled!==!1&&t.preventDefault()}function ze(t){t.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function $e(t){t.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}class We extends A{_orbit;constructor(e){super(e),this.camera.position.set(1,1,7),this.camera.lookAt(0,0,0),this._orbit=new Ae(this.camera,this.canvas),this._orbit.target.set(0,0,0),this._orbit.minPolarAngle=Math.PI/2,this._orbit.maxPolarAngle=Math.PI/2,this._orbit.enableRotate=!0,this._orbit.enableZoom=!1,this._orbit.enablePan=!1}update(){this._orbit?.update()}}class Ze{_positions=[];_normals=[];_uvs=[];_tmpPositions=[];_tmpNormals=[];_tmpUVs=[];load(e){const s=e.split(`
|
|
2
|
-
`);for(const o of s){if(!o.trim()||o.startsWith("#"))continue;const r=o.trim().split(/\s+/);switch(r[0]){case"v":this._tmpPositions.push(r.slice(1).map(Number));break;case"vn":this._tmpNormals.push(r.slice(1).map(Number));break;case"vt":this._tmpUVs.push(r.slice(1).map(Number));break;case"f":this.processFaceLine(r);break}}const i={type:c.FigureType.Custom,position:this._positions,...this._normals.length>0&&{normal:this._normals},...this._uvs.length>0&&{uv:this._uvs}};return new c.Figure(i)}processFaceLine(e){for(let s=1;s<e.length;s++){const i=e[s];if(!i)continue;const[o,r,n]=i.split("/"),p=o?parseInt(o,10):void 0,m=r?parseInt(r,10):void 0,b=n?parseInt(n,10):void 0;if(p!==void 0){const v=this._tmpPositions[p-1];v&&this._positions.push(...v)}if(m!==void 0){const v=this._tmpUVs[m-1];v&&this._uvs.push(...v)}if(b!==void 0){const v=this._tmpNormals[b-1];v&&this._normals.push(...v)}}}}var Be=Object.getOwnPropertyDescriptor,Xe=(t,e,s,i)=>{for(var o=i>1?void 0:i?Be(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},ne=(t,e)=>(s,i)=>e(s,i,t);let R=class{constructor(t,e){this._store=e,this._handlers=new Map(t.map(s=>[s.mode,s]))}_currentMode=c.DisplayMode.Plane;_handlers;manage(t){t!==this._currentMode&&(this._handlers.get(this._currentMode)?.rollback(),t!==c.DisplayMode.Plane&&this._handlers.get(t)?.handle(),this._currentMode=t,this._store.setDisplayMode(this._currentMode))}dispose(){this._handlers&&this._handlers.clear(),this._currentMode=c.DisplayMode.Plane,this._store.setDisplayMode(this._currentMode)}};R=Xe([h.injectable(),ne(0,h.injectAll("IDisplayHandler")),ne(1,h.inject("IEditorStore"))],R);var y=(t=>(t.Hover="hover",t.Click="click",t))(y||{}),Ke=Object.getOwnPropertyDescriptor,Ge=(t,e,s,i)=>{for(var o=i>1?void 0:i?Ke(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},k=(t,e)=>(s,i)=>e(s,i,t);let U=class{constructor(t,e,s){this._eventBus=t,this._store=s,this._handlers=new Map(e.map(i=>[i.mode,i])),this._eventBus.on(P.SelectHover,this._onHover),this._eventBus.on(P.SelectClick,this._onClick)}_currentMode=c.SelectMode.Mesh;_handlers;manage(t){t!==this._currentMode&&(this._handlers.get(this._currentMode)?.rollback(),this._currentMode=t,this._store.setSelectMode(this._currentMode))}_onHover=t=>{this._handlers.get(this._currentMode)?.handle(t,y.Hover)};_onClick=t=>{this._handlers.get(this._currentMode)?.handle(t,y.Click)};dispose(){this._handlers&&this._handlers.clear(),this._eventBus.off(P.SelectHover,this._onHover),this._currentMode=c.SelectMode.Mesh,this._store.setSelectMode(this._currentMode)}};U=Ge([h.injectable(),k(0,h.inject("EventBus")),k(1,h.injectAll("ISelectHandler")),k(2,h.inject("IEditorStore"))],U);var qe=Object.getOwnPropertyDescriptor,Qe=(t,e,s,i)=>{for(var o=i>1?void 0:i?qe(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},ae=(t,e)=>(s,i)=>e(s,i,t);let H=class{constructor(t,e){this._store=e,this._handlers=new Map(t.map(s=>[s.mode,s])),this._unsubSelected=this._store.onSelectedObjectChange(()=>{this._handlers.get(this._currentTool)?.handle()})}_currentTool=c.ToolType.Translate;_handlers;_unsubSelected;manage(t){this._currentTool!==t&&(this._handlers.get(this._currentTool)?.rollback(),this._currentTool=t,this._store.setToolType(this._currentTool),this._handlers.get(this._currentTool)?.handle())}dispose(){this._unsubSelected?.(),this._handlers&&this._handlers.clear(),this._currentTool=c.ToolType.Translate,this._store.setToolType(this._currentTool)}};H=Qe([h.injectable(),ae(0,h.injectAll("IToolHandler")),ae(1,h.inject("IEditorStore"))],H);var Je=Object.getOwnPropertyDescriptor,et=(t,e,s,i)=>{for(var o=i>1?void 0:i?Je(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},tt=(t,e)=>(s,i)=>e(s,i,t);let N=class{_currentMode=c.SceneMode.AddFigure;_handlers;constructor(t){this._handlers=new Map(t.map(e=>[e.mode,e]))}manage(t,e){console.log("manage",t),t===c.SceneMode.AddFigure?this._handlers.get(t)?.handle(e):this._handlers.get(t)?.handle(),this._currentMode=t}dispose(){this._handlers&&this._handlers.clear(),this._currentMode=c.SceneMode.AddFigure}};N=et([h.injectable(),tt(0,h.injectAll("ISceneHandler"))],N);var st=Object.getOwnPropertyDescriptor,it=(t,e,s,i)=>{for(var o=i>1?void 0:i?st(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},ot=(t,e)=>(s,i)=>e(s,i,t);let F=class{constructor(t){this._api=t}mode=c.DisplayMode.Wireframe;_prevWireframe=new Map;_prevColorMesh=new Map;_prevColorLines=new Map;_wireColor=new a.Color(65535);handle(){const t=this._api.getMeshes();for(const e of t){const s=Array.isArray(e.material)?e.material:[e.material];for(const i of s)this._enableWireframeOnMaterial(i);e.traverse(i=>{if(i.isLineSegments){const o=i;if(!this._prevColorLines.has(o.material)){const n=o.material;this._prevColorLines.set(n,n.color.clone())}const r=o.material;r.color.copy(this._wireColor),r.needsUpdate=!0}})}}rollback(){for(const[t,e]of this._prevWireframe)"wireframe"in t&&(t.wireframe=e),t.needsUpdate=!0;this._prevWireframe.clear();for(const[t,e]of this._prevColorMesh){const s=t;s.color?.isColor&&s.color.copy(e)}this._prevColorMesh.clear();for(const[t,e]of this._prevColorLines)t.color.copy(e);this._prevColorLines.clear()}dispose(){this.rollback()}_enableWireframeOnMaterial(t){const e=t;"wireframe"in e&&!this._prevWireframe.has(t)&&(this._prevWireframe.set(t,!!e.wireframe),e.wireframe=!0,t.needsUpdate=!0),e.color?.isColor&&(this._prevColorMesh.has(t)||this._prevColorMesh.set(t,e.color.clone()),e.color.copy(this._wireColor))}};F=it([h.injectable(),ot(0,h.inject("RendererApi"))],F);const Y=16776960,V=16755200,rt=2236962;var nt=Object.getOwnPropertyDescriptor,at=(t,e,s,i)=>{for(var o=i>1?void 0:i?nt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},he=(t,e)=>(s,i)=>e(s,i,t);let z=class{constructor(t,e){this._api=t,this._store=e}mode=c.SelectMode.Mesh;_hoveredMesh=null;_selectedMesh=null;_hoverColor=Y;_selectColor=V;_origLineColors=new WeakMap;handle(t,e){if(this._api.setRaycastMode(this.mode),e===y.Hover){if(!t){this._hoveredMesh&&this._hoveredMesh!==this._selectedMesh&&this._restoreEdgesColor(this._hoveredMesh),this._hoveredMesh=null;return}const s=t.intersection.object;this._hoveredMesh!==s&&(this._hoveredMesh&&this._hoveredMesh!==this._selectedMesh&&this._restoreEdgesColor(this._hoveredMesh),s!==this._selectedMesh&&this._paintEdges(s,this._hoverColor),this._hoveredMesh=s)}if(e===y.Click){if(!t){this._selectedMesh&&(this._restoreEdgesColor(this._selectedMesh),this._selectedMesh=null,this._store.setSelectedObject(null));return}const s=t.intersection.object;this._selectedMesh&&this._selectedMesh!==s&&this._restoreEdgesColor(this._selectedMesh),this._paintEdges(s,this._selectColor),this._selectedMesh=s,this._store.setSelectedObject(s)}}rollback(){this._hoveredMesh&&this._restoreEdgesColor(this._hoveredMesh),this._selectedMesh&&this._restoreEdgesColor(this._selectedMesh),this._hoveredMesh=this._selectedMesh=null}dispose(){this.rollback()}_paintEdges(t,e){t.children.forEach(s=>{const i=s;if(i.isLineSegments&&i.material){const o=i.material;this._origLineColors.has(i)||this._origLineColors.set(i,o.color.clone()),o.color.setHex(e),o.needsUpdate=!0}})}_restoreEdgesColor(t){t.children.forEach(e=>{const s=e;if(s.isLineSegments&&s.material){const i=this._origLineColors.get(s);if(i){const o=s.material;o.color.copy(i),o.needsUpdate=!0}}})}};z=at([h.injectable(),he(0,h.inject("RendererApi")),he(1,h.inject("IEditorStore"))],z);var ht=Object.getOwnPropertyDescriptor,lt=(t,e,s,i)=>{for(var o=i>1?void 0:i?ht(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},ct=(t,e)=>(s,i)=>e(s,i,t);let $=class{constructor(t){this._api=t}mode=c.SelectMode.Face;_hovered=null;_selected=null;_hoverColor=Y;_selectColor=V;_defaultColor=2236962;handle(t,e){this._api.setRaycastMode(this.mode),e===y.Hover&&console.log(t),e===y.Click&&console.log(t)}rollback(){throw new Error("Method not implemented.")}dispose(){throw new Error("Method not implemented.")}};$=lt([h.injectable(),ct(0,h.inject("RendererApi"))],$);class W{constructor(e,s){this.api=e,this.store=s}handle(){const e=this.store.getSelectedObject();this.api.setMode(this.mode),e?this.api.attach(e):this.api.detach()}rollback(){this.api.detach()}dispose(){this.rollback()}}var dt=Object.getOwnPropertyDescriptor,_t=(t,e,s,i)=>{for(var o=i>1?void 0:i?dt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},le=(t,e)=>(s,i)=>e(s,i,t);let Z=class extends W{mode=c.ToolType.Translate;constructor(t,e){super(t,e)}};Z=_t([h.injectable(),le(0,h.inject("RendererApi")),le(1,h.inject("IEditorStore"))],Z);var pt=Object.getOwnPropertyDescriptor,ut=(t,e,s,i)=>{for(var o=i>1?void 0:i?pt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},ce=(t,e)=>(s,i)=>e(s,i,t);let B=class extends W{mode=c.ToolType.Scale;constructor(t,e){super(t,e)}};B=ut([h.injectable(),ce(0,h.inject("RendererApi")),ce(1,h.inject("IEditorStore"))],B);var mt=Object.getOwnPropertyDescriptor,ft=(t,e,s,i)=>{for(var o=i>1?void 0:i?mt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},de=(t,e)=>(s,i)=>e(s,i,t);let X=class extends W{mode=c.ToolType.Rotate;constructor(t,e){super(t,e)}};X=ft([h.injectable(),de(0,h.inject("RendererApi")),de(1,h.inject("IEditorStore"))],X);const T=31;var gt=Object.getOwnPropertyDescriptor,bt=(t,e,s,i)=>{for(var o=i>1?void 0:i?gt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},_e=(t,e)=>(s,i)=>e(s,i,t);let K=class{constructor(t,e){this._api=t,this._store=e,this._api.enableCameraLayer(T),this._hoverLine=this._makeOverlayLine(this._hoverColor),this._selectLine=this._makeOverlayLine(this._selectColor),this._api.addObject(this._hoverLine,T),this._api.addObject(this._selectLine,T)}mode=c.SelectMode.Edge;_hoverLine;_selectLine;_hovered=null;_selected=null;_hoverColor=Y;_selectColor=V;handle(t,e){if(this._api.setRaycastMode(this.mode),e===y.Hover){if(!t){this._hoverLine.visible=!1,this._hovered=null;return}const s=t.intersection.object;if(!s?.isLineSegments)return;const i=s,o=Math.floor((t.intersection.index??-1)/2);if(o<0)return;this._selected&&this._same({lines:i,seg:o},this._selected)?this._hoverLine.visible=!1:(this._writeWorldSegment(this._hoverLine,i,o),this._hoverLine.visible=!0),this._hovered={lines:i,seg:o};return}if(e===y.Click){if(!t){this._selectLine.visible=!1,this._selected=null,this._store.setSelectedObject(null);return}const s=t.intersection.object;if(!s?.isLineSegments)return;const i=s,o=Math.floor((t.intersection.index??-1)/2);if(o<0)return;this._writeWorldSegment(this._selectLine,i,o),this._centerAndOrientLineOnSegment(this._selectLine,i,o),this._selectLine.visible=!0,this._prepareEdgeMetadata(i,o),this._store.setSelectedObject(this._selectLine),this._selected={lines:i,seg:o},this._hovered&&this._same(this._hovered,this._selected)&&(this._hoverLine.visible=!1)}}rollback(){this._hoverLine.visible=!1,this._selectLine.visible=!1,this._hovered=this._selected=null}dispose(){this.rollback(),this._api.removeObject(this._hoverLine),this._api.removeObject(this._selectLine),this._hoverLine.geometry.dispose(),this._hoverLine.material.dispose(),this._selectLine.geometry.dispose(),this._selectLine.material.dispose()}_makeOverlayLine(t){const e=new a.BufferGeometry;e.setAttribute("position",new a.Float32BufferAttribute(6,3));const s=new a.LineBasicMaterial({color:t,depthTest:!1,depthWrite:!1,transparent:!0,opacity:1}),i=new a.Line(e,s);return i.renderOrder=1e3,i.raycast=()=>{},i.layers.set(T),i.visible=!1,i}_writeWorldSegment(t,e,s){const i=e.geometry.getAttribute("position"),o=s*2,r=o+1,n=new a.Vector3(i.getX(o),i.getY(o),i.getZ(o)).applyMatrix4(e.matrixWorld),p=new a.Vector3(i.getX(r),i.getY(r),i.getZ(r)).applyMatrix4(e.matrixWorld),m=t.geometry.getAttribute("position");m.setXYZ(0,n.x,n.y,n.z),m.setXYZ(1,p.x,p.y,p.z),m.needsUpdate=!0}_same(t,e){return!!t&&!!e&&t.lines===e.lines&&t.seg===e.seg}_centerAndOrientLineOnSegment(t,e,s){const i=e.geometry.getAttribute("position"),o=s*2,r=o+1,n=new a.Vector3(i.getX(o),i.getY(o),i.getZ(o)).applyMatrix4(e.matrixWorld),p=new a.Vector3(i.getX(r),i.getY(r),i.getZ(r)).applyMatrix4(e.matrixWorld),m=new a.Vector3().subVectors(p,n),b=m.length();if(!isFinite(b)||b===0)return;const v=new a.Vector3().addVectors(n,p).multiplyScalar(.5);t.position.copy(v);const E=t.geometry;let S=E.getAttribute("position");(!S||S.count<2)&&(E.setAttribute("position",new a.BufferAttribute(new Float32Array(6),3)),S=E.getAttribute("position")),S.setXYZ(0,-b/2,0,0),S.setXYZ(1,b/2,0,0),S.needsUpdate=!0,m.normalize();const D=new a.Quaternion().setFromUnitVectors(new a.Vector3(1,0,0),m);t.quaternion.copy(D),t.updateMatrixWorld(!0)}_findParentMesh(t){let e=t;for(;e;){if(e.isMesh)return e;e=e.parent}return null}_prepareEdgeMetadata(t,e){const s=this._findParentMesh(t);if(!s)return;const i=t.geometry.getAttribute("position"),o=e*2,r=o+1,n=new a.Vector3(i.getX(o),i.getY(o),i.getZ(o)).applyMatrix4(t.matrixWorld),p=new a.Vector3(i.getX(r),i.getY(r),i.getZ(r)).applyMatrix4(t.matrixWorld),m=new a.Matrix4().copy(s.matrixWorld).invert(),b=n.clone().applyMatrix4(m),v=p.clone().applyMatrix4(m),S=s.geometry.getAttribute("position"),D=new a.Vector3,w=1e-6,me=[],fe=[];for(let M=0;M<S.count;M++)D.fromBufferAttribute(S,M),D.distanceToSquared(b)<w*w?me.push(M):D.distanceToSquared(v)<w*w&&fe.push(M);const ge=new a.Matrix4().copy(t.matrixWorld).invert(),xt=n.clone().applyMatrix4(ge),Rt=p.clone().applyMatrix4(ge),be=t.geometry.getAttribute("position"),ee=new a.Vector3,ve=[],Me=[];for(let M=0;M<be.count;M++)ee.fromBufferAttribute(be,M),ee.distanceToSquared(xt)<w*w?ve.push(M):ee.distanceToSquared(Rt)<w*w&&Me.push(M);this._selectLine.userData.edgeInfo={lines:t,seg:e,mesh:s,aIndices:me,bIndices:fe,aEdgeIndices:ve,bEdgeIndices:Me}}};K=bt([h.injectable(),_e(0,h.inject("RendererApi")),_e(1,h.inject("IEditorStore"))],K);var vt=Object.getOwnPropertyDescriptor,Mt=(t,e,s,i)=>{for(var o=i>1?void 0:i?vt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},yt=(t,e)=>(s,i)=>e(s,i,t);let G=class{constructor(t){this._api=t}mode=c.SceneMode.AddFigure;_lastAddedMesh=null;handle(t){const e=Pe[t](),s=e.getAttribute("position");s&&s.setUsage&&s.setUsage(a.DynamicDrawUsage);const i=new a.Mesh(e,te);i.layers.enable(0);const o=new a.EdgesGeometry(i.geometry),r=new a.LineSegments(o,new a.LineBasicMaterial({color:rt,linewidth:1}));r.layers.set(1),i.add(r),this._api.addMesh(i),this._lastAddedMesh=i}rollback(){this._lastAddedMesh!==null&&(this._api.removeMesh(this._lastAddedMesh),this._lastAddedMesh=null)}dispose(){this._lastAddedMesh=null}};G=Mt([h.injectable(),yt(0,h.inject("RendererApi"))],G);const St=t=>!!t&&t.isMesh;var wt=Object.getOwnPropertyDescriptor,Pt=(t,e,s,i)=>{for(var o=i>1?void 0:i?wt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},pe=(t,e)=>(s,i)=>e(s,i,t);let q=class{constructor(t,e){this._api=t,this._store=e}mode=c.SceneMode.DeleteFigure;_lastDeletedMesh=null;handle(){const t=this._store.getSelectedObject();St(t)&&(this._api.removeMesh(t),this._store.setSelectedObject(null),this._lastDeletedMesh=t)}rollback(){this._lastDeletedMesh&&(this._api.addMesh(this._lastDeletedMesh),this._lastDeletedMesh=null)}dispose(){this._lastDeletedMesh=null}};q=Pt([h.injectable(),pe(0,h.inject("RendererApi")),pe(1,h.inject("IEditorStore"))],q);var Ot=Object.getOwnPropertyDescriptor,Dt=(t,e,s,i)=>{for(var o=i>1?void 0:i?Ot(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},jt=(t,e)=>(s,i)=>e(s,i,t);let Q=class{constructor(t){this._renderer=t}addMesh(t){this._renderer.addMesh(t)}addMeshes(t){for(const e of t)this._renderer.addMesh(e)}removeMesh(t){this._renderer.removeMesh(t)}removeMeshes(t){for(const e of t)this._renderer.removeMesh(e)}getMeshes(){return this._renderer.getMeshes()}setMode(t){this._renderer.setTransformControlsMode(t)}attach(t){this._renderer.attachTransformControls(t)}detach(){this._renderer.detachTransformControls()}setRaycastMode(t){this._renderer.setRaycastMode(t)}addObject(t,e){this._renderer.addObject(t,e)}removeObject(t){this._renderer.removeObject(t)}enableCameraLayer(t){this._renderer.enableCameraLayer(t)}};Q=Dt([h.injectable(),jt(0,h.inject("EditorRenderer"))],Q);var Lt=Object.getOwnPropertyDescriptor,Ct=(t,e,s,i)=>{for(var o=i>1?void 0:i?Lt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o},O=(t,e)=>(s,i)=>e(s,i,t);d.EditorHub=class{constructor(e,s,i,o,r){this._displayManager=e,this._selectManager=s,this._toolManager=i,this._sceneManager=o,this._renderer=r,this.setSelectMode(c.SelectMode.Mesh),this.setToolMode(c.ToolType.Translate)}setDisplayMode(e){this._displayManager.manage(e)}setSceneMode(e){this._sceneManager.manage(e)}setSelectMode(e){this._selectManager.manage(e)}setToolMode(e){this._toolManager.manage(e)}resizeRenderer(){this._renderer.resize()}updateRenderer(){this._renderer.loop()}addFigure(e,s){this._sceneManager.manage(e,s)}dispose(){this._displayManager.dispose(),this._selectManager.dispose(),this._renderer.dispose()}},d.EditorHub=Ct([h.injectable(),O(0,h.inject("IDisplayManager")),O(1,h.inject("ISelectManager")),O(2,h.inject("IToolManager")),O(3,h.inject("ISceneManager")),O(4,h.inject("EditorRenderer"))],d.EditorHub);var Tt=Object.getOwnPropertyDescriptor,Et=(t,e,s,i)=>{for(var o=i>1?void 0:i?Tt(e,s):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(o=n(o)||o);return o};let J=class{_selectMode=c.SelectMode.Mesh;_toolType=c.ToolType.Translate;_displayMode=c.DisplayMode.Plane;_selectedObject=null;_selectedListeners=new Set;constructor(){Se.makeAutoObservable(this,{},{autoBind:!0})}getSelectMode(){return this._selectMode}getToolType(){return this._toolType}getDisplayMode(){return this._displayMode}setSelectMode(t){this._selectMode=t}setToolType(t){this._toolType=t}setDisplayMode(t){this._displayMode=t}getSelectedObject(){return this._selectedObject}setSelectedObject(t){if(this._selectedObject!==t){this._selectedObject=t;for(const e of this._selectedListeners)e(this._selectedObject)}}onSelectedObjectChange(t){return this._selectedListeners.add(t),()=>this._selectedListeners.delete(t)}};J=Et([h.injectable()],J);let ue=!1;const u=h.container.createChildContainer();function At(t){return ue||(u.registerInstance("Canvas",t),u.registerSingleton("EventBus",d.EventBus),u.registerSingleton("EditorRenderer",d.EditorRenderer),u.registerSingleton("RendererApi",Q),u.registerSingleton("IDisplayHandler",F),u.registerSingleton("ISelectHandler",z),u.registerSingleton("ISelectHandler",$),u.registerSingleton("ISelectHandler",K),u.registerSingleton("IToolHandler",Z),u.registerSingleton("IToolHandler",B),u.registerSingleton("IToolHandler",X),u.registerSingleton("ISceneHandler",G),u.registerSingleton("ISceneHandler",q),u.registerSingleton("IDisplayManager",R),u.registerSingleton("ISelectManager",U),u.registerSingleton("IToolManager",H),u.registerSingleton("ISceneManager",N),u.registerSingleton("EditorHub",d.EditorHub),u.registerSingleton("IEditorStore",J),ue=!0),u}function It(t){return At(t).resolve("EditorHub")}d.EventTopics=P,d.ObjLoader=Ze,d.PreviewRenderer=We,d.Renderer=A,d.createAppHub=It,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
(function(d,A){typeof exports=="object"&&typeof module<"u"?A(exports,require("reflect-metadata"),require("three"),require("@planara/types"),require("@planara/three"),require("tsyringe"),require("events"),require("mobx")):typeof define=="function"&&define.amd?define(["exports","reflect-metadata","three","@planara/types","@planara/three","tsyringe","events","mobx"],A):(d=typeof globalThis<"u"?globalThis:d||self,A(d.PlanaraCore={},d.Reflect,d.THREE,d.PlanaraTypes,d.PlanaraThree,d.tsyringe,d.events,d.mobx))})(this,(function(d,A,c,l,x,h,Ee,Te){"use strict";function Ce(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const i=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,i.get?i:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const a=Ce(c),Ae={[l.FigureType.Plane]:()=>new a.PlaneGeometry(1,1,1,1),[l.FigureType.Cube]:()=>new a.BoxGeometry(1,1,1,1,1,1),[l.FigureType.UVSphere]:()=>new a.SphereGeometry(.5,32,16),[l.FigureType.Icosphere]:()=>new a.IcosahedronGeometry(.5,0),[l.FigureType.Cylinder]:()=>new a.CylinderGeometry(.5,.5,1,32,1,!1),[l.FigureType.Cone]:()=>new a.ConeGeometry(.5,1,32,1,!1),[l.FigureType.Torus]:()=>new a.TorusGeometry(.5,.2,16,64),[l.FigureType.Circle]:()=>new a.CircleGeometry(.5,32),[l.FigureType.Sphere]:()=>new a.SphereGeometry(.5,32,16),[l.FigureType.Custom]:function(){throw new Error("Custom geometry is not generated here.")}},ae=new a.MeshStandardMaterial({color:12566463,metalness:0,roughness:.6}),xe=8;class H{scene;camera;renderer;canvas;meshes=[];constructor(e){this.canvas=e,this.scene=new a.Scene,this.scene.background=new a.Color(1710618),this.camera=new a.PerspectiveCamera(45,e.clientWidth/e.clientHeight,.1,1e3),this.camera.position.set(1,1,7),this.renderer=new a.WebGLRenderer({canvas:e,antialias:!0}),this.renderer.setSize(e.clientWidth,e.clientHeight);const s=new a.AmbientLight(16777215,.5);this.scene.add(s);const i=new a.DirectionalLight(16777215,1);i.position.set(5,10,7),this.scene.add(i)}resize(){this.camera.aspect=this.canvas.clientWidth/this.canvas.clientHeight,this.camera.updateProjectionMatrix(),this.renderer.setSize(this.canvas.clientWidth,this.canvas.clientHeight)}render(){this.renderer.render(this.scene,this.camera)}update(){}loop(){this.update(),this.render(),requestAnimationFrame(()=>this.loop())}addFigure(e){const s=new a.BufferGeometry;s.setAttribute("position",new a.Float32BufferAttribute(e.position,3)),e.normal&&s.setAttribute("normal",new a.Float32BufferAttribute(e.normal,3)),e.uv&&s.setAttribute("uv",new a.Float32BufferAttribute(e.uv,2));const i=new a.Mesh(s,ae);return this.scene.add(i),this.meshes.push(i),i}addMesh(e){this.scene&&(this.scene.add(e),this.meshes.push(e))}removeMesh(e){this.scene&&(this.scene.remove(e),this.meshes=this.meshes.filter(s=>s!==e))}getMeshes(){return this.meshes}addObject(e,s){this.scene&&(typeof s=="number"&&e.layers.set(s),this.scene.add(e))}removeObject(e){this.scene&&(e.parent?e.parent.remove(e):this.scene.remove(e))}enableCameraLayer(e){this.camera&&this.camera.layers.enable(e)}dispose(){this.meshes&&(this.meshes.length=0,this.meshes=[]),this.scene=null,this.camera=null,this.renderer?.dispose(),this.canvas=null}}var Ie=Object.getOwnPropertyDescriptor,Re=(t,e,s,i)=>{for(var r=i>1?void 0:i?Ie(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r};d.EventBus=class{_emitter;constructor(){this._emitter=new Ee.EventEmitter}emit(e,s){this._emitter.emit(e,s)}on(e,s){this._emitter.on(e,s)}off(e,s){this._emitter.off(e,s)}},d.EventBus=Re([h.injectable()],d.EventBus);var L=(t=>(t.SelectHover="select.hover",t.SelectClick="select.click",t.ToolSelect="tool.select",t))(L||{});const Ve=.03,ke=.05,he=0,Ue=1,He=2,D=31,I=16776960,R=16755200,Ne=2236962,Ye=2236962,Fe=t=>!!t&&t.isMesh,le=t=>{let e=t;for(;e;){if(e.isMesh)return e;e=e.parent}return null},ce=t=>{const e=new a.BufferGeometry;e.setAttribute("position",t.getAttribute("position")),e.computeBoundingSphere(),e.computeBoundingBox();const s=new a.PointsMaterial({color:Ye,size:6,sizeAttenuation:!1,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.9}),i=new a.Points(e,s);return i.layers.set(He),i.renderOrder=1e3,i.visible=!1,i},de=t=>{const e=new a.EdgesGeometry(t),s=new a.LineSegments(e,new a.LineBasicMaterial({color:Ne,linewidth:1}));return s.layers.set(Ue),s};var We=Object.getOwnPropertyDescriptor,ze=(t,e,s,i)=>{for(var r=i>1?void 0:i?We(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},_e=(t,e)=>(s,i)=>e(s,i,t);d.EditorRenderer=class extends H{constructor(e,s){super(e),this._canvas=e,this._bus=s;const i=new a.GridHelper(10,10);i.position.y=-.001,this.scene.add(i);const r=new x.SymmetricAxesHelper(6);this.scene.add(r),this._orbit=new x.OrbitWithState(this.camera,this.renderer.domElement),this._orbit.enableDamping=!0,this._orbit.dampingFactor=.05,this._cameraGizmo=new x.CameraAxesGizmo(this.renderer,this.camera,{size:96,margin:36}),this._raycaster=new a.Raycaster,this._mouse=new a.Vector2,this.scene.add(new a.HemisphereLight(16777215,4473924,.6)),this.camera.layers.enable(0),this.camera.layers.enable(1),this._transform=new x.ModelingTransformControls(this.camera,this.renderer.domElement),this._transformHelper=this._transform.getHelper(),this.scene.add(this._transformHelper),this._isEventListenersAdded||this._initMouseListeners()}_orbit;_transform;_transformHelper;_raycaster;_mouse;_isEventListenersAdded=!1;_lastHovered=null;_cameraGizmo;update(){this._orbit.update()}addFigure(e){const s=super.addFigure(e);s.layers.enable(he);const i=de(s.geometry);s.add(i);const r=ce(s.geometry);return s.add(r),s}setTransformControlsMode(e){this._transform.setMode(e)}attachTransformControls(e){this._transform.attach(e)}detachTransformControls(){this._transform.detach()}setRaycastMode(e){const s=this._raycaster;switch(s.params.Line.threshold=0,s.params.Points.threshold=0,e){case l.SelectMode.Mesh:case l.SelectMode.Face:s.layers.set(0);break;case l.SelectMode.Edge:s.layers.set(1),s.params.Line.threshold=Ve;break;case l.SelectMode.Vertex:s.layers.set(2),s.params.Points.threshold=ke;break}}dispose(){this._isEventListenersAdded&&(this.canvas.removeEventListener("mousemove",this._handleMouseMove,!1),this.canvas.removeEventListener("click",this._handleMouseClick,!1),this.canvas.removeEventListener("pointerdown",e=>this._transform.pointerDown(e)),this.canvas.removeEventListener("pointermove",e=>this._transform.pointerMove(e)),this.canvas.removeEventListener("pointerup",e=>this._transform.pointerUp(e)),this.canvas.removeEventListener("pointerleave",()=>this._transform.pointerHover(null)),this._transform.removeEventListener("dragging-changed",()=>{this._orbit.enabled=!this._transform.dragging}),this._isEventListenersAdded=!1),this._orbit?.dispose(),this._transform?.dispose(),this._transformHelper?.parent&&this._transformHelper.parent.remove(this._transformHelper),this._lastHovered=null,super.dispose()}render(){super.render(),this._cameraGizmo.render(this.canvas.width,this.canvas.height)}_initMouseListeners(){this.canvas.addEventListener("mousemove",this._handleMouseMove,!1),this.canvas.addEventListener("click",this._handleMouseClick,!1),this.canvas.addEventListener("pointerdown",e=>this._transform.pointerDown(e)),this.canvas.addEventListener("pointermove",e=>this._transform.pointerMove(e)),this.canvas.addEventListener("pointerup",e=>this._transform.pointerUp(e)),this.canvas.addEventListener("pointerleave",()=>this._transform.pointerHover(null)),this._transform.addEventListener("dragging-changed",()=>{this._orbit.enabled=!this._transform.dragging}),this._isEventListenersAdded=!0}_handleMouseMove=e=>{this._processRaycastEvent(e,L.SelectHover,!0)};_handleMouseClick=e=>{this._processRaycastEvent(e,L.SelectClick,!1)};_processRaycastEvent(e,s,i){if(this._orbit.isInteracting||this._transform.dragging)return;const r=this._canvas.getBoundingClientRect();this._mouse.x=(e.clientX-r.left)/r.width*2-1,this._mouse.y=-((e.clientY-r.top)/r.height)*2+1,this._raycaster.setFromCamera(this._mouse,this.camera);const n=this._raycaster.intersectObjects(this.meshes,!0)[0]??null,u=n?.object??null;i?u!==this._lastHovered&&(this.meshes.forEach(p=>p.userData.isHit=!1),u&&(u.userData.isHit=!0),this._lastHovered=u,this._bus.emit(s,n?{intersection:n}:null)):this._bus.emit(s,n?{intersection:n}:null)}},d.EditorRenderer=ze([h.injectable(),_e(0,h.inject("Canvas")),_e(1,h.inject("EventBus"))],d.EditorRenderer);const ue={type:"change"},N={type:"start"},pe={type:"end"},V=new c.Ray,me=new c.Plane,Ze=Math.cos(70*c.MathUtils.DEG2RAD),f=new c.Vector3,v=2*Math.PI,_={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},Y=1e-6;class Be extends c.Controls{constructor(e,s=null){super(e,s),this.state=_.NONE,this.target=new c.Vector3,this.cursor=new c.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=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.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:c.MOUSE.ROTATE,MIDDLE:c.MOUSE.DOLLY,RIGHT:c.MOUSE.PAN},this.touches={ONE:c.TOUCH.ROTATE,TWO:c.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new c.Vector3,this._lastQuaternion=new c.Quaternion,this._lastTargetPosition=new c.Vector3,this._quat=new c.Quaternion().setFromUnitVectors(e.up,new c.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new c.Spherical,this._sphericalDelta=new c.Spherical,this._scale=1,this._panOffset=new c.Vector3,this._rotateStart=new c.Vector2,this._rotateEnd=new c.Vector2,this._rotateDelta=new c.Vector2,this._panStart=new c.Vector2,this._panEnd=new c.Vector2,this._panDelta=new c.Vector2,this._dollyStart=new c.Vector2,this._dollyEnd=new c.Vector2,this._dollyDelta=new c.Vector2,this._dollyDirection=new c.Vector3,this._mouse=new c.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=Xe.bind(this),this._onPointerDown=$e.bind(this),this._onPointerUp=Ge.bind(this),this._onContextMenu=st.bind(this),this._onMouseWheel=Qe.bind(this),this._onKeyDown=Je.bind(this),this._onTouchStart=et.bind(this),this._onTouchMove=tt.bind(this),this._onMouseDown=Ke.bind(this),this._onMouseMove=qe.bind(this),this._interceptControlDown=it.bind(this),this._interceptControlUp=rt.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(ue),this.update(),this.state=_.NONE}update(e=null){const s=this.object.position;f.copy(s).sub(this.target),f.applyQuaternion(this._quat),this._spherical.setFromVector3(f),this.autoRotate&&this.state===_.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,r=this.maxAzimuthAngle;isFinite(i)&&isFinite(r)&&(i<-Math.PI?i+=v:i>Math.PI&&(i-=v),r<-Math.PI?r+=v:r>Math.PI&&(r-=v),i<=r?this._spherical.theta=Math.max(i,Math.min(r,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+r)/2?Math.max(i,this._spherical.theta):Math.min(r,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let o=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const n=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),o=n!=this._spherical.radius}if(f.setFromSpherical(this._spherical),f.applyQuaternion(this._quatInverse),s.copy(this.target).add(f),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let n=null;if(this.object.isPerspectiveCamera){const u=f.length();n=this._clampDistance(u*this._scale);const p=u-n;this.object.position.addScaledVector(this._dollyDirection,p),this.object.updateMatrixWorld(),o=!!p}else if(this.object.isOrthographicCamera){const u=new c.Vector3(this._mouse.x,this._mouse.y,0);u.unproject(this.object);const p=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),o=p!==this.object.zoom;const g=new c.Vector3(this._mouse.x,this._mouse.y,0);g.unproject(this.object),this.object.position.sub(g).add(u),this.object.updateMatrixWorld(),n=f.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;n!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position):(V.origin.copy(this.object.position),V.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(V.direction))<Ze?this.object.lookAt(this.target):(me.setFromNormalAndCoplanarPoint(this.object.up,this.target),V.intersectPlane(me,this.target))))}else if(this.object.isOrthographicCamera){const n=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),n!==this.object.zoom&&(this.object.updateProjectionMatrix(),o=!0)}return this._scale=1,this._performCursorZoom=!1,o||this._lastPosition.distanceToSquared(this.object.position)>Y||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Y||this._lastTargetPosition.distanceToSquared(this.target)>Y?(this.dispatchEvent(ue),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?v/60*this.autoRotateSpeed*e:v/60/60*this.autoRotateSpeed}_getZoomScale(e){const s=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*s)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,s){f.setFromMatrixColumn(s,0),f.multiplyScalar(-e),this._panOffset.add(f)}_panUp(e,s){this.screenSpacePanning===!0?f.setFromMatrixColumn(s,1):(f.setFromMatrixColumn(s,0),f.crossVectors(this.object.up,f)),f.multiplyScalar(e),this._panOffset.add(f)}_pan(e,s){const i=this.domElement;if(this.object.isPerspectiveCamera){const r=this.object.position;f.copy(r).sub(this.target);let o=f.length();o*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*o/i.clientHeight,this.object.matrix),this._panUp(2*s*o/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(s*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,s){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),r=e-i.left,o=s-i.top,n=i.width,u=i.height;this._mouse.x=r/n*2-1,this._mouse.y=-(o/u)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const s=this.domElement;this._rotateLeft(v*this._rotateDelta.x/s.clientHeight),this._rotateUp(v*this._rotateDelta.y/s.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let s=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(v*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),s=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-v*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),s=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(v*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),s=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-v*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),s=!0;break}s&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),i=.5*(e.pageX+s.x),r=.5*(e.pageY+s.y);this._rotateStart.set(i,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),i=.5*(e.pageX+s.x),r=.5*(e.pageY+s.y);this._panStart.set(i,r)}}_handleTouchStartDolly(e){const s=this._getSecondPointerPosition(e),i=e.pageX-s.x,r=e.pageY-s.y,o=Math.sqrt(i*i+r*r);this._dollyStart.set(0,o)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const i=this._getSecondPointerPosition(e),r=.5*(e.pageX+i.x),o=.5*(e.pageY+i.y);this._rotateEnd.set(r,o)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const s=this.domElement;this._rotateLeft(v*this._rotateDelta.x/s.clientHeight),this._rotateUp(v*this._rotateDelta.y/s.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),i=.5*(e.pageX+s.x),r=.5*(e.pageY+s.y);this._panEnd.set(i,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const s=this._getSecondPointerPosition(e),i=e.pageX-s.x,r=e.pageY-s.y,o=Math.sqrt(i*i+r*r);this._dollyEnd.set(0,o),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const n=(e.pageX+s.x)*.5,u=(e.pageY+s.y)*.5;this._updateZoomParameters(n,u)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let s=0;s<this._pointers.length;s++)if(this._pointers[s]==e.pointerId){this._pointers.splice(s,1);return}}_isTrackingPointer(e){for(let s=0;s<this._pointers.length;s++)if(this._pointers[s]==e.pointerId)return!0;return!1}_trackPointer(e){let s=this._pointerPositions[e.pointerId];s===void 0&&(s=new c.Vector2,this._pointerPositions[e.pointerId]=s),s.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){const s=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[s]}_customWheelEvent(e){const s=e.deltaMode,i={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(s){case 1:i.deltaY*=16;break;case 2:i.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(i.deltaY*=10),i}}function $e(t){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(t.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.domElement.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(t)&&(this._addPointer(t),t.pointerType==="touch"?this._onTouchStart(t):this._onMouseDown(t)))}function Xe(t){this.enabled!==!1&&(t.pointerType==="touch"?this._onTouchMove(t):this._onMouseMove(t))}function Ge(t){switch(this._removePointer(t),this._pointers.length){case 0:this.domElement.releasePointerCapture(t.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(pe),this.state=_.NONE;break;case 1:const e=this._pointers[0],s=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:s.x,pageY:s.y});break}}function Ke(t){let e;switch(t.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case c.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(t),this.state=_.DOLLY;break;case c.MOUSE.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=_.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=_.ROTATE}break;case c.MOUSE.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=_.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=_.PAN}break;default:this.state=_.NONE}this.state!==_.NONE&&this.dispatchEvent(N)}function qe(t){switch(this.state){case _.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(t);break;case _.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(t);break;case _.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(t);break}}function Qe(t){this.enabled===!1||this.enableZoom===!1||this.state!==_.NONE||(t.preventDefault(),this.dispatchEvent(N),this._handleMouseWheel(this._customWheelEvent(t)),this.dispatchEvent(pe))}function Je(t){this.enabled!==!1&&this._handleKeyDown(t)}function et(t){switch(this._trackPointer(t),this._pointers.length){case 1:switch(this.touches.ONE){case c.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(t),this.state=_.TOUCH_ROTATE;break;case c.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(t),this.state=_.TOUCH_PAN;break;default:this.state=_.NONE}break;case 2:switch(this.touches.TWO){case c.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(t),this.state=_.TOUCH_DOLLY_PAN;break;case c.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(t),this.state=_.TOUCH_DOLLY_ROTATE;break;default:this.state=_.NONE}break;default:this.state=_.NONE}this.state!==_.NONE&&this.dispatchEvent(N)}function tt(t){switch(this._trackPointer(t),this.state){case _.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(t),this.update();break;case _.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(t),this.update();break;case _.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(t),this.update();break;case _.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(t),this.update();break;default:this.state=_.NONE}}function st(t){this.enabled!==!1&&t.preventDefault()}function it(t){t.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function rt(t){t.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}class ot extends H{_orbit;constructor(e){super(e),this.camera.position.set(1,1,7),this.camera.lookAt(0,0,0),this._orbit=new Be(this.camera,this.canvas),this._orbit.target.set(0,0,0),this._orbit.minPolarAngle=Math.PI/2,this._orbit.maxPolarAngle=Math.PI/2,this._orbit.enableRotate=!0,this._orbit.enableZoom=!1,this._orbit.enablePan=!1}update(){this._orbit?.update()}}class nt{_positions=[];_normals=[];_uvs=[];_tmpPositions=[];_tmpNormals=[];_tmpUVs=[];load(e){const s=e.split(`
|
|
2
|
+
`);for(const r of s){if(!r.trim()||r.startsWith("#"))continue;const o=r.trim().split(/\s+/);switch(o[0]){case"v":this._tmpPositions.push(o.slice(1).map(Number));break;case"vn":this._tmpNormals.push(o.slice(1).map(Number));break;case"vt":this._tmpUVs.push(o.slice(1).map(Number));break;case"f":this.processFaceLine(o);break}}const i={type:l.FigureType.Custom,position:this._positions,...this._normals.length>0&&{normal:this._normals},...this._uvs.length>0&&{uv:this._uvs}};return new l.Figure(i)}processFaceLine(e){for(let s=1;s<e.length;s++){const i=e[s];if(!i)continue;const[r,o,n]=i.split("/"),u=r?parseInt(r,10):void 0,p=o?parseInt(o,10):void 0,g=n?parseInt(n,10):void 0;if(u!==void 0){const b=this._tmpPositions[u-1];b&&this._positions.push(...b)}if(p!==void 0){const b=this._tmpUVs[p-1];b&&this._uvs.push(...b)}if(g!==void 0){const b=this._tmpNormals[g-1];b&&this._normals.push(...b)}}}}var at=Object.getOwnPropertyDescriptor,ht=(t,e,s,i)=>{for(var r=i>1?void 0:i?at(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},fe=(t,e)=>(s,i)=>e(s,i,t);let F=class{constructor(t,e){this._store=e,this._handlers=new Map(t.map(s=>[s.mode,s]))}_currentMode=l.DisplayMode.Plane;_handlers;manage(t){t!==this._currentMode&&(this._handlers.get(this._currentMode)?.rollback(),t!==l.DisplayMode.Plane&&this._handlers.get(t)?.handle(),this._currentMode=t,this._store.setDisplayMode(this._currentMode))}dispose(){this._handlers&&this._handlers.clear(),this._currentMode=l.DisplayMode.Plane,this._store.setDisplayMode(this._currentMode)}};F=ht([h.injectable(),fe(0,h.injectAll("IDisplayHandler")),fe(1,h.inject("IEditorStore"))],F);var y=(t=>(t.Hover="hover",t.Click="click",t))(y||{}),lt=Object.getOwnPropertyDescriptor,ct=(t,e,s,i)=>{for(var r=i>1?void 0:i?lt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},W=(t,e)=>(s,i)=>e(s,i,t);let z=class{constructor(t,e,s){this._eventBus=t,this._store=s,this._handlers=new Map(e.map(i=>[i.mode,i])),this._eventBus.on(L.SelectHover,this._onHover),this._eventBus.on(L.SelectClick,this._onClick)}_currentMode=l.SelectMode.Mesh;_handlers;manage(t){t!==this._currentMode&&(this._handlers.get(this._currentMode)?.rollback(),this._currentMode=t,this._store.setSelectMode(this._currentMode))}_onHover=t=>{this._handlers.get(this._currentMode)?.handle(t,y.Hover)};_onClick=t=>{this._handlers.get(this._currentMode)?.handle(t,y.Click)};dispose(){this._handlers&&this._handlers.clear(),this._eventBus.off(L.SelectHover,this._onHover),this._currentMode=l.SelectMode.Mesh,this._store.setSelectMode(this._currentMode)}};z=ct([h.injectable(),W(0,h.inject("EventBus")),W(1,h.injectAll("ISelectHandler")),W(2,h.inject("IEditorStore"))],z);class dt{isToolEnabled(e,s){return l.DEFAULT_TOOL_RULES[s].includes(e)}getEnabledTools(e){return l.DEFAULT_TOOL_RULES[e]}}var _t=Object.getOwnPropertyDescriptor,ut=(t,e,s,i)=>{for(var r=i>1?void 0:i?_t(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},ge=(t,e)=>(s,i)=>e(s,i,t);let Z=class{constructor(t,e){this._store=e,this._handlers=new Map(t.map(s=>[s.mode,s])),this._unsubSelected=this._store.onSelectedObjectChange(()=>{this._handlers.get(this._currentTool)?.handle()}),this._policy=new dt}_currentTool=l.ToolType.Translate;_handlers;_unsubSelected;_policy;manage(t){if(this._currentTool===t)return;const e=this._store.getSelectMode();this._policy.isToolEnabled(t,e)&&(this._handlers.get(this._currentTool)?.rollback(),this._currentTool=t,this._store.setToolType(this._currentTool),this._handlers.get(this._currentTool)?.handle())}dispose(){this._unsubSelected?.(),this._handlers&&this._handlers.clear(),this._currentTool=l.ToolType.Translate,this._store.setToolType(this._currentTool)}};Z=ut([h.injectable(),ge(0,h.injectAll("IToolHandler")),ge(1,h.inject("IEditorStore"))],Z);var pt=Object.getOwnPropertyDescriptor,mt=(t,e,s,i)=>{for(var r=i>1?void 0:i?pt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},ft=(t,e)=>(s,i)=>e(s,i,t);let B=class{_currentMode=l.SceneMode.AddFigure;_handlers;constructor(t){this._handlers=new Map(t.map(e=>[e.mode,e]))}manage(t,e){console.log("manage",t),t===l.SceneMode.AddFigure?this._handlers.get(t)?.handle(e):this._handlers.get(t)?.handle(),this._currentMode=t}dispose(){this._handlers&&this._handlers.clear(),this._currentMode=l.SceneMode.AddFigure}};B=mt([h.injectable(),ft(0,h.injectAll("ISceneHandler"))],B);var gt=Object.getOwnPropertyDescriptor,bt=(t,e,s,i)=>{for(var r=i>1?void 0:i?gt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},vt=(t,e)=>(s,i)=>e(s,i,t);let $=class{constructor(t){this._api=t}mode=l.DisplayMode.Wireframe;_prevWireframe=new Map;_prevColorMesh=new Map;_prevColorLines=new Map;_wireColor=new a.Color(65535);handle(){const t=this._api.getMeshes();for(const e of t){const s=Array.isArray(e.material)?e.material:[e.material];for(const i of s)this._enableWireframeOnMaterial(i);e.traverse(i=>{if(i.isLineSegments){const r=i;if(!this._prevColorLines.has(r.material)){const n=r.material;this._prevColorLines.set(n,n.color.clone())}const o=r.material;o.color.copy(this._wireColor),o.needsUpdate=!0}})}}rollback(){for(const[t,e]of this._prevWireframe)"wireframe"in t&&(t.wireframe=e),t.needsUpdate=!0;this._prevWireframe.clear();for(const[t,e]of this._prevColorMesh){const s=t;s.color?.isColor&&s.color.copy(e)}this._prevColorMesh.clear();for(const[t,e]of this._prevColorLines)t.color.copy(e);this._prevColorLines.clear()}dispose(){this.rollback()}_enableWireframeOnMaterial(t){const e=t;"wireframe"in e&&!this._prevWireframe.has(t)&&(this._prevWireframe.set(t,!!e.wireframe),e.wireframe=!0,t.needsUpdate=!0),e.color?.isColor&&(this._prevColorMesh.has(t)||this._prevColorMesh.set(t,e.color.clone()),e.color.copy(this._wireColor))}};$=bt([h.injectable(),vt(0,h.inject("RendererApi"))],$);var Mt=Object.getOwnPropertyDescriptor,yt=(t,e,s,i)=>{for(var r=i>1?void 0:i?Mt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},be=(t,e)=>(s,i)=>e(s,i,t);let X=class{constructor(t,e){this._api=t,this._store=e}mode=l.SelectMode.Mesh;_hoveredMesh=null;_selectedMesh=null;_hoverColor=I;_selectColor=R;_origLineColors=new WeakMap;handle(t,e){if(this._api.setRaycastMode(this.mode),e===y.Hover){if(!t){this._hoveredMesh&&this._hoveredMesh!==this._selectedMesh&&this._restoreEdgesColor(this._hoveredMesh),this._hoveredMesh=null;return}const s=t.intersection.object;this._hoveredMesh!==s&&(this._hoveredMesh&&this._hoveredMesh!==this._selectedMesh&&this._restoreEdgesColor(this._hoveredMesh),s!==this._selectedMesh&&this._paintEdges(s,this._hoverColor),this._hoveredMesh=s)}if(e===y.Click){if(!t){this._selectedMesh&&(this._restoreEdgesColor(this._selectedMesh),this._selectedMesh=null,this._store.setSelectedObject(null));return}const s=t.intersection.object;this._selectedMesh&&this._selectedMesh!==s&&this._restoreEdgesColor(this._selectedMesh),this._paintEdges(s,this._selectColor),this._selectedMesh=s,this._store.setSelectedObject(s)}}rollback(){this._hoveredMesh&&this._restoreEdgesColor(this._hoveredMesh),this._selectedMesh&&this._restoreEdgesColor(this._selectedMesh),this._hoveredMesh=this._selectedMesh=null}dispose(){this.rollback()}_paintEdges(t,e){t.children.forEach(s=>{const i=s;if(i.isLineSegments&&i.material){const r=i.material;this._origLineColors.has(i)||this._origLineColors.set(i,r.color.clone()),r.color.setHex(e),r.needsUpdate=!0}})}_restoreEdgesColor(t){t.children.forEach(e=>{const s=e;if(s.isLineSegments&&s.material){const i=this._origLineColors.get(s);if(i){const r=s.material;r.color.copy(i),r.needsUpdate=!0}}})}};X=yt([h.injectable(),be(0,h.inject("RendererApi")),be(1,h.inject("IEditorStore"))],X);var St=Object.getOwnPropertyDescriptor,wt=(t,e,s,i)=>{for(var r=i>1?void 0:i?St(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},Pt=(t,e)=>(s,i)=>e(s,i,t);let G=class{constructor(t){this._api=t}mode=l.SelectMode.Face;_hovered=null;_selected=null;_hoverColor=I;_selectColor=R;_defaultColor=2236962;handle(t,e){this._api.setRaycastMode(this.mode),e===y.Hover&&console.log(t),e===y.Click&&console.log(t)}rollback(){throw new Error("Method not implemented.")}dispose(){throw new Error("Method not implemented.")}};G=wt([h.injectable(),Pt(0,h.inject("RendererApi"))],G);var Ot=Object.getOwnPropertyDescriptor,Dt=(t,e,s,i)=>{for(var r=i>1?void 0:i?Ot(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},ve=(t,e)=>(s,i)=>e(s,i,t);let K=class{constructor(t,e){this._api=t,this._store=e,this._api.enableCameraLayer(D),this._hoverVertex=this._makeOverlayVertex(this._hoverColor),this._selectVertex=this._makeOverlayVertex(this._selectColor),this._api.addObject(this._hoverVertex,D),this._api.addObject(this._selectVertex,D)}mode=l.SelectMode.Vertex;_hovered=null;_selected=null;_hoverVertex;_selectVertex;_hoverColor=I;_selectColor=R;handle(t,e){if(this._api.setRaycastMode(this.mode),e===y.Hover){if(!t){this._hoverVertex.visible=!1,this._hovered=null;return}const s=t.intersection.object;if(!s?.isPoints)return;const i=s,r=t.intersection.index??-1;if(r<0)return;this._selected&&this._same({points:i,index:r},this._selected)?this._hoverVertex.visible=!1:(this._writeWorldVertex(this._hoverVertex,i,r),this._hoverVertex.visible=!0);return}if(e===y.Click){if(!t){this._selectVertex.visible=!1,this._selected=null,this._store.setSelectedObject(null);return}const s=t.intersection.object;if(!s?.isPoints)return;const i=s,r=t.intersection.index??-1;if(r<0)return;this._writeWorldVertex(this._selectVertex,i,r),this._centerVertexOnPoint(this._selectVertex,i,r),this._selectVertex.visible=!0,this._prepareVertexMetadata(i,r),this._store.setSelectedObject(this._selectVertex),this._selected={points:i,index:r},this._hovered&&this._same(this._hovered,this._selected)&&(this._hoverVertex.visible=!1);return}}rollback(){this._hoverVertex.visible=!1,this._selectVertex.visible=!1,this._hovered=this._selected=null}dispose(){this.rollback(),this._api.removeObject(this._hoverVertex),this._api.removeObject(this._selectVertex),this._hoverVertex.geometry.dispose(),this._hoverVertex.material.dispose(),this._selectVertex.geometry.dispose(),this._selectVertex.material.dispose()}_makeOverlayVertex(t,e=xe){const s=new a.BufferGeometry;s.setAttribute("position",new a.Float32BufferAttribute([0,0,0],3));const i=new a.PointsMaterial({color:t,size:e,sizeAttenuation:!1,depthTest:!1,depthWrite:!1,transparent:!0,opacity:1}),r=new a.Points(s,i);return r.renderOrder=1e3,r.raycast=()=>{},r.layers.set(D),r.visible=!1,r}_writeWorldVertex(t,e,s){const i=e.geometry.getAttribute("position"),r=new a.Vector3(i.getX(s),i.getY(s),i.getZ(s)).applyMatrix4(e.matrixWorld),o=t.geometry.getAttribute("position");o.setXYZ(0,r.x,r.y,r.z),o.needsUpdate=!0}_same(t,e){return!!t&&!!e&&t.points===e.points&&t.index===e.index}_prepareVertexMetadata(t,e){const s=le(t);if(!s)return;const i=t.geometry.getAttribute("position"),r=new a.Vector3(i.getX(e),i.getY(e),i.getZ(e)).applyMatrix4(t.matrixWorld),o=new a.Matrix4().copy(s.matrixWorld).invert(),n=r.clone().applyMatrix4(o),p=s.geometry.getAttribute("position"),g=1e-6,b=g*g,j=new a.Vector3,M=[];for(let w=0;w<p.count;w++)j.fromBufferAttribute(p,w),j.distanceToSquared(n)<b&&M.push(w);const O=s.children.find(w=>w?.isLineSegments);let S=[];if(O){const w=new a.Matrix4().copy(O.matrixWorld).invert(),k=r.clone().applyMatrix4(w),C=O.geometry.getAttribute("position"),U=new a.Vector3;for(let E=0;E<C.count;E++)U.fromBufferAttribute(C,E),U.distanceToSquared(k)<b&&S.push(E)}this._selectVertex.userData.vertexInfo={points:t,index:e,mesh:s,vertexIndices:M,lines:O??null,edgeVertexIndices:S}}_centerVertexOnPoint(t,e,s){const i=e.geometry.getAttribute("position"),r=new a.Vector3(i.getX(s),i.getY(s),i.getZ(s)).applyMatrix4(e.matrixWorld);t.position.copy(r);const o=t.geometry;let n=o.getAttribute("position");(!n||n.count<1)&&(o.setAttribute("position",new a.BufferAttribute(new Float32Array(3),3)),n=o.getAttribute("position")),n.setXYZ(0,0,0,0),n.needsUpdate=!0,t.quaternion.identity(),t.scale.set(1,1,1),t.updateMatrixWorld(!0)}};K=Dt([h.injectable(),ve(0,h.inject("RendererApi")),ve(1,h.inject("IEditorStore"))],K);class q{constructor(e,s){this.api=e,this.store=s}handle(){const e=this.store.getSelectedObject();this.api.setMode(this.mode),e?this.api.attach(e):this.api.detach()}rollback(){this.api.detach()}dispose(){this.rollback()}}var Lt=Object.getOwnPropertyDescriptor,jt=(t,e,s,i)=>{for(var r=i>1?void 0:i?Lt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},Me=(t,e)=>(s,i)=>e(s,i,t);let Q=class extends q{mode=l.ToolType.Translate;constructor(t,e){super(t,e)}};Q=jt([h.injectable(),Me(0,h.inject("RendererApi")),Me(1,h.inject("IEditorStore"))],Q);var Et=Object.getOwnPropertyDescriptor,Tt=(t,e,s,i)=>{for(var r=i>1?void 0:i?Et(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},ye=(t,e)=>(s,i)=>e(s,i,t);let J=class extends q{mode=l.ToolType.Scale;constructor(t,e){super(t,e)}};J=Tt([h.injectable(),ye(0,h.inject("RendererApi")),ye(1,h.inject("IEditorStore"))],J);var Ct=Object.getOwnPropertyDescriptor,At=(t,e,s,i)=>{for(var r=i>1?void 0:i?Ct(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},Se=(t,e)=>(s,i)=>e(s,i,t);let ee=class extends q{mode=l.ToolType.Rotate;constructor(t,e){super(t,e)}};ee=At([h.injectable(),Se(0,h.inject("RendererApi")),Se(1,h.inject("IEditorStore"))],ee);var xt=Object.getOwnPropertyDescriptor,It=(t,e,s,i)=>{for(var r=i>1?void 0:i?xt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},we=(t,e)=>(s,i)=>e(s,i,t);let te=class{constructor(t,e){this._api=t,this._store=e,this._api.enableCameraLayer(D),this._hoverLine=this._makeOverlayLine(this._hoverColor),this._selectLine=this._makeOverlayLine(this._selectColor),this._api.addObject(this._hoverLine,D),this._api.addObject(this._selectLine,D)}mode=l.SelectMode.Edge;_hoverLine;_selectLine;_hovered=null;_selected=null;_hoverColor=I;_selectColor=R;handle(t,e){if(this._api.setRaycastMode(this.mode),e===y.Hover){if(!t){this._hoverLine.visible=!1,this._hovered=null;return}const s=t.intersection.object;if(!s?.isLineSegments)return;const i=s,r=Math.floor((t.intersection.index??-1)/2);if(r<0)return;this._selected&&this._same({lines:i,seg:r},this._selected)?this._hoverLine.visible=!1:(this._writeWorldSegment(this._hoverLine,i,r),this._hoverLine.visible=!0),this._hovered={lines:i,seg:r};return}if(e===y.Click){if(!t){this._selectLine.visible=!1,this._selected=null,this._store.setSelectedObject(null);return}const s=t.intersection.object;if(!s?.isLineSegments)return;const i=s,r=Math.floor((t.intersection.index??-1)/2);if(r<0)return;this._writeWorldSegment(this._selectLine,i,r),this._centerAndOrientLineOnSegment(this._selectLine,i,r),this._selectLine.visible=!0,this._prepareEdgeMetadata(i,r),this._store.setSelectedObject(this._selectLine),this._selected={lines:i,seg:r},this._hovered&&this._same(this._hovered,this._selected)&&(this._hoverLine.visible=!1)}}rollback(){this._hoverLine.visible=!1,this._selectLine.visible=!1,this._hovered=this._selected=null}dispose(){this.rollback(),this._api.removeObject(this._hoverLine),this._api.removeObject(this._selectLine),this._hoverLine.geometry.dispose(),this._hoverLine.material.dispose(),this._selectLine.geometry.dispose(),this._selectLine.material.dispose()}_makeOverlayLine(t){const e=new a.BufferGeometry;e.setAttribute("position",new a.Float32BufferAttribute(6,3));const s=new a.LineBasicMaterial({color:t,depthTest:!1,depthWrite:!1,transparent:!0,opacity:1}),i=new a.Line(e,s);return i.renderOrder=1e3,i.raycast=()=>{},i.layers.set(D),i.visible=!1,i}_writeWorldSegment(t,e,s){const i=e.geometry.getAttribute("position"),r=s*2,o=r+1,n=new a.Vector3(i.getX(r),i.getY(r),i.getZ(r)).applyMatrix4(e.matrixWorld),u=new a.Vector3(i.getX(o),i.getY(o),i.getZ(o)).applyMatrix4(e.matrixWorld),p=t.geometry.getAttribute("position");p.setXYZ(0,n.x,n.y,n.z),p.setXYZ(1,u.x,u.y,u.z),p.needsUpdate=!0}_same(t,e){return!!t&&!!e&&t.lines===e.lines&&t.seg===e.seg}_centerAndOrientLineOnSegment(t,e,s){const i=e.geometry.getAttribute("position"),r=s*2,o=r+1,n=new a.Vector3(i.getX(r),i.getY(r),i.getZ(r)).applyMatrix4(e.matrixWorld),u=new a.Vector3(i.getX(o),i.getY(o),i.getZ(o)).applyMatrix4(e.matrixWorld),p=new a.Vector3().subVectors(u,n),g=p.length();if(!isFinite(g)||g===0)return;const b=new a.Vector3().addVectors(n,u).multiplyScalar(.5);t.position.copy(b);const j=t.geometry;let M=j.getAttribute("position");(!M||M.count<2)&&(j.setAttribute("position",new a.BufferAttribute(new Float32Array(6),3)),M=j.getAttribute("position")),M.setXYZ(0,-g/2,0,0),M.setXYZ(1,g/2,0,0),M.needsUpdate=!0,p.normalize();const O=new a.Quaternion().setFromUnitVectors(new a.Vector3(1,0,0),p);t.quaternion.copy(O),t.updateMatrixWorld(!0)}_prepareEdgeMetadata(t,e){const s=le(t);if(!s)return;const i=t.geometry.getAttribute("position"),r=e*2,o=r+1,n=new a.Vector3(i.getX(r),i.getY(r),i.getZ(r)).applyMatrix4(t.matrixWorld),u=new a.Vector3(i.getX(o),i.getY(o),i.getZ(o)).applyMatrix4(t.matrixWorld),p=new a.Matrix4().copy(s.matrixWorld).invert(),g=n.clone().applyMatrix4(p),b=u.clone().applyMatrix4(p),M=s.geometry.getAttribute("position"),O=new a.Vector3,S=1e-6,w=[],k=[];for(let P=0;P<M.count;P++)O.fromBufferAttribute(M,P),O.distanceToSquared(g)<S*S?w.push(P):O.distanceToSquared(b)<S*S&&k.push(P);const C=new a.Matrix4().copy(t.matrixWorld).invert(),U=n.clone().applyMatrix4(C),E=u.clone().applyMatrix4(C),De=t.geometry.getAttribute("position"),ne=new a.Vector3,Le=[],je=[];for(let P=0;P<De.count;P++)ne.fromBufferAttribute(De,P),ne.distanceToSquared(U)<S*S?Le.push(P):ne.distanceToSquared(E)<S*S&&je.push(P);this._selectLine.userData.edgeInfo={lines:t,seg:e,mesh:s,aIndices:w,bIndices:k,aEdgeIndices:Le,bEdgeIndices:je}}};te=It([h.injectable(),we(0,h.inject("RendererApi")),we(1,h.inject("IEditorStore"))],te);var Rt=Object.getOwnPropertyDescriptor,Vt=(t,e,s,i)=>{for(var r=i>1?void 0:i?Rt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},kt=(t,e)=>(s,i)=>e(s,i,t);let se=class{constructor(t){this._api=t}mode=l.SceneMode.AddFigure;_lastAddedMesh=null;handle(t){const e=Ae[t](),s=e.getAttribute("position");s&&s.setUsage&&s.setUsage(a.DynamicDrawUsage);const i=new a.Mesh(e,ae);i.layers.enable(he);const r=de(i.geometry);i.add(r);const o=ce(i.geometry);i.add(o),this._api.addMesh(i),this._lastAddedMesh=i}rollback(){this._lastAddedMesh!==null&&(this._api.removeMesh(this._lastAddedMesh),this._lastAddedMesh=null)}dispose(){this._lastAddedMesh=null}};se=Vt([h.injectable(),kt(0,h.inject("RendererApi"))],se);var Ut=Object.getOwnPropertyDescriptor,Ht=(t,e,s,i)=>{for(var r=i>1?void 0:i?Ut(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},Pe=(t,e)=>(s,i)=>e(s,i,t);let ie=class{constructor(t,e){this._api=t,this._store=e}mode=l.SceneMode.DeleteFigure;_lastDeletedMesh=null;handle(){const t=this._store.getSelectedObject();Fe(t)&&(this._api.removeMesh(t),this._store.setSelectedObject(null),this._lastDeletedMesh=t)}rollback(){this._lastDeletedMesh&&(this._api.addMesh(this._lastDeletedMesh),this._lastDeletedMesh=null)}dispose(){this._lastDeletedMesh=null}};ie=Ht([h.injectable(),Pe(0,h.inject("RendererApi")),Pe(1,h.inject("IEditorStore"))],ie);var Nt=Object.getOwnPropertyDescriptor,Yt=(t,e,s,i)=>{for(var r=i>1?void 0:i?Nt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},Ft=(t,e)=>(s,i)=>e(s,i,t);let re=class{constructor(t){this._renderer=t}addMesh(t){this._renderer.addMesh(t)}addMeshes(t){for(const e of t)this._renderer.addMesh(e)}removeMesh(t){this._renderer.removeMesh(t)}removeMeshes(t){for(const e of t)this._renderer.removeMesh(e)}getMeshes(){return this._renderer.getMeshes()}setMode(t){this._renderer.setTransformControlsMode(t)}attach(t){this._renderer.attachTransformControls(t)}detach(){this._renderer.detachTransformControls()}setRaycastMode(t){this._renderer.setRaycastMode(t)}addObject(t,e){this._renderer.addObject(t,e)}removeObject(t){this._renderer.removeObject(t)}enableCameraLayer(t){this._renderer.enableCameraLayer(t)}};re=Yt([h.injectable(),Ft(0,h.inject("EditorRenderer"))],re);var Wt=Object.getOwnPropertyDescriptor,zt=(t,e,s,i)=>{for(var r=i>1?void 0:i?Wt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r},T=(t,e)=>(s,i)=>e(s,i,t);d.EditorHub=class{constructor(e,s,i,r,o){this._displayManager=e,this._selectManager=s,this._toolManager=i,this._sceneManager=r,this._renderer=o,this.setSelectMode(l.SelectMode.Mesh),this.setToolMode(l.ToolType.Translate)}setDisplayMode(e){this._displayManager.manage(e)}setSceneMode(e){this._sceneManager.manage(e)}setSelectMode(e){this._selectManager.manage(e)}setToolMode(e){this._toolManager.manage(e)}resizeRenderer(){this._renderer.resize()}updateRenderer(){this._renderer.loop()}addFigure(e,s){this._sceneManager.manage(e,s)}dispose(){this._displayManager.dispose(),this._selectManager.dispose(),this._renderer.dispose()}},d.EditorHub=zt([h.injectable(),T(0,h.inject("IDisplayManager")),T(1,h.inject("ISelectManager")),T(2,h.inject("IToolManager")),T(3,h.inject("ISceneManager")),T(4,h.inject("EditorRenderer"))],d.EditorHub);var Zt=Object.getOwnPropertyDescriptor,Bt=(t,e,s,i)=>{for(var r=i>1?void 0:i?Zt(e,s):e,o=t.length-1,n;o>=0;o--)(n=t[o])&&(r=n(r)||r);return r};let oe=class{_selectMode=l.SelectMode.Mesh;_toolType=l.ToolType.Translate;_displayMode=l.DisplayMode.Plane;_selectedObject=null;_selectedListeners=new Set;constructor(){Te.makeAutoObservable(this,{},{autoBind:!0})}getSelectMode(){return this._selectMode}getToolType(){return this._toolType}getDisplayMode(){return this._displayMode}setSelectMode(t){this._selectMode=t}setToolType(t){this._toolType=t}setDisplayMode(t){this._displayMode=t}getSelectedObject(){return this._selectedObject}setSelectedObject(t){if(this._selectedObject!==t){this._selectedObject=t;for(const e of this._selectedListeners)e(this._selectedObject)}}onSelectedObjectChange(t){return this._selectedListeners.add(t),()=>this._selectedListeners.delete(t)}};oe=Bt([h.injectable()],oe);let Oe=!1;const m=h.container.createChildContainer();function $t(t){return Oe||(m.registerInstance("Canvas",t),m.registerSingleton("EventBus",d.EventBus),m.registerSingleton("EditorRenderer",d.EditorRenderer),m.registerSingleton("RendererApi",re),m.registerSingleton("IDisplayHandler",$),m.registerSingleton("ISelectHandler",X),m.registerSingleton("ISelectHandler",G),m.registerSingleton("ISelectHandler",te),m.registerSingleton("ISelectHandler",K),m.registerSingleton("IToolHandler",Q),m.registerSingleton("IToolHandler",J),m.registerSingleton("IToolHandler",ee),m.registerSingleton("ISceneHandler",se),m.registerSingleton("ISceneHandler",ie),m.registerSingleton("IDisplayManager",F),m.registerSingleton("ISelectManager",z),m.registerSingleton("IToolManager",Z),m.registerSingleton("ISceneManager",B),m.registerSingleton("EditorHub",d.EditorHub),m.registerSingleton("IEditorStore",oe),Oe=!0),m}function Xt(t){return $t(t).resolve("EditorHub")}d.EventTopics=L,d.ObjLoader=nt,d.PreviewRenderer=ot,d.Renderer=H,d.createAppHub=Xt,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})}));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SelectMode, ToolType } from '@planara/types';
|
|
2
|
+
/**
|
|
3
|
+
* Политика доступности инструментов
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export interface IToolAvailabilityPolicy {
|
|
7
|
+
/** Доступен ли инструмент при текущем режиме выборки */
|
|
8
|
+
isToolEnabled(tool: ToolType, selection: SelectMode): boolean;
|
|
9
|
+
/** Получение доступных инструментов для режима выборки*/
|
|
10
|
+
getEnabledTools(selection: SelectMode): ToolType[];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=tool-availability-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-availability-policy.d.ts","sourceRoot":"","sources":["../../../src/interfaces/policy/tool-availability-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,wDAAwD;IACxD,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC;IAE9D,yDAAyD;IACzD,eAAe,CAAC,SAAS,EAAE,UAAU,GAAG,QAAQ,EAAE,CAAC;CACpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/ioc/container.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/ioc/container.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAuClF,QAAA,MAAM,SAAS,qBAAyC,CAAC;AAEzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,CAwC9E;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -8,7 +8,10 @@ export declare class ToolManager implements IToolManager {
|
|
|
8
8
|
private _currentTool;
|
|
9
9
|
/** Хендлеры, которые управляют инструментами */
|
|
10
10
|
private readonly _handlers;
|
|
11
|
+
/** Событие обновления выбора объекта */
|
|
11
12
|
private readonly _unsubSelected?;
|
|
13
|
+
/** Политика доступности инструментов */
|
|
14
|
+
private readonly _policy;
|
|
12
15
|
constructor(handlers: IToolHandler[], _store: IEditorStore);
|
|
13
16
|
manage(tool: ToolType): void;
|
|
14
17
|
/** Освобождает ресурсы менеджера. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/tool/tool-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/tool/tool-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,qBACa,WAAY,YAAW,YAAY;IAepB,OAAO,CAAC,MAAM;IAdxC,mCAAmC;IACnC,OAAO,CAAC,YAAY,CAAgC;IAEpD,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IAEpD,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAa;IAE7C,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;gBAGtB,QAAQ,EAAE,YAAY,EAAE,EACnB,MAAM,EAAE,YAAY;IAc/C,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAmBnC,qCAAqC;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAWvC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SelectMode, ToolType } from '@planara/types';
|
|
2
|
+
import { IToolAvailabilityPolicy } from '../interfaces/policy/tool-availability-policy';
|
|
3
|
+
/**
|
|
4
|
+
* Политика доступности инструментов, в зависимости от режима выборки
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare class ToolAvailabilityPolicy implements IToolAvailabilityPolicy {
|
|
8
|
+
/** Доступен ли инструмент при текущем режиме выборки */
|
|
9
|
+
isToolEnabled(tool: ToolType, selection: SelectMode): boolean;
|
|
10
|
+
/** Получение доступных инструментов для режима выборки*/
|
|
11
|
+
getEnabledTools(selection: SelectMode): ToolType[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=tool-availability-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-availability-policy.d.ts","sourceRoot":"","sources":["../../src/policy/tool-availability-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAsB,MAAM,gBAAgB,CAAC;AAEpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAE7F;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,uBAAuB;IACpE,wDAAwD;IACjD,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO;IAIpE,yDAAyD;IAClD,eAAe,CAAC,SAAS,EAAE,UAAU,GAAG,QAAQ,EAAE;CAG1D"}
|
package/dist/utils/helpers.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
/** Является ли `THREE.Object3D` `THREE.Mesh` */
|
|
3
3
|
export declare const isMesh: (o: THREE.Object3D | null) => o is THREE.Mesh;
|
|
4
|
+
/** Поиск родителя ребер (сама фигура) */
|
|
5
|
+
export declare const findParentMesh: (obj: THREE.Object3D | null) => THREE.Mesh | null;
|
|
6
|
+
/** Создание вершин */
|
|
7
|
+
export declare const makeVertexPoints: (geom: THREE.BufferGeometry) => THREE.Points<THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>, THREE.PointsMaterial, THREE.Object3DEventMap>;
|
|
8
|
+
/** Создание внешних граней */
|
|
9
|
+
export declare const makeLineSegments: (geometry: THREE.BufferGeometry) => THREE.LineSegments<THREE.EdgesGeometry<THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>>, THREE.LineBasicMaterial, THREE.Object3DEventMap>;
|
|
4
10
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,gDAAgD;AAChD,eAAO,MAAM,MAAM,GAAI,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,KAAG,CAAC,IAAI,KAAK,CAAC,IAE5D,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,cAAc,GAAI,KAAK,KAAK,CAAC,QAAQ,GAAG,IAAI,KAAG,KAAK,CAAC,IAAI,GAAG,IAOxE,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,gBAAgB,GAAI,MAAM,KAAK,CAAC,cAAc,iJAwB1D,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,gBAAgB,GAAI,UAAU,KAAK,CAAC,cAAc,+KAU9D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planara/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
"vite-tsconfig-paths": "^5.1.4"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@planara/three": "^1.
|
|
63
|
-
"@planara/types": "^1.
|
|
62
|
+
"@planara/three": "^1.3.0",
|
|
63
|
+
"@planara/types": "^1.8.0",
|
|
64
64
|
"events": "^3.3.0",
|
|
65
65
|
"mobx": "^6.15.0",
|
|
66
66
|
"reflect-metadata": "^0.2.2",
|