@roomle/web-sdk 2.107.0 → 2.108.0-alpha.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/lib/ConfiguratorKernel.wasm +0 -0
- package/lib/{PointLightHelper-BkdQaOKc.js → PointLightHelper-B8VP_55Z.js} +2 -2
- package/lib/{PointLightHelper-BkdQaOKc.js.map → PointLightHelper-B8VP_55Z.js.map} +1 -1
- package/lib/{PointLightHelper-qhWtXw8x.mjs → PointLightHelper-DtoZq5ME.mjs} +2 -2
- package/lib/{PointLightHelper-qhWtXw8x.mjs.map → PointLightHelper-DtoZq5ME.mjs.map} +1 -1
- package/lib/RoomleCore.js +6 -6
- package/lib/RoomleCore.wasm +0 -0
- package/lib/RoomleToolsCore.wasm +0 -0
- package/lib/{banana-for-scale-XjIfe69B.js → banana-for-scale-BVlDK4jg.js} +2 -2
- package/lib/{banana-for-scale-XjIfe69B.js.map → banana-for-scale-BVlDK4jg.js.map} +1 -1
- package/lib/{banana-for-scale-CDGM3hdN.mjs → banana-for-scale-CKSlc9Tc.mjs} +2 -2
- package/lib/{banana-for-scale-CDGM3hdN.mjs.map → banana-for-scale-CKSlc9Tc.mjs.map} +1 -1
- package/lib/camera-behaviour-CzgZxW1D.js +50 -0
- package/lib/camera-behaviour-CzgZxW1D.js.map +1 -0
- package/lib/{camera-behaviour-BLMduSEn.mjs → camera-behaviour-DWkBHxkk.mjs} +79 -75
- package/lib/camera-behaviour-DWkBHxkk.mjs.map +1 -0
- package/lib/{component-dimensioning-Do75G-kI.js → component-dimensioning-CUoDDxfk.js} +2 -2
- package/lib/{component-dimensioning-Do75G-kI.js.map → component-dimensioning-CUoDDxfk.js.map} +1 -1
- package/lib/{component-dimensioning-DvCO0pEp.mjs → component-dimensioning-CgVIP7Nu.mjs} +2 -2
- package/lib/{component-dimensioning-DvCO0pEp.mjs.map → component-dimensioning-CgVIP7Nu.mjs.map} +1 -1
- package/lib/{component-raycast-helper-Dl-pzfg_.js → component-raycast-helper-DvNtWlR5.js} +2 -2
- package/lib/{component-raycast-helper-Dl-pzfg_.js.map → component-raycast-helper-DvNtWlR5.js.map} +1 -1
- package/lib/{component-raycast-helper-CuZdUtrH.mjs → component-raycast-helper-zAwc-AuF.mjs} +2 -2
- package/lib/{component-raycast-helper-CuZdUtrH.mjs.map → component-raycast-helper-zAwc-AuF.mjs.map} +1 -1
- package/lib/{configurator-CT_ghGbX.mjs → configurator-DDhzCgxy.mjs} +6 -6
- package/lib/{configurator-CT_ghGbX.mjs.map → configurator-DDhzCgxy.mjs.map} +1 -1
- package/lib/{configurator-B01iJTNa.js → configurator-DJnpG8CG.js} +2 -2
- package/lib/{configurator-B01iJTNa.js.map → configurator-DJnpG8CG.js.map} +1 -1
- package/lib/configurator-scene-manager-Bxdyg2zz.js +2 -0
- package/lib/configurator-scene-manager-Bxdyg2zz.js.map +1 -0
- package/lib/{configurator-scene-manager-DbsYS4rm.mjs → configurator-scene-manager-DnZvFw0N.mjs} +150 -162
- package/lib/configurator-scene-manager-DnZvFw0N.mjs.map +1 -0
- package/lib/configurator.js +1 -1
- package/lib/configurator.nomodule.js +1 -1
- package/lib/{continuous-drawing-helper-DdnnCOqZ.js → continuous-drawing-helper-C6qDGAxa.js} +2 -2
- package/lib/{continuous-drawing-helper-DdnnCOqZ.js.map → continuous-drawing-helper-C6qDGAxa.js.map} +1 -1
- package/lib/{continuous-drawing-helper-DrpQFppG.mjs → continuous-drawing-helper-DbTM7uCv.mjs} +2 -2
- package/lib/{continuous-drawing-helper-DrpQFppG.mjs.map → continuous-drawing-helper-DbTM7uCv.mjs.map} +1 -1
- package/lib/{default-light-setting-D0Ie_AEw.mjs → default-light-setting-BdD0jDeP.mjs} +3 -3
- package/lib/{default-light-setting-D0Ie_AEw.mjs.map → default-light-setting-BdD0jDeP.mjs.map} +1 -1
- package/lib/{default-light-setting-DQxt3v5x.js → default-light-setting-CYiFuxeI.js} +2 -2
- package/lib/{default-light-setting-DQxt3v5x.js.map → default-light-setting-CYiFuxeI.js.map} +1 -1
- package/lib/definitions/common-core/src/light/light-source.d.ts +2 -0
- package/lib/definitions/common-core/src/utils/threejs-utils.d.ts +2 -1
- package/lib/definitions/common-core/src/webgl/roomle-component-factory.d.ts +1 -0
- package/lib/definitions/common-core/src/webgl/scene-manager.d.ts +1 -1
- package/lib/definitions/planner-core/src/lights/ceiling-light.d.ts +1 -1
- package/lib/definitions/planner-core/src/lights/light-group.d.ts +1 -2
- package/lib/definitions/planner-core/src/roomle-planner.d.ts +12 -6
- package/lib/definitions/planner-core/src/services/planner-kernel-access.d.ts +1 -1
- package/lib/definitions/planner-core/src/view-model/plan-view-model.d.ts +1 -4
- package/lib/definitions/planner-core/src/webgl/planner-scene-manager.d.ts +5 -1
- package/lib/{glb-viewer-BEWU9zxC.mjs → glb-viewer-BoZgMSrk.mjs} +6 -6
- package/lib/{glb-viewer-BEWU9zxC.mjs.map → glb-viewer-BoZgMSrk.mjs.map} +1 -1
- package/lib/{glb-viewer-camera-behaviour-Cl2bS83k.js → glb-viewer-camera-behaviour-AEWNZ6mR.js} +2 -2
- package/lib/{glb-viewer-camera-behaviour-Cl2bS83k.js.map → glb-viewer-camera-behaviour-AEWNZ6mR.js.map} +1 -1
- package/lib/{glb-viewer-camera-behaviour-DQ2sVbku.mjs → glb-viewer-camera-behaviour-CRnnMrL2.mjs} +2 -2
- package/lib/{glb-viewer-camera-behaviour-DQ2sVbku.mjs.map → glb-viewer-camera-behaviour-CRnnMrL2.mjs.map} +1 -1
- package/lib/{glb-viewer-6_OVDzVH.js → glb-viewer-vvpjnYPw.js} +2 -2
- package/lib/{glb-viewer-6_OVDzVH.js.map → glb-viewer-vvpjnYPw.js.map} +1 -1
- package/lib/glb-viewer.js +1 -1
- package/lib/glb-viewer.nomodule.js +1 -1
- package/lib/{imos-ix-poc-export-helper-r0pv9sOT.js → imos-ix-poc-export-helper-7AWayvID.js} +2 -2
- package/lib/{imos-ix-poc-export-helper-r0pv9sOT.js.map → imos-ix-poc-export-helper-7AWayvID.js.map} +1 -1
- package/lib/{imos-ix-poc-export-helper-BrpY0OHi.mjs → imos-ix-poc-export-helper-gQb0lbdn.mjs} +2 -2
- package/lib/{imos-ix-poc-export-helper-BrpY0OHi.mjs.map → imos-ix-poc-export-helper-gQb0lbdn.mjs.map} +1 -1
- package/lib/{main-05wLxbDZ.js → main-DVWEbQdM.js} +340 -149
- package/lib/{main-05wLxbDZ.js.map → main-DVWEbQdM.js.map} +1 -1
- package/lib/{main-CMu7hOEO.mjs → main-RpgY_kch.mjs} +2202 -1999
- package/lib/{main-CMu7hOEO.mjs.map → main-RpgY_kch.mjs.map} +1 -1
- package/lib/{material-viewer-B0MevA_r.mjs → material-viewer-DQjAOrWL.mjs} +4 -4
- package/lib/{material-viewer-B0MevA_r.mjs.map → material-viewer-DQjAOrWL.mjs.map} +1 -1
- package/lib/{material-viewer-CLqZXFrn.js → material-viewer-_9Sb1UCw.js} +2 -2
- package/lib/{material-viewer-CLqZXFrn.js.map → material-viewer-_9Sb1UCw.js.map} +1 -1
- package/lib/material-viewer.js +1 -1
- package/lib/material-viewer.nomodule.js +1 -1
- package/lib/planner-BcHlq0n3.js +155 -0
- package/lib/planner-BcHlq0n3.js.map +1 -0
- package/lib/{planner-B3Bt-cWy.mjs → planner-BilNNFJ0.mjs} +143 -125
- package/lib/planner-BilNNFJ0.mjs.map +1 -0
- package/lib/planner.js +1 -1
- package/lib/planner.nomodule.js +1 -1
- package/lib/roomle-sdk.js +7 -7
- package/lib/roomle-sdk.nomodule.js +1 -1
- package/lib/{script-loader-CZjzwkk2.js → script-loader-BZOMZ1AI.js} +2 -2
- package/lib/{script-loader-CZjzwkk2.js.map → script-loader-BZOMZ1AI.js.map} +1 -1
- package/lib/{script-loader-BzwDLtbS.mjs → script-loader-CHolkWhE.mjs} +2 -2
- package/lib/{script-loader-BzwDLtbS.mjs.map → script-loader-CHolkWhE.mjs.map} +1 -1
- package/lib/static/roomle-core-hsc/ConfiguratorKernel.wasm +0 -0
- package/lib/static/roomle-core-hsc/RoomleCore.js +6 -6
- package/lib/static/roomle-core-hsc/RoomleCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/RoomleServiceCore.js +6 -6
- package/lib/static/roomle-core-hsc/RoomleServiceCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/RoomleToolsCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/configuratorCoreInterface.d.ts +2 -0
- package/lib/static/roomle-core-hsc/embind/configuratorCoreInterface.d.ts +2 -0
- package/lib/static/roomle-core-hsc/embind/plannerCoreCallback.d.ts +2 -2
- package/lib/static/roomle-core-hsc/embind/plannerCoreCallback.js +1 -1
- package/lib/static/roomle-core-hsc/embind/plannerCoreCallback.js.map +1 -1
- package/lib/static/roomle-core-hsc/embind/plannerCoreInterface.d.ts +17 -2
- package/lib/static/roomle-core-hsc/embind/plannerCoreInterface.js.map +1 -1
- package/lib/static/roomle-core-hsc/package.json +1 -1
- package/lib/static/roomle-core-hsc/plannerCoreCallback.d.ts +2 -2
- package/lib/static/roomle-core-hsc/plannerCoreCallback.js +1 -1
- package/lib/static/roomle-core-hsc/plannerCoreCallback.js.map +1 -1
- package/lib/static/roomle-core-hsc/plannerCoreInterface.d.ts +17 -2
- package/lib/static/roomle-core-hsc/plannerCoreInterface.js.map +1 -1
- package/lib/static/roomle-core-hsc/src/embind/configuratorCoreInterface.d.ts +2 -0
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.d.ts +2 -2
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.js +1 -1
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.js.map +1 -1
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreInterface.d.ts +17 -2
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreInterface.js.map +1 -1
- package/lib/static/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleCore.js +6 -6
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleServiceCore.js +6 -6
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleServiceCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
- package/lib/{stats-helper-BaTpWjzi.mjs → stats-helper-BFpxduid.mjs} +2 -2
- package/lib/{stats-helper-BaTpWjzi.mjs.map → stats-helper-BFpxduid.mjs.map} +1 -1
- package/lib/{stats-helper-DylhlHS_.js → stats-helper-D4z7zVEi.js} +2 -2
- package/lib/{stats-helper-DylhlHS_.js.map → stats-helper-D4z7zVEi.js.map} +1 -1
- package/lib/{tools-core-BF9kMznR.js → tools-core-BJbLUz5-.js} +2 -2
- package/lib/{tools-core-BF9kMznR.js.map → tools-core-BJbLUz5-.js.map} +1 -1
- package/lib/{tools-core-BbL-KMAf.mjs → tools-core-COGP-hBi.mjs} +3 -3
- package/lib/{tools-core-BbL-KMAf.mjs.map → tools-core-COGP-hBi.mjs.map} +1 -1
- package/package.json +1 -1
- package/lib/camera-behaviour-BLMduSEn.mjs.map +0 -1
- package/lib/camera-behaviour-DgLVg_pP.js +0 -50
- package/lib/camera-behaviour-DgLVg_pP.js.map +0 -1
- package/lib/configurator-scene-manager-CRSHxOfd.js +0 -2
- package/lib/configurator-scene-manager-CRSHxOfd.js.map +0 -1
- package/lib/configurator-scene-manager-DbsYS4rm.mjs.map +0 -1
- package/lib/planner-B3Bt-cWy.mjs.map +0 -1
- package/lib/planner-D7lLZxgW.js +0 -155
- package/lib/planner-D7lLZxgW.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["./main-
|
|
2
|
-
//# sourceMappingURL=component-dimensioning-
|
|
1
|
+
System.register(["./main-DVWEbQdM.js"],function(q,J){"use strict";var L,E,r,D,C,O,H,I,p,g,x,G,y,f,N,P,R,m,w;return{setters:[s=>{L=s.O,E=s.k,r=s.V,D=s.l,C=s.L,O=s.M,H=s.m,I=s.n,p=s.o,g=s.p,x=s.q,G=s.T,y=s.s,f=s.t,N=s.Q,P=s.P,R=s.u,m=s.v,w=s.j}],execute:function(){var s=Object.defineProperty,B=(T,e,i,n)=>{for(var t=void 0,a=T.length-1,o;a>=0;a--)(o=T[a])&&(t=o(e,i,t)||t);return t&&s(e,i,t),t};const M="component_dimensioning_line_material",S="component_dimensioning_plane_material",z="component_dimensioning_text_material",d=.02,Q=.025,F=3618615,V=16777215,Y=.05;class c{constructor(e,i,n){this._direction=c._getDirection(e);const t=c._getDefaultLabelDirection(e,this._direction),a=n.dot(t)>=0;this._labelDirection=c._calculateActualLabelDirection(e,a,t),this._origin=c._calculateOrigin(e,i,a)}get direction(){return this._direction}get labelDirection(){return this._labelDirection}getEdge(e,i,n){const t=this._origin.clone().add(this._direction.clone().multiplyScalar(e)).add(this._labelDirection.clone().multiplyScalar(n)),a=this._origin.clone().add(this._direction.clone().multiplyScalar(i)).add(this._labelDirection.clone().multiplyScalar(n));return new R(t,a)}static _getDirection(e){return e.axis?m(e.axis.direction).normalize():e.dimensioning.axis==="x"?new r(1,0,0):e.dimensioning.axis==="y"?new r(0,0,1):new r(0,1,0)}static _getDefaultLabelDirection(e,i){if(e.axis){const n=m(e.axis.labelDirection);return i.clone().cross(n).cross(i).normalize()}else{if(e.dimensioning.axis==="x")return new r(0,1,0);if(e.dimensioning.axis==="y")return new r(-1,0,0)}return new r(-1,0,0)}static _calculateActualLabelDirection(e,i,n){if(i){if(e.axis){if(e.axis.alternativeOrigin)return n.clone().multiplyScalar(-1)}else if(e.dimensioning.axis==="y"||e.dimensioning.axis==="z")return n.clone().multiplyScalar(-1)}return n}static _calculateOrigin(e,i,n){const t=i.getCenter(new r),a=i.getSize(new r);return e.axis?n&&e.axis.alternativeOrigin?m(e.axis.alternativeOrigin):m(e.axis.origin):e.dimensioning.axis==="x"?new r(0,t.y+a.y*.5,t.z-a.z*.5):e.dimensioning.axis==="y"?new r(t.x+a.x*(n?.5:-.5),t.y-a.y*.5,0):new r(t.x+a.x*(n?.5:-.5),0,t.z-a.z*.5)}}class b extends L{constructor(e,i,n,t){super(),this.name=E,this._size=i.getSize(new r),this._relativeCameraDirection=t.clone(),this._dimensioning=D(e.dimensioning),this._axis=new c(e,i,t),this._level=this._dimensioning.maxLevel-this._dimensioning.level,this._font=n,this._init()}clone(){console.warn("Will not clone ComponentDimensioning")}_initMaterials(){this._cacheHolder.materialCache&&(this._cacheHolder.materialCache.has(M)?this._lineMaterial=this._cacheHolder.materialCache.get(M):(this._lineMaterial=new C({color:F}),this._cacheHolder.materialCache.set(M,this._lineMaterial)),this._cacheHolder.materialCache.has(S)?this._planeMaterial=this._cacheHolder.materialCache.get(S):(this._planeMaterial=new O({color:V,side:H,opacity:.8,transparent:!0}),this._cacheHolder.materialCache.set(S,this._planeMaterial)),this._cacheHolder.materialCache.has(z)?this._textMaterial=this._cacheHolder.materialCache.get(z):(this._textMaterial=new I({color:F}),this._cacheHolder.materialCache.set(z,this._textMaterial)))}_init(){this._initMaterials();const e=new p;this._line=new g(e,this._lineMaterial),this._line.name="component dimension line "+this._dimensioning.axis,this._text=new x(e,this._textMaterial),this._text.name="component dimension text "+this._dimensioning.axis,this._plane=new x(e,this._planeMaterial),this._plane.name="component dimension plane "+this._dimensioning.axis;const i=new p,n=Math.round(Math.max(this._size.y,this._size.x,this._size.z)),t=Math.abs(this._dimensioning.to-this._dimensioning.from);let a=Q+(n<4?0:n*.005);t<.3&&(a*=.5+t);const o={font:this._font,size:a,height:.001,curveSegments:2,bevelEnabled:!0,bevelThickness:.001,bevelSize:.001,depth:.001},h=this._dimensioning.label?this._dimensioning.label:this._unitFormatter.formatMMValueToUnitString(t*1e3),_=new G(h,o);_.computeBoundingBox();const j=_.boundingBox.getSize(new r).y,U=Y+(3*d+j)*this._level,l=this._axis.getEdge(this._dimensioning.from,this._dimensioning.to,U);this._addEdgeSideLines(j,l,this._axis.labelDirection.clone());const W=[l.start.x,l.start.y,l.start.z,l.end.x,l.end.y,l.end.z];i.setAttribute("position",new y(new Float32Array(W),3)),this._line.geometry.dispose(),this._line.geometry=i,this.add(this._line),this._text.geometry=_;const k=this._axis.direction.clone(),u=this._axis.labelDirection.clone();new r(0,1,0).dot(u)<Math.SQRT1_2&&u.multiplyScalar(-1);const X=k.clone().cross(u);let v=new f().makeBasis(k,u,X);this._relativeCameraDirection.dot(X)>0&&(v=v.multiply(new f().makeRotationY(Math.PI)));const Z=new N().setFromRotationMatrix(v);this._addText(l,_,Z,this._axis.labelDirection.clone().multiplyScalar(2*d))}_addEdgeSideLines(e,i,n){const t=-(3*d+e)*.5,a=i.start.clone(),o=i.start.clone().add(n.clone().multiplyScalar(t)),h=i.end.clone(),_=i.end.clone().add(n.clone().multiplyScalar(t));this._addLine(o,a),this._addLine(_,h)}_addLine(e,i){const n=new p,t=[e.x,e.y,e.z,i.x,i.y,i.z];n.setAttribute("position",new y(new Float32Array(t),3)),this.add(new g(n,this._lineMaterial))}_addText(e,i,n,t){const a=e.getCenter(new r);a.add(t);const o=i.boundingBox.getSize(new r);i.center(),this._text.position.copy(a),this._text.quaternion.copy(n),this.add(this._text);const h=new P(o.x+d,o.y+d,32);h.center(),this._plane.geometry=h,this._plane.position.copy(a),this._plane.quaternion.copy(n),this.add(this._plane)}}q("default",b),B([w],b.prototype,"_cacheHolder"),B([w],b.prototype,"_unitFormatter")}}});
|
|
2
|
+
//# sourceMappingURL=component-dimensioning-CUoDDxfk.js.map
|
package/lib/{component-dimensioning-Do75G-kI.js.map → component-dimensioning-CUoDDxfk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-dimensioning-Do75G-kI.js","sources":["../../packages/configurator-core/src/utils/component-dimensioning.ts"],"sourcesContent":["import inject from '../../../common-core/src/di/inject';\nimport type CacheHolder from '../../../common-core/src/services/cache-holder';\nimport type UnitFormatter from '../services/unit-formatter';\nimport type { Dimensioning, DimensioningAxis } from '../../../typings/kernel';\n\nimport type { Box3 } from 'three';\nimport {\n BufferAttribute,\n BufferGeometry,\n DoubleSide,\n Line,\n Line3,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshPhongMaterial,\n Object3D,\n PlaneGeometry,\n Quaternion,\n Vector3,\n} from 'three';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\nimport type { Font } from 'three/examples/jsm/loaders/FontLoader';\nimport { kernelDimensioningToThree } from '../../../common-core/src/utils/threejs-utils';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport { DIMENSIONING_GEOMETRY } from './dimensioning-helper';\n\nconst LINE_MATERIAL = 'component_dimensioning_line_material';\nconst PLANE_MATERIAL = 'component_dimensioning_plane_material';\nconst TEXT_MATERIAL = 'component_dimensioning_text_material';\n\nconst TEXT_SPACING = 0.02;\nconst TEXT_SIZE = 0.025;\nconst TEXT_COLOR = 0x373737;\n// const TEXT_COLOR = 0xff0000;\nconst PLANE_COLOR = 0xffffff;\n// const PLANE_COLOR = 0x00ff00;\nconst LINE_SPACING = 0.05;\n\nexport interface DimensioningAndAxis {\n dimensioning: Dimensioning;\n axis?: DimensioningAxis;\n}\n\nclass ComponentDimensioningAxis {\n private _origin: Vector3;\n private _direction: Vector3;\n private _labelDirection: Vector3;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n cameraPosition: Vector3\n ) {\n this._direction =\n ComponentDimensioningAxis._getDirection(dimensioningAndAxis);\n const defaultLabelDirection =\n ComponentDimensioningAxis._getDefaultLabelDirection(\n dimensioningAndAxis,\n this._direction\n );\n const lookAtOppositeSide = cameraPosition.dot(defaultLabelDirection) >= 0;\n this._labelDirection =\n ComponentDimensioningAxis._calculateActualLabelDirection(\n dimensioningAndAxis,\n lookAtOppositeSide,\n defaultLabelDirection\n );\n this._origin = ComponentDimensioningAxis._calculateOrigin(\n dimensioningAndAxis,\n boundingBox,\n lookAtOppositeSide\n );\n }\n\n get direction(): Vector3 {\n return this._direction;\n }\n\n get labelDirection(): Vector3 {\n return this._labelDirection;\n }\n\n getEdge(form: number, to: number, lineOffset: number): Line3 {\n const start = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(form))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n const end = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(to))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n return new Line3(start, end);\n }\n\n private static _getDirection(\n dimensioningAndAxis: DimensioningAndAxis\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n return convertToTHREE(dimensioningAndAxis.axis.direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(1, 0, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(0, 0, 1);\n }\n return new Vector3(0, 1, 0);\n }\n\n private static _getDefaultLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n direction: Vector3\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n const labelDirection = convertToTHREE(\n dimensioningAndAxis.axis.labelDirection\n );\n const planeNormal = direction.clone().cross(labelDirection);\n return planeNormal.cross(direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, 1, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(-1, 0, 0);\n }\n return new Vector3(-1, 0, 0);\n }\n\n private static _calculateActualLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n lookAtOppositeSide: boolean,\n labelDirection: Vector3\n ): Vector3 {\n if (lookAtOppositeSide) {\n if (dimensioningAndAxis.axis) {\n if (dimensioningAndAxis.axis.alternativeOrigin) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n } else if (\n dimensioningAndAxis.dimensioning.axis === 'y' ||\n dimensioningAndAxis.dimensioning.axis === 'z'\n ) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n }\n return labelDirection;\n }\n\n private static _calculateOrigin(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n lookAtOppositeSide: boolean\n ): Vector3 {\n const center = boundingBox.getCenter(new Vector3());\n const size = boundingBox.getSize(new Vector3());\n if (dimensioningAndAxis.axis) {\n return lookAtOppositeSide && dimensioningAndAxis.axis.alternativeOrigin\n ? convertToTHREE(dimensioningAndAxis.axis.alternativeOrigin)\n : convertToTHREE(dimensioningAndAxis.axis.origin);\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, center.y + size.y * 0.5, center.z - size.z * 0.5);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n center.y - size.y * 0.5,\n 0\n );\n }\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n 0,\n center.z - size.z * 0.5\n );\n }\n}\n\nexport default class ComponentDimensioning extends Object3D {\n @inject\n private _cacheHolder: CacheHolder;\n\n @inject\n private _unitFormatter: UnitFormatter;\n\n private _dimensioning: Dimensioning;\n private _axis: ComponentDimensioningAxis;\n private _size: Vector3;\n private _relativeCameraDirection: Vector3;\n\n private _font: Font;\n private _level: number;\n\n private _line: Line;\n private _text: Mesh;\n private _plane: Mesh;\n\n private _lineMaterial: LineBasicMaterial;\n private _planeMaterial: MeshBasicMaterial;\n private _textMaterial: MeshPhongMaterial;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n font: Font,\n relativeCameraDirection: Vector3\n ) {\n super();\n this.name = DIMENSIONING_GEOMETRY;\n this._size = boundingBox.getSize(new Vector3());\n this._relativeCameraDirection = relativeCameraDirection.clone();\n this._dimensioning = kernelDimensioningToThree(\n dimensioningAndAxis.dimensioning\n );\n this._axis = new ComponentDimensioningAxis(\n dimensioningAndAxis,\n boundingBox,\n relativeCameraDirection\n );\n this._level = this._dimensioning.maxLevel - this._dimensioning.level;\n this._font = font;\n\n this._init();\n }\n\n clone() {\n // We do not clone ComponentDimensioning because this can break the\n // generation of perspective images. If the ComponentDimensioning is\n // visible during the generation of the perspective image, three.js\n // tries to clone it but clone does not give any parameters to the\n // constructor and therefore the clone breaks. Since we do not need\n // to clone ComponentDimensioning, we return undefined\n // for more details see:\n // * https://github.com/roomle-dev/web-sdk/pull/876\n // * https://roomle.atlassian.net/browse/RML-11691\n console.warn('Will not clone ComponentDimensioning');\n return undefined as any;\n }\n\n private _initMaterials() {\n if (!this._cacheHolder.materialCache) {\n return;\n }\n\n if (this._cacheHolder.materialCache.has(LINE_MATERIAL)) {\n this._lineMaterial = this._cacheHolder.materialCache.get(\n LINE_MATERIAL\n ) as LineBasicMaterial;\n } else {\n this._lineMaterial = new LineBasicMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(LINE_MATERIAL, this._lineMaterial);\n }\n\n if (this._cacheHolder.materialCache.has(PLANE_MATERIAL)) {\n this._planeMaterial = this._cacheHolder.materialCache.get(\n PLANE_MATERIAL\n ) as MeshBasicMaterial;\n } else {\n this._planeMaterial = new MeshBasicMaterial({\n color: PLANE_COLOR,\n side: DoubleSide,\n opacity: 0.8,\n transparent: true,\n });\n this._cacheHolder.materialCache.set(PLANE_MATERIAL, this._planeMaterial);\n }\n\n if (this._cacheHolder.materialCache.has(TEXT_MATERIAL)) {\n this._textMaterial = this._cacheHolder.materialCache.get(\n TEXT_MATERIAL\n ) as MeshPhongMaterial;\n } else {\n this._textMaterial = new MeshPhongMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(TEXT_MATERIAL, this._textMaterial);\n }\n }\n\n private _init() {\n this._initMaterials();\n\n const geometry = new BufferGeometry();\n\n this._line = new Line(geometry, this._lineMaterial);\n this._line.name = 'component dimension line ' + this._dimensioning.axis; // For debugging purpose\n // this._line.layers.set(LAYER.DIMENSIONS);\n\n this._text = new Mesh(geometry, this._textMaterial);\n this._text.name = 'component dimension text ' + this._dimensioning.axis;\n // this._text.layers.set(LAYER.DIMENSIONS);\n\n this._plane = new Mesh(geometry, this._planeMaterial);\n this._plane.name = 'component dimension plane ' + this._dimensioning.axis;\n // this._plane.layers.set(LAYER.DIMENSIONS);\n\n const lineGeometry = new BufferGeometry();\n const maxSize = Math.round(\n Math.max(this._size.y, this._size.x, this._size.z)\n );\n const length = Math.abs(this._dimensioning.to - this._dimensioning.from);\n let fontSize = TEXT_SIZE + (maxSize < 4 ? 0 : maxSize * 0.005);\n if (length < 0.3) {\n fontSize *= 0.5 + length;\n }\n const parameters = {\n font: this._font,\n size: fontSize,\n height: 0.001,\n curveSegments: 2,\n bevelEnabled: true,\n bevelThickness: 0.001,\n bevelSize: 0.001,\n depth: 0.001,\n };\n\n const text = this._dimensioning.label\n ? this._dimensioning.label\n : this._unitFormatter.formatMMValueToUnitString(length * 1000);\n const textGeometry = new TextGeometry(text, parameters);\n textGeometry.computeBoundingBox();\n const levelSpacing = textGeometry.boundingBox.getSize(new Vector3()).y;\n const lineOffset =\n LINE_SPACING + (3 * TEXT_SPACING + levelSpacing) * this._level;\n const line = this._axis.getEdge(\n this._dimensioning.from,\n this._dimensioning.to,\n lineOffset\n );\n this._addEdgeSideLines(\n levelSpacing,\n line,\n this._axis.labelDirection.clone()\n );\n const vertices = [\n line.start.x,\n line.start.y,\n line.start.z,\n line.end.x,\n line.end.y,\n line.end.z,\n ];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3)\n );\n this._line.geometry.dispose();\n this._line.geometry = lineGeometry;\n\n this.add(this._line);\n\n // add text\n this._text.geometry = textGeometry;\n\n const xAxis = this._axis.direction.clone();\n const yAxis = this._axis.labelDirection.clone();\n if (new Vector3(0, 1, 0).dot(yAxis) < Math.SQRT1_2) {\n yAxis.multiplyScalar(-1);\n }\n const zAxis = xAxis.clone().cross(yAxis);\n let rotationMatrix = new Matrix4().makeBasis(xAxis, yAxis, zAxis);\n if (this._relativeCameraDirection.dot(zAxis) > 0) {\n rotationMatrix = rotationMatrix.multiply(\n new Matrix4().makeRotationY(Math.PI)\n );\n }\n const quaternion = new Quaternion().setFromRotationMatrix(rotationMatrix);\n this._addText(\n line,\n textGeometry,\n quaternion,\n this._axis.labelDirection.clone().multiplyScalar(2 * TEXT_SPACING)\n );\n }\n\n private _addEdgeSideLines(\n levelSpacing: number,\n line: Line3,\n labelDirection: Vector3\n ) {\n const sideOffset = -(3 * TEXT_SPACING + levelSpacing) * 0.5;\n const endFrom = line.start.clone();\n const startFrom = line.start\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n const endTo = line.end.clone();\n const startTo = line.end\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n this._addLine(startFrom, endFrom);\n this._addLine(startTo, endTo);\n }\n\n private _addLine(start: Vector3, end: Vector3) {\n const lineGeometry = new BufferGeometry();\n const vertices = [start.x, start.y, start.z, end.x, end.y, end.z];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3)\n );\n this.add(new Line(lineGeometry, this._lineMaterial));\n }\n\n private _addText(\n line: Line3,\n textGeometry: TextGeometry,\n quaternion: Quaternion,\n moveBy: Vector3\n ) {\n const position = line.getCenter(new Vector3());\n position.add(moveBy);\n const textGeometrySize = textGeometry.boundingBox.getSize(new Vector3());\n\n textGeometry.center();\n this._text.position.copy(position);\n this._text.quaternion.copy(quaternion);\n\n this.add(this._text);\n\n //add plane\n const planeGeometry = new PlaneGeometry(\n textGeometrySize.x + TEXT_SPACING,\n textGeometrySize.y + TEXT_SPACING,\n 32\n );\n planeGeometry.center();\n this._plane.geometry = planeGeometry;\n this._plane.position.copy(position);\n this._plane.quaternion.copy(quaternion);\n\n this.add(this._plane);\n }\n}\n"],"names":["LINE_MATERIAL","PLANE_MATERIAL","TEXT_MATERIAL","TEXT_SPACING","TEXT_SIZE","TEXT_COLOR","PLANE_COLOR","LINE_SPACING","ComponentDimensioningAxis","dimensioningAndAxis","boundingBox","cameraPosition","defaultLabelDirection","lookAtOppositeSide","form","to","lineOffset","start","end","Line3","convertToTHREE","Vector3","direction","labelDirection","center","size","ComponentDimensioning","Object3D","font","relativeCameraDirection","DIMENSIONING_GEOMETRY","kernelDimensioningToThree","LineBasicMaterial","MeshBasicMaterial","DoubleSide","MeshPhongMaterial","geometry","BufferGeometry","Line","Mesh","lineGeometry","maxSize","length","fontSize","parameters","text","textGeometry","TextGeometry","levelSpacing","line","vertices","BufferAttribute","xAxis","yAxis","zAxis","rotationMatrix","Matrix4","quaternion","Quaternion","sideOffset","endFrom","startFrom","endTo","startTo","moveBy","position","textGeometrySize","planeGeometry","PlaneGeometry","exports","__decorateClass","inject"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-dimensioning-CUoDDxfk.js","sources":["../../packages/configurator-core/src/utils/component-dimensioning.ts"],"sourcesContent":["import inject from '../../../common-core/src/di/inject';\nimport type CacheHolder from '../../../common-core/src/services/cache-holder';\nimport type UnitFormatter from '../services/unit-formatter';\nimport type { Dimensioning, DimensioningAxis } from '../../../typings/kernel';\n\nimport type { Box3 } from 'three';\nimport {\n BufferAttribute,\n BufferGeometry,\n DoubleSide,\n Line,\n Line3,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshPhongMaterial,\n Object3D,\n PlaneGeometry,\n Quaternion,\n Vector3,\n} from 'three';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\nimport type { Font } from 'three/examples/jsm/loaders/FontLoader';\nimport { kernelDimensioningToThree } from '../../../common-core/src/utils/threejs-utils';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport { DIMENSIONING_GEOMETRY } from './dimensioning-helper';\n\nconst LINE_MATERIAL = 'component_dimensioning_line_material';\nconst PLANE_MATERIAL = 'component_dimensioning_plane_material';\nconst TEXT_MATERIAL = 'component_dimensioning_text_material';\n\nconst TEXT_SPACING = 0.02;\nconst TEXT_SIZE = 0.025;\nconst TEXT_COLOR = 0x373737;\n// const TEXT_COLOR = 0xff0000;\nconst PLANE_COLOR = 0xffffff;\n// const PLANE_COLOR = 0x00ff00;\nconst LINE_SPACING = 0.05;\n\nexport interface DimensioningAndAxis {\n dimensioning: Dimensioning;\n axis?: DimensioningAxis;\n}\n\nclass ComponentDimensioningAxis {\n private _origin: Vector3;\n private _direction: Vector3;\n private _labelDirection: Vector3;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n cameraPosition: Vector3\n ) {\n this._direction =\n ComponentDimensioningAxis._getDirection(dimensioningAndAxis);\n const defaultLabelDirection =\n ComponentDimensioningAxis._getDefaultLabelDirection(\n dimensioningAndAxis,\n this._direction\n );\n const lookAtOppositeSide = cameraPosition.dot(defaultLabelDirection) >= 0;\n this._labelDirection =\n ComponentDimensioningAxis._calculateActualLabelDirection(\n dimensioningAndAxis,\n lookAtOppositeSide,\n defaultLabelDirection\n );\n this._origin = ComponentDimensioningAxis._calculateOrigin(\n dimensioningAndAxis,\n boundingBox,\n lookAtOppositeSide\n );\n }\n\n get direction(): Vector3 {\n return this._direction;\n }\n\n get labelDirection(): Vector3 {\n return this._labelDirection;\n }\n\n getEdge(form: number, to: number, lineOffset: number): Line3 {\n const start = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(form))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n const end = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(to))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n return new Line3(start, end);\n }\n\n private static _getDirection(\n dimensioningAndAxis: DimensioningAndAxis\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n return convertToTHREE(dimensioningAndAxis.axis.direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(1, 0, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(0, 0, 1);\n }\n return new Vector3(0, 1, 0);\n }\n\n private static _getDefaultLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n direction: Vector3\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n const labelDirection = convertToTHREE(\n dimensioningAndAxis.axis.labelDirection\n );\n const planeNormal = direction.clone().cross(labelDirection);\n return planeNormal.cross(direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, 1, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(-1, 0, 0);\n }\n return new Vector3(-1, 0, 0);\n }\n\n private static _calculateActualLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n lookAtOppositeSide: boolean,\n labelDirection: Vector3\n ): Vector3 {\n if (lookAtOppositeSide) {\n if (dimensioningAndAxis.axis) {\n if (dimensioningAndAxis.axis.alternativeOrigin) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n } else if (\n dimensioningAndAxis.dimensioning.axis === 'y' ||\n dimensioningAndAxis.dimensioning.axis === 'z'\n ) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n }\n return labelDirection;\n }\n\n private static _calculateOrigin(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n lookAtOppositeSide: boolean\n ): Vector3 {\n const center = boundingBox.getCenter(new Vector3());\n const size = boundingBox.getSize(new Vector3());\n if (dimensioningAndAxis.axis) {\n return lookAtOppositeSide && dimensioningAndAxis.axis.alternativeOrigin\n ? convertToTHREE(dimensioningAndAxis.axis.alternativeOrigin)\n : convertToTHREE(dimensioningAndAxis.axis.origin);\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, center.y + size.y * 0.5, center.z - size.z * 0.5);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n center.y - size.y * 0.5,\n 0\n );\n }\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n 0,\n center.z - size.z * 0.5\n );\n }\n}\n\nexport default class ComponentDimensioning extends Object3D {\n @inject\n private _cacheHolder: CacheHolder;\n\n @inject\n private _unitFormatter: UnitFormatter;\n\n private _dimensioning: Dimensioning;\n private _axis: ComponentDimensioningAxis;\n private _size: Vector3;\n private _relativeCameraDirection: Vector3;\n\n private _font: Font;\n private _level: number;\n\n private _line: Line;\n private _text: Mesh;\n private _plane: Mesh;\n\n private _lineMaterial: LineBasicMaterial;\n private _planeMaterial: MeshBasicMaterial;\n private _textMaterial: MeshPhongMaterial;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n font: Font,\n relativeCameraDirection: Vector3\n ) {\n super();\n this.name = DIMENSIONING_GEOMETRY;\n this._size = boundingBox.getSize(new Vector3());\n this._relativeCameraDirection = relativeCameraDirection.clone();\n this._dimensioning = kernelDimensioningToThree(\n dimensioningAndAxis.dimensioning\n );\n this._axis = new ComponentDimensioningAxis(\n dimensioningAndAxis,\n boundingBox,\n relativeCameraDirection\n );\n this._level = this._dimensioning.maxLevel - this._dimensioning.level;\n this._font = font;\n\n this._init();\n }\n\n clone() {\n // We do not clone ComponentDimensioning because this can break the\n // generation of perspective images. If the ComponentDimensioning is\n // visible during the generation of the perspective image, three.js\n // tries to clone it but clone does not give any parameters to the\n // constructor and therefore the clone breaks. Since we do not need\n // to clone ComponentDimensioning, we return undefined\n // for more details see:\n // * https://github.com/roomle-dev/web-sdk/pull/876\n // * https://roomle.atlassian.net/browse/RML-11691\n console.warn('Will not clone ComponentDimensioning');\n return undefined as any;\n }\n\n private _initMaterials() {\n if (!this._cacheHolder.materialCache) {\n return;\n }\n\n if (this._cacheHolder.materialCache.has(LINE_MATERIAL)) {\n this._lineMaterial = this._cacheHolder.materialCache.get(\n LINE_MATERIAL\n ) as LineBasicMaterial;\n } else {\n this._lineMaterial = new LineBasicMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(LINE_MATERIAL, this._lineMaterial);\n }\n\n if (this._cacheHolder.materialCache.has(PLANE_MATERIAL)) {\n this._planeMaterial = this._cacheHolder.materialCache.get(\n PLANE_MATERIAL\n ) as MeshBasicMaterial;\n } else {\n this._planeMaterial = new MeshBasicMaterial({\n color: PLANE_COLOR,\n side: DoubleSide,\n opacity: 0.8,\n transparent: true,\n });\n this._cacheHolder.materialCache.set(PLANE_MATERIAL, this._planeMaterial);\n }\n\n if (this._cacheHolder.materialCache.has(TEXT_MATERIAL)) {\n this._textMaterial = this._cacheHolder.materialCache.get(\n TEXT_MATERIAL\n ) as MeshPhongMaterial;\n } else {\n this._textMaterial = new MeshPhongMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(TEXT_MATERIAL, this._textMaterial);\n }\n }\n\n private _init() {\n this._initMaterials();\n\n const geometry = new BufferGeometry();\n\n this._line = new Line(geometry, this._lineMaterial);\n this._line.name = 'component dimension line ' + this._dimensioning.axis; // For debugging purpose\n // this._line.layers.set(LAYER.DIMENSIONS);\n\n this._text = new Mesh(geometry, this._textMaterial);\n this._text.name = 'component dimension text ' + this._dimensioning.axis;\n // this._text.layers.set(LAYER.DIMENSIONS);\n\n this._plane = new Mesh(geometry, this._planeMaterial);\n this._plane.name = 'component dimension plane ' + this._dimensioning.axis;\n // this._plane.layers.set(LAYER.DIMENSIONS);\n\n const lineGeometry = new BufferGeometry();\n const maxSize = Math.round(\n Math.max(this._size.y, this._size.x, this._size.z)\n );\n const length = Math.abs(this._dimensioning.to - this._dimensioning.from);\n let fontSize = TEXT_SIZE + (maxSize < 4 ? 0 : maxSize * 0.005);\n if (length < 0.3) {\n fontSize *= 0.5 + length;\n }\n const parameters = {\n font: this._font,\n size: fontSize,\n height: 0.001,\n curveSegments: 2,\n bevelEnabled: true,\n bevelThickness: 0.001,\n bevelSize: 0.001,\n depth: 0.001,\n };\n\n const text = this._dimensioning.label\n ? this._dimensioning.label\n : this._unitFormatter.formatMMValueToUnitString(length * 1000);\n const textGeometry = new TextGeometry(text, parameters);\n textGeometry.computeBoundingBox();\n const levelSpacing = textGeometry.boundingBox.getSize(new Vector3()).y;\n const lineOffset =\n LINE_SPACING + (3 * TEXT_SPACING + levelSpacing) * this._level;\n const line = this._axis.getEdge(\n this._dimensioning.from,\n this._dimensioning.to,\n lineOffset\n );\n this._addEdgeSideLines(\n levelSpacing,\n line,\n this._axis.labelDirection.clone()\n );\n const vertices = [\n line.start.x,\n line.start.y,\n line.start.z,\n line.end.x,\n line.end.y,\n line.end.z,\n ];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3)\n );\n this._line.geometry.dispose();\n this._line.geometry = lineGeometry;\n\n this.add(this._line);\n\n // add text\n this._text.geometry = textGeometry;\n\n const xAxis = this._axis.direction.clone();\n const yAxis = this._axis.labelDirection.clone();\n if (new Vector3(0, 1, 0).dot(yAxis) < Math.SQRT1_2) {\n yAxis.multiplyScalar(-1);\n }\n const zAxis = xAxis.clone().cross(yAxis);\n let rotationMatrix = new Matrix4().makeBasis(xAxis, yAxis, zAxis);\n if (this._relativeCameraDirection.dot(zAxis) > 0) {\n rotationMatrix = rotationMatrix.multiply(\n new Matrix4().makeRotationY(Math.PI)\n );\n }\n const quaternion = new Quaternion().setFromRotationMatrix(rotationMatrix);\n this._addText(\n line,\n textGeometry,\n quaternion,\n this._axis.labelDirection.clone().multiplyScalar(2 * TEXT_SPACING)\n );\n }\n\n private _addEdgeSideLines(\n levelSpacing: number,\n line: Line3,\n labelDirection: Vector3\n ) {\n const sideOffset = -(3 * TEXT_SPACING + levelSpacing) * 0.5;\n const endFrom = line.start.clone();\n const startFrom = line.start\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n const endTo = line.end.clone();\n const startTo = line.end\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n this._addLine(startFrom, endFrom);\n this._addLine(startTo, endTo);\n }\n\n private _addLine(start: Vector3, end: Vector3) {\n const lineGeometry = new BufferGeometry();\n const vertices = [start.x, start.y, start.z, end.x, end.y, end.z];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3)\n );\n this.add(new Line(lineGeometry, this._lineMaterial));\n }\n\n private _addText(\n line: Line3,\n textGeometry: TextGeometry,\n quaternion: Quaternion,\n moveBy: Vector3\n ) {\n const position = line.getCenter(new Vector3());\n position.add(moveBy);\n const textGeometrySize = textGeometry.boundingBox.getSize(new Vector3());\n\n textGeometry.center();\n this._text.position.copy(position);\n this._text.quaternion.copy(quaternion);\n\n this.add(this._text);\n\n //add plane\n const planeGeometry = new PlaneGeometry(\n textGeometrySize.x + TEXT_SPACING,\n textGeometrySize.y + TEXT_SPACING,\n 32\n );\n planeGeometry.center();\n this._plane.geometry = planeGeometry;\n this._plane.position.copy(position);\n this._plane.quaternion.copy(quaternion);\n\n this.add(this._plane);\n }\n}\n"],"names":["LINE_MATERIAL","PLANE_MATERIAL","TEXT_MATERIAL","TEXT_SPACING","TEXT_SIZE","TEXT_COLOR","PLANE_COLOR","LINE_SPACING","ComponentDimensioningAxis","dimensioningAndAxis","boundingBox","cameraPosition","defaultLabelDirection","lookAtOppositeSide","form","to","lineOffset","start","end","Line3","convertToTHREE","Vector3","direction","labelDirection","center","size","ComponentDimensioning","Object3D","font","relativeCameraDirection","DIMENSIONING_GEOMETRY","kernelDimensioningToThree","LineBasicMaterial","MeshBasicMaterial","DoubleSide","MeshPhongMaterial","geometry","BufferGeometry","Line","Mesh","lineGeometry","maxSize","length","fontSize","parameters","text","textGeometry","TextGeometry","levelSpacing","line","vertices","BufferAttribute","xAxis","yAxis","zAxis","rotationMatrix","Matrix4","quaternion","Quaternion","sideOffset","endFrom","startFrom","endTo","startTo","moveBy","position","textGeometrySize","planeGeometry","PlaneGeometry","exports","__decorateClass","inject"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as G, k as N, V as s, l as P, L as R, M as B, m as F, n as j, o as x, p as z, q as b, T as k, s as T, t as L, Q as X, P as q, u as Q, v as d, j as E } from "./main-
|
|
1
|
+
import { O as G, k as N, V as s, l as P, L as R, M as B, m as F, n as j, o as x, p as z, q as b, T as k, s as T, t as L, Q as X, P as q, u as Q, v as d, j as E } from "./main-RpgY_kch.mjs";
|
|
2
2
|
var V = Object.defineProperty, D = (u, e, i, a) => {
|
|
3
3
|
for (var t = void 0, n = u.length - 1, r; n >= 0; n--)
|
|
4
4
|
(r = u[n]) && (t = r(e, i, t) || t);
|
|
@@ -193,4 +193,4 @@ D([
|
|
|
193
193
|
export {
|
|
194
194
|
C as default
|
|
195
195
|
};
|
|
196
|
-
//# sourceMappingURL=component-dimensioning-
|
|
196
|
+
//# sourceMappingURL=component-dimensioning-CgVIP7Nu.mjs.map
|
package/lib/{component-dimensioning-DvCO0pEp.mjs.map → component-dimensioning-CgVIP7Nu.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-dimensioning-DvCO0pEp.mjs","sources":["../../packages/configurator-core/src/utils/component-dimensioning.ts"],"sourcesContent":["import inject from '../../../common-core/src/di/inject';\nimport type CacheHolder from '../../../common-core/src/services/cache-holder';\nimport type UnitFormatter from '../services/unit-formatter';\nimport type { Dimensioning, DimensioningAxis } from '../../../typings/kernel';\n\nimport type { Box3 } from 'three';\nimport {\n BufferAttribute,\n BufferGeometry,\n DoubleSide,\n Line,\n Line3,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshPhongMaterial,\n Object3D,\n PlaneGeometry,\n Quaternion,\n Vector3,\n} from 'three';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\nimport type { Font } from 'three/examples/jsm/loaders/FontLoader';\nimport { kernelDimensioningToThree } from '../../../common-core/src/utils/threejs-utils';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport { DIMENSIONING_GEOMETRY } from './dimensioning-helper';\n\nconst LINE_MATERIAL = 'component_dimensioning_line_material';\nconst PLANE_MATERIAL = 'component_dimensioning_plane_material';\nconst TEXT_MATERIAL = 'component_dimensioning_text_material';\n\nconst TEXT_SPACING = 0.02;\nconst TEXT_SIZE = 0.025;\nconst TEXT_COLOR = 0x373737;\n// const TEXT_COLOR = 0xff0000;\nconst PLANE_COLOR = 0xffffff;\n// const PLANE_COLOR = 0x00ff00;\nconst LINE_SPACING = 0.05;\n\nexport interface DimensioningAndAxis {\n dimensioning: Dimensioning;\n axis?: DimensioningAxis;\n}\n\nclass ComponentDimensioningAxis {\n private _origin: Vector3;\n private _direction: Vector3;\n private _labelDirection: Vector3;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n cameraPosition: Vector3\n ) {\n this._direction =\n ComponentDimensioningAxis._getDirection(dimensioningAndAxis);\n const defaultLabelDirection =\n ComponentDimensioningAxis._getDefaultLabelDirection(\n dimensioningAndAxis,\n this._direction\n );\n const lookAtOppositeSide = cameraPosition.dot(defaultLabelDirection) >= 0;\n this._labelDirection =\n ComponentDimensioningAxis._calculateActualLabelDirection(\n dimensioningAndAxis,\n lookAtOppositeSide,\n defaultLabelDirection\n );\n this._origin = ComponentDimensioningAxis._calculateOrigin(\n dimensioningAndAxis,\n boundingBox,\n lookAtOppositeSide\n );\n }\n\n get direction(): Vector3 {\n return this._direction;\n }\n\n get labelDirection(): Vector3 {\n return this._labelDirection;\n }\n\n getEdge(form: number, to: number, lineOffset: number): Line3 {\n const start = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(form))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n const end = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(to))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n return new Line3(start, end);\n }\n\n private static _getDirection(\n dimensioningAndAxis: DimensioningAndAxis\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n return convertToTHREE(dimensioningAndAxis.axis.direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(1, 0, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(0, 0, 1);\n }\n return new Vector3(0, 1, 0);\n }\n\n private static _getDefaultLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n direction: Vector3\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n const labelDirection = convertToTHREE(\n dimensioningAndAxis.axis.labelDirection\n );\n const planeNormal = direction.clone().cross(labelDirection);\n return planeNormal.cross(direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, 1, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(-1, 0, 0);\n }\n return new Vector3(-1, 0, 0);\n }\n\n private static _calculateActualLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n lookAtOppositeSide: boolean,\n labelDirection: Vector3\n ): Vector3 {\n if (lookAtOppositeSide) {\n if (dimensioningAndAxis.axis) {\n if (dimensioningAndAxis.axis.alternativeOrigin) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n } else if (\n dimensioningAndAxis.dimensioning.axis === 'y' ||\n dimensioningAndAxis.dimensioning.axis === 'z'\n ) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n }\n return labelDirection;\n }\n\n private static _calculateOrigin(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n lookAtOppositeSide: boolean\n ): Vector3 {\n const center = boundingBox.getCenter(new Vector3());\n const size = boundingBox.getSize(new Vector3());\n if (dimensioningAndAxis.axis) {\n return lookAtOppositeSide && dimensioningAndAxis.axis.alternativeOrigin\n ? convertToTHREE(dimensioningAndAxis.axis.alternativeOrigin)\n : convertToTHREE(dimensioningAndAxis.axis.origin);\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, center.y + size.y * 0.5, center.z - size.z * 0.5);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n center.y - size.y * 0.5,\n 0\n );\n }\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n 0,\n center.z - size.z * 0.5\n );\n }\n}\n\nexport default class ComponentDimensioning extends Object3D {\n @inject\n private _cacheHolder: CacheHolder;\n\n @inject\n private _unitFormatter: UnitFormatter;\n\n private _dimensioning: Dimensioning;\n private _axis: ComponentDimensioningAxis;\n private _size: Vector3;\n private _relativeCameraDirection: Vector3;\n\n private _font: Font;\n private _level: number;\n\n private _line: Line;\n private _text: Mesh;\n private _plane: Mesh;\n\n private _lineMaterial: LineBasicMaterial;\n private _planeMaterial: MeshBasicMaterial;\n private _textMaterial: MeshPhongMaterial;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n font: Font,\n relativeCameraDirection: Vector3\n ) {\n super();\n this.name = DIMENSIONING_GEOMETRY;\n this._size = boundingBox.getSize(new Vector3());\n this._relativeCameraDirection = relativeCameraDirection.clone();\n this._dimensioning = kernelDimensioningToThree(\n dimensioningAndAxis.dimensioning\n );\n this._axis = new ComponentDimensioningAxis(\n dimensioningAndAxis,\n boundingBox,\n relativeCameraDirection\n );\n this._level = this._dimensioning.maxLevel - this._dimensioning.level;\n this._font = font;\n\n this._init();\n }\n\n clone() {\n // We do not clone ComponentDimensioning because this can break the\n // generation of perspective images. If the ComponentDimensioning is\n // visible during the generation of the perspective image, three.js\n // tries to clone it but clone does not give any parameters to the\n // constructor and therefore the clone breaks. Since we do not need\n // to clone ComponentDimensioning, we return undefined\n // for more details see:\n // * https://github.com/roomle-dev/web-sdk/pull/876\n // * https://roomle.atlassian.net/browse/RML-11691\n console.warn('Will not clone ComponentDimensioning');\n return undefined as any;\n }\n\n private _initMaterials() {\n if (!this._cacheHolder.materialCache) {\n return;\n }\n\n if (this._cacheHolder.materialCache.has(LINE_MATERIAL)) {\n this._lineMaterial = this._cacheHolder.materialCache.get(\n LINE_MATERIAL\n ) as LineBasicMaterial;\n } else {\n this._lineMaterial = new LineBasicMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(LINE_MATERIAL, this._lineMaterial);\n }\n\n if (this._cacheHolder.materialCache.has(PLANE_MATERIAL)) {\n this._planeMaterial = this._cacheHolder.materialCache.get(\n PLANE_MATERIAL\n ) as MeshBasicMaterial;\n } else {\n this._planeMaterial = new MeshBasicMaterial({\n color: PLANE_COLOR,\n side: DoubleSide,\n opacity: 0.8,\n transparent: true,\n });\n this._cacheHolder.materialCache.set(PLANE_MATERIAL, this._planeMaterial);\n }\n\n if (this._cacheHolder.materialCache.has(TEXT_MATERIAL)) {\n this._textMaterial = this._cacheHolder.materialCache.get(\n TEXT_MATERIAL\n ) as MeshPhongMaterial;\n } else {\n this._textMaterial = new MeshPhongMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(TEXT_MATERIAL, this._textMaterial);\n }\n }\n\n private _init() {\n this._initMaterials();\n\n const geometry = new BufferGeometry();\n\n this._line = new Line(geometry, this._lineMaterial);\n this._line.name = 'component dimension line ' + this._dimensioning.axis; // For debugging purpose\n // this._line.layers.set(LAYER.DIMENSIONS);\n\n this._text = new Mesh(geometry, this._textMaterial);\n this._text.name = 'component dimension text ' + this._dimensioning.axis;\n // this._text.layers.set(LAYER.DIMENSIONS);\n\n this._plane = new Mesh(geometry, this._planeMaterial);\n this._plane.name = 'component dimension plane ' + this._dimensioning.axis;\n // this._plane.layers.set(LAYER.DIMENSIONS);\n\n const lineGeometry = new BufferGeometry();\n const maxSize = Math.round(\n Math.max(this._size.y, this._size.x, this._size.z)\n );\n const length = Math.abs(this._dimensioning.to - this._dimensioning.from);\n let fontSize = TEXT_SIZE + (maxSize < 4 ? 0 : maxSize * 0.005);\n if (length < 0.3) {\n fontSize *= 0.5 + length;\n }\n const parameters = {\n font: this._font,\n size: fontSize,\n height: 0.001,\n curveSegments: 2,\n bevelEnabled: true,\n bevelThickness: 0.001,\n bevelSize: 0.001,\n depth: 0.001,\n };\n\n const text = this._dimensioning.label\n ? this._dimensioning.label\n : this._unitFormatter.formatMMValueToUnitString(length * 1000);\n const textGeometry = new TextGeometry(text, parameters);\n textGeometry.computeBoundingBox();\n const levelSpacing = textGeometry.boundingBox.getSize(new Vector3()).y;\n const lineOffset =\n LINE_SPACING + (3 * TEXT_SPACING + levelSpacing) * this._level;\n const line = this._axis.getEdge(\n this._dimensioning.from,\n this._dimensioning.to,\n lineOffset\n );\n this._addEdgeSideLines(\n levelSpacing,\n line,\n this._axis.labelDirection.clone()\n );\n const vertices = [\n line.start.x,\n line.start.y,\n line.start.z,\n line.end.x,\n line.end.y,\n line.end.z,\n ];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3)\n );\n this._line.geometry.dispose();\n this._line.geometry = lineGeometry;\n\n this.add(this._line);\n\n // add text\n this._text.geometry = textGeometry;\n\n const xAxis = this._axis.direction.clone();\n const yAxis = this._axis.labelDirection.clone();\n if (new Vector3(0, 1, 0).dot(yAxis) < Math.SQRT1_2) {\n yAxis.multiplyScalar(-1);\n }\n const zAxis = xAxis.clone().cross(yAxis);\n let rotationMatrix = new Matrix4().makeBasis(xAxis, yAxis, zAxis);\n if (this._relativeCameraDirection.dot(zAxis) > 0) {\n rotationMatrix = rotationMatrix.multiply(\n new Matrix4().makeRotationY(Math.PI)\n );\n }\n const quaternion = new Quaternion().setFromRotationMatrix(rotationMatrix);\n this._addText(\n line,\n textGeometry,\n quaternion,\n this._axis.labelDirection.clone().multiplyScalar(2 * TEXT_SPACING)\n );\n }\n\n private _addEdgeSideLines(\n levelSpacing: number,\n line: Line3,\n labelDirection: Vector3\n ) {\n const sideOffset = -(3 * TEXT_SPACING + levelSpacing) * 0.5;\n const endFrom = line.start.clone();\n const startFrom = line.start\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n const endTo = line.end.clone();\n const startTo = line.end\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n this._addLine(startFrom, endFrom);\n this._addLine(startTo, endTo);\n }\n\n private _addLine(start: Vector3, end: Vector3) {\n const lineGeometry = new BufferGeometry();\n const vertices = [start.x, start.y, start.z, end.x, end.y, end.z];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3)\n );\n this.add(new Line(lineGeometry, this._lineMaterial));\n }\n\n private _addText(\n line: Line3,\n textGeometry: TextGeometry,\n quaternion: Quaternion,\n moveBy: Vector3\n ) {\n const position = line.getCenter(new Vector3());\n position.add(moveBy);\n const textGeometrySize = textGeometry.boundingBox.getSize(new Vector3());\n\n textGeometry.center();\n this._text.position.copy(position);\n this._text.quaternion.copy(quaternion);\n\n this.add(this._text);\n\n //add plane\n const planeGeometry = new PlaneGeometry(\n textGeometrySize.x + TEXT_SPACING,\n textGeometrySize.y + TEXT_SPACING,\n 32\n );\n planeGeometry.center();\n this._plane.geometry = planeGeometry;\n this._plane.position.copy(position);\n this._plane.quaternion.copy(quaternion);\n\n this.add(this._plane);\n }\n}\n"],"names":["LINE_MATERIAL","PLANE_MATERIAL","TEXT_MATERIAL","TEXT_SPACING","TEXT_SIZE","TEXT_COLOR","PLANE_COLOR","LINE_SPACING","ComponentDimensioningAxis","dimensioningAndAxis","boundingBox","cameraPosition","defaultLabelDirection","lookAtOppositeSide","form","to","lineOffset","start","end","Line3","convertToTHREE","Vector3","direction","labelDirection","center","size","ComponentDimensioning","Object3D","font","relativeCameraDirection","DIMENSIONING_GEOMETRY","kernelDimensioningToThree","LineBasicMaterial","MeshBasicMaterial","DoubleSide","MeshPhongMaterial","geometry","BufferGeometry","Line","Mesh","lineGeometry","maxSize","length","fontSize","parameters","text","textGeometry","TextGeometry","levelSpacing","line","vertices","BufferAttribute","xAxis","yAxis","zAxis","rotationMatrix","Matrix4","quaternion","Quaternion","sideOffset","endFrom","startFrom","endTo","startTo","moveBy","position","textGeometrySize","planeGeometry","PlaneGeometry","__decorateClass","inject"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-dimensioning-CgVIP7Nu.mjs","sources":["../../packages/configurator-core/src/utils/component-dimensioning.ts"],"sourcesContent":["import inject from '../../../common-core/src/di/inject';\nimport type CacheHolder from '../../../common-core/src/services/cache-holder';\nimport type UnitFormatter from '../services/unit-formatter';\nimport type { Dimensioning, DimensioningAxis } from '../../../typings/kernel';\n\nimport type { Box3 } from 'three';\nimport {\n BufferAttribute,\n BufferGeometry,\n DoubleSide,\n Line,\n Line3,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshPhongMaterial,\n Object3D,\n PlaneGeometry,\n Quaternion,\n Vector3,\n} from 'three';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\nimport type { Font } from 'three/examples/jsm/loaders/FontLoader';\nimport { kernelDimensioningToThree } from '../../../common-core/src/utils/threejs-utils';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport { DIMENSIONING_GEOMETRY } from './dimensioning-helper';\n\nconst LINE_MATERIAL = 'component_dimensioning_line_material';\nconst PLANE_MATERIAL = 'component_dimensioning_plane_material';\nconst TEXT_MATERIAL = 'component_dimensioning_text_material';\n\nconst TEXT_SPACING = 0.02;\nconst TEXT_SIZE = 0.025;\nconst TEXT_COLOR = 0x373737;\n// const TEXT_COLOR = 0xff0000;\nconst PLANE_COLOR = 0xffffff;\n// const PLANE_COLOR = 0x00ff00;\nconst LINE_SPACING = 0.05;\n\nexport interface DimensioningAndAxis {\n dimensioning: Dimensioning;\n axis?: DimensioningAxis;\n}\n\nclass ComponentDimensioningAxis {\n private _origin: Vector3;\n private _direction: Vector3;\n private _labelDirection: Vector3;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n cameraPosition: Vector3\n ) {\n this._direction =\n ComponentDimensioningAxis._getDirection(dimensioningAndAxis);\n const defaultLabelDirection =\n ComponentDimensioningAxis._getDefaultLabelDirection(\n dimensioningAndAxis,\n this._direction\n );\n const lookAtOppositeSide = cameraPosition.dot(defaultLabelDirection) >= 0;\n this._labelDirection =\n ComponentDimensioningAxis._calculateActualLabelDirection(\n dimensioningAndAxis,\n lookAtOppositeSide,\n defaultLabelDirection\n );\n this._origin = ComponentDimensioningAxis._calculateOrigin(\n dimensioningAndAxis,\n boundingBox,\n lookAtOppositeSide\n );\n }\n\n get direction(): Vector3 {\n return this._direction;\n }\n\n get labelDirection(): Vector3 {\n return this._labelDirection;\n }\n\n getEdge(form: number, to: number, lineOffset: number): Line3 {\n const start = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(form))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n const end = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(to))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n return new Line3(start, end);\n }\n\n private static _getDirection(\n dimensioningAndAxis: DimensioningAndAxis\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n return convertToTHREE(dimensioningAndAxis.axis.direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(1, 0, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(0, 0, 1);\n }\n return new Vector3(0, 1, 0);\n }\n\n private static _getDefaultLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n direction: Vector3\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n const labelDirection = convertToTHREE(\n dimensioningAndAxis.axis.labelDirection\n );\n const planeNormal = direction.clone().cross(labelDirection);\n return planeNormal.cross(direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, 1, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(-1, 0, 0);\n }\n return new Vector3(-1, 0, 0);\n }\n\n private static _calculateActualLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n lookAtOppositeSide: boolean,\n labelDirection: Vector3\n ): Vector3 {\n if (lookAtOppositeSide) {\n if (dimensioningAndAxis.axis) {\n if (dimensioningAndAxis.axis.alternativeOrigin) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n } else if (\n dimensioningAndAxis.dimensioning.axis === 'y' ||\n dimensioningAndAxis.dimensioning.axis === 'z'\n ) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n }\n return labelDirection;\n }\n\n private static _calculateOrigin(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n lookAtOppositeSide: boolean\n ): Vector3 {\n const center = boundingBox.getCenter(new Vector3());\n const size = boundingBox.getSize(new Vector3());\n if (dimensioningAndAxis.axis) {\n return lookAtOppositeSide && dimensioningAndAxis.axis.alternativeOrigin\n ? convertToTHREE(dimensioningAndAxis.axis.alternativeOrigin)\n : convertToTHREE(dimensioningAndAxis.axis.origin);\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, center.y + size.y * 0.5, center.z - size.z * 0.5);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n center.y - size.y * 0.5,\n 0\n );\n }\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n 0,\n center.z - size.z * 0.5\n );\n }\n}\n\nexport default class ComponentDimensioning extends Object3D {\n @inject\n private _cacheHolder: CacheHolder;\n\n @inject\n private _unitFormatter: UnitFormatter;\n\n private _dimensioning: Dimensioning;\n private _axis: ComponentDimensioningAxis;\n private _size: Vector3;\n private _relativeCameraDirection: Vector3;\n\n private _font: Font;\n private _level: number;\n\n private _line: Line;\n private _text: Mesh;\n private _plane: Mesh;\n\n private _lineMaterial: LineBasicMaterial;\n private _planeMaterial: MeshBasicMaterial;\n private _textMaterial: MeshPhongMaterial;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n font: Font,\n relativeCameraDirection: Vector3\n ) {\n super();\n this.name = DIMENSIONING_GEOMETRY;\n this._size = boundingBox.getSize(new Vector3());\n this._relativeCameraDirection = relativeCameraDirection.clone();\n this._dimensioning = kernelDimensioningToThree(\n dimensioningAndAxis.dimensioning\n );\n this._axis = new ComponentDimensioningAxis(\n dimensioningAndAxis,\n boundingBox,\n relativeCameraDirection\n );\n this._level = this._dimensioning.maxLevel - this._dimensioning.level;\n this._font = font;\n\n this._init();\n }\n\n clone() {\n // We do not clone ComponentDimensioning because this can break the\n // generation of perspective images. If the ComponentDimensioning is\n // visible during the generation of the perspective image, three.js\n // tries to clone it but clone does not give any parameters to the\n // constructor and therefore the clone breaks. Since we do not need\n // to clone ComponentDimensioning, we return undefined\n // for more details see:\n // * https://github.com/roomle-dev/web-sdk/pull/876\n // * https://roomle.atlassian.net/browse/RML-11691\n console.warn('Will not clone ComponentDimensioning');\n return undefined as any;\n }\n\n private _initMaterials() {\n if (!this._cacheHolder.materialCache) {\n return;\n }\n\n if (this._cacheHolder.materialCache.has(LINE_MATERIAL)) {\n this._lineMaterial = this._cacheHolder.materialCache.get(\n LINE_MATERIAL\n ) as LineBasicMaterial;\n } else {\n this._lineMaterial = new LineBasicMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(LINE_MATERIAL, this._lineMaterial);\n }\n\n if (this._cacheHolder.materialCache.has(PLANE_MATERIAL)) {\n this._planeMaterial = this._cacheHolder.materialCache.get(\n PLANE_MATERIAL\n ) as MeshBasicMaterial;\n } else {\n this._planeMaterial = new MeshBasicMaterial({\n color: PLANE_COLOR,\n side: DoubleSide,\n opacity: 0.8,\n transparent: true,\n });\n this._cacheHolder.materialCache.set(PLANE_MATERIAL, this._planeMaterial);\n }\n\n if (this._cacheHolder.materialCache.has(TEXT_MATERIAL)) {\n this._textMaterial = this._cacheHolder.materialCache.get(\n TEXT_MATERIAL\n ) as MeshPhongMaterial;\n } else {\n this._textMaterial = new MeshPhongMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(TEXT_MATERIAL, this._textMaterial);\n }\n }\n\n private _init() {\n this._initMaterials();\n\n const geometry = new BufferGeometry();\n\n this._line = new Line(geometry, this._lineMaterial);\n this._line.name = 'component dimension line ' + this._dimensioning.axis; // For debugging purpose\n // this._line.layers.set(LAYER.DIMENSIONS);\n\n this._text = new Mesh(geometry, this._textMaterial);\n this._text.name = 'component dimension text ' + this._dimensioning.axis;\n // this._text.layers.set(LAYER.DIMENSIONS);\n\n this._plane = new Mesh(geometry, this._planeMaterial);\n this._plane.name = 'component dimension plane ' + this._dimensioning.axis;\n // this._plane.layers.set(LAYER.DIMENSIONS);\n\n const lineGeometry = new BufferGeometry();\n const maxSize = Math.round(\n Math.max(this._size.y, this._size.x, this._size.z)\n );\n const length = Math.abs(this._dimensioning.to - this._dimensioning.from);\n let fontSize = TEXT_SIZE + (maxSize < 4 ? 0 : maxSize * 0.005);\n if (length < 0.3) {\n fontSize *= 0.5 + length;\n }\n const parameters = {\n font: this._font,\n size: fontSize,\n height: 0.001,\n curveSegments: 2,\n bevelEnabled: true,\n bevelThickness: 0.001,\n bevelSize: 0.001,\n depth: 0.001,\n };\n\n const text = this._dimensioning.label\n ? this._dimensioning.label\n : this._unitFormatter.formatMMValueToUnitString(length * 1000);\n const textGeometry = new TextGeometry(text, parameters);\n textGeometry.computeBoundingBox();\n const levelSpacing = textGeometry.boundingBox.getSize(new Vector3()).y;\n const lineOffset =\n LINE_SPACING + (3 * TEXT_SPACING + levelSpacing) * this._level;\n const line = this._axis.getEdge(\n this._dimensioning.from,\n this._dimensioning.to,\n lineOffset\n );\n this._addEdgeSideLines(\n levelSpacing,\n line,\n this._axis.labelDirection.clone()\n );\n const vertices = [\n line.start.x,\n line.start.y,\n line.start.z,\n line.end.x,\n line.end.y,\n line.end.z,\n ];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3)\n );\n this._line.geometry.dispose();\n this._line.geometry = lineGeometry;\n\n this.add(this._line);\n\n // add text\n this._text.geometry = textGeometry;\n\n const xAxis = this._axis.direction.clone();\n const yAxis = this._axis.labelDirection.clone();\n if (new Vector3(0, 1, 0).dot(yAxis) < Math.SQRT1_2) {\n yAxis.multiplyScalar(-1);\n }\n const zAxis = xAxis.clone().cross(yAxis);\n let rotationMatrix = new Matrix4().makeBasis(xAxis, yAxis, zAxis);\n if (this._relativeCameraDirection.dot(zAxis) > 0) {\n rotationMatrix = rotationMatrix.multiply(\n new Matrix4().makeRotationY(Math.PI)\n );\n }\n const quaternion = new Quaternion().setFromRotationMatrix(rotationMatrix);\n this._addText(\n line,\n textGeometry,\n quaternion,\n this._axis.labelDirection.clone().multiplyScalar(2 * TEXT_SPACING)\n );\n }\n\n private _addEdgeSideLines(\n levelSpacing: number,\n line: Line3,\n labelDirection: Vector3\n ) {\n const sideOffset = -(3 * TEXT_SPACING + levelSpacing) * 0.5;\n const endFrom = line.start.clone();\n const startFrom = line.start\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n const endTo = line.end.clone();\n const startTo = line.end\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n this._addLine(startFrom, endFrom);\n this._addLine(startTo, endTo);\n }\n\n private _addLine(start: Vector3, end: Vector3) {\n const lineGeometry = new BufferGeometry();\n const vertices = [start.x, start.y, start.z, end.x, end.y, end.z];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3)\n );\n this.add(new Line(lineGeometry, this._lineMaterial));\n }\n\n private _addText(\n line: Line3,\n textGeometry: TextGeometry,\n quaternion: Quaternion,\n moveBy: Vector3\n ) {\n const position = line.getCenter(new Vector3());\n position.add(moveBy);\n const textGeometrySize = textGeometry.boundingBox.getSize(new Vector3());\n\n textGeometry.center();\n this._text.position.copy(position);\n this._text.quaternion.copy(quaternion);\n\n this.add(this._text);\n\n //add plane\n const planeGeometry = new PlaneGeometry(\n textGeometrySize.x + TEXT_SPACING,\n textGeometrySize.y + TEXT_SPACING,\n 32\n );\n planeGeometry.center();\n this._plane.geometry = planeGeometry;\n this._plane.position.copy(position);\n this._plane.quaternion.copy(quaternion);\n\n this.add(this._plane);\n }\n}\n"],"names":["LINE_MATERIAL","PLANE_MATERIAL","TEXT_MATERIAL","TEXT_SPACING","TEXT_SIZE","TEXT_COLOR","PLANE_COLOR","LINE_SPACING","ComponentDimensioningAxis","dimensioningAndAxis","boundingBox","cameraPosition","defaultLabelDirection","lookAtOppositeSide","form","to","lineOffset","start","end","Line3","convertToTHREE","Vector3","direction","labelDirection","center","size","ComponentDimensioning","Object3D","font","relativeCameraDirection","DIMENSIONING_GEOMETRY","kernelDimensioningToThree","LineBasicMaterial","MeshBasicMaterial","DoubleSide","MeshPhongMaterial","geometry","BufferGeometry","Line","Mesh","lineGeometry","maxSize","length","fontSize","parameters","text","textGeometry","TextGeometry","levelSpacing","line","vertices","BufferAttribute","xAxis","yAxis","zAxis","rotationMatrix","Matrix4","quaternion","Quaternion","sideOffset","endFrom","startFrom","endTo","startTo","moveBy","position","textGeometrySize","planeGeometry","PlaneGeometry","__decorateClass","inject"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["./main-
|
|
2
|
-
//# sourceMappingURL=component-raycast-helper-
|
|
1
|
+
System.register(["./main-DVWEbQdM.js"],function(C,M){"use strict";var _,o,m,h,p,f,y,l,d,b;return{setters:[a=>{_=a.F,o=a.H,m=a.J,h=a.q,p=a.N,f=a.U,y=a.W,l=a.V,d=a.X,b=a.t}],execute:function(){class a{constructor(){this._nonTransparentComponent=null,this._raycaster=new _,this._raycaster.near=.1,this._raycaster.layers.enable(o.OBJECT),this._raycaster.layers.enable(o.COMPONENT),this._raycaster.layers.enable(o.PREVIEW),this._raycaster.layers.enable(o.UI)}init(e,t){this._object=e,this._camera=t,this.checkComponentVisibility=m(this.checkComponentVisibility,100).bind(this),this.checkPreviewVisibility=m(this.checkPreviewVisibility,100).bind(this)}setCamera(e){this._camera=e}setObject(e){this._object=e}changeMaterialsOnSelect(e,t,i=!1,s){t!==this._nonTransparentComponent&&(this._nonTransparentComponent=t,this._changeMaterialsOnSelect(e,t,i,s))}_changeMaterialsOnSelect(e,t,i=!1,s){if(e.children.length>0)for(const r of e.children){const n=t&&e.id===t.id||i,c=!(r instanceof h);r.userData.ignoreComponentRaycast||this._changeMaterialsOnSelect(r,t,n&&c?!1:n,s)}if(t)e instanceof h&&e.material instanceof p&&!e.userData.oldMaterial&&(e.userData.oldMaterial=e.material,e.material=e.material.clone(),i||f(e,{opacity:.2,transparent:!0}).then(()=>{s?.()}));else if(e.userData.oldMaterial&&e instanceof h&&e.material instanceof p){const{opacity:r,transparent:n}=e.userData.oldMaterial;f(e,{opacity:r,transparent:n}).then(()=>s?.()),e.userData.oldMaterial=void 0}}isComponentVisible(e){const t=[];e.traverse(n=>t.push(n.uuid));const i=new y().setFromObject(e).getCenter(new l),s=new l().subVectors(i,this._camera.position).normalize();this._raycaster.set(this._camera.position,s),this._raycaster.far=this._camera.position.distanceTo(i);const r=[];return this._raycaster.intersectObjects(this._object.children,!0).forEach(n=>{n.object.material.visible&&(t.includes(n.object.uuid)||n.object.userData.ignoreComponentRaycast||r.push(n))}),r.length===0}checkComponentAndPreviewVisibility(e,t){e.hasSelection()?this.checkComponentVisibility(e,t):t.hasPreviews()?this.checkPreviewVisibility(t):this.changeMaterialsOnSelect(this._object,null)}checkComponentVisibility(e,t){if(!e.hasSelection())return;const i=t.getComponentsForIds(e.getSelectedRuntimeComponentIds());if(i.length>1)return;const s=i[0];this.isComponentVisible(s)?this.changeMaterialsOnSelect(this._object,null):this.changeMaterialsOnSelect(this._object,s)}areAllPreviewsVisible(e){if(!e.hasPreviews())return!0;const t=e.getPreviews();return t.length===0?!0:t.map(i=>this.isComponentVisible(i)).reduce((i,s)=>i&&s)}areAllComponentsInFrustum(e){if(e.length===0)return!0;const t=new d,i=new b().multiplyMatrices(this._camera.projectionMatrix,this._camera.matrixWorldInverse),s=new y;t.setFromProjectionMatrix(i);const r=n=>{const c=s.setFromObject(n).getCenter(new l);return t.containsPoint(c)};return e.map(n=>r(n)).reduce((n,c)=>n&&c)}checkPreviewVisibility(e){if(e.hasPreviewLines())return;this.areAllPreviewsVisible(e)?this.changeMaterialsOnSelect(this._object,null):this.changeMaterialsOnSelect(this._object,{id:-1})}isComponentMeasurementLabelOccluded(e,t){const i=new l().subVectors(e,this._camera.position).normalize(),s=this._camera.position.distanceTo(e);return this._raycaster.set(this._camera.position,i),this._raycaster.far=s-.01,this._raycaster.intersectObject(t,!0).filter(c=>{const u=c.object;return!(u.type!=="Mesh"||u.userData.ignoreComponentRaycast||u.material&&!u.material.visible)}).length>0}checkMultipleLabelOcclusion(e,t){const i=new Set;return e.forEach(({id:s,worldPos:r})=>{this.isComponentMeasurementLabelOccluded(r,t)&&i.add(s)}),i}}C("default",a)}}});
|
|
2
|
+
//# sourceMappingURL=component-raycast-helper-DvNtWlR5.js.map
|
package/lib/{component-raycast-helper-Dl-pzfg_.js.map → component-raycast-helper-DvNtWlR5.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-raycast-helper-Dl-pzfg_.js","sources":["../../packages/configurator-core/src/utils/component-raycast-helper.ts"],"sourcesContent":["import { type RoomleComponent } from '../../../common-core/src/webgl/roomle-component-factory';\nimport type ConfiguratorSceneEventHandler from '../webgl/configurator-scene-event-handler';\nimport type ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\nimport { throttle } from '../../../common-core/src/utils/common-utils';\nimport { LAYER } from '../../../common-core/src/webgl/layer';\nimport { transitionTransparencyOfMaterial } from '../../../common-core/src/utils/threejs-utils';\nimport type { Object3D, PerspectiveCamera } from 'three';\nimport {\n Box3,\n Frustum,\n Matrix4,\n Mesh,\n MeshStandardMaterial,\n Raycaster,\n Vector3,\n} from 'three';\n\nexport default class ComponentRaycastHelper {\n private _object: Object3D;\n private _camera: PerspectiveCamera;\n private _raycaster: Raycaster;\n\n private _nonTransparentComponent: RoomleComponent = null;\n\n constructor() {\n this._raycaster = new Raycaster();\n this._raycaster.near = 0.1;\n this._raycaster.layers.enable(LAYER.OBJECT);\n this._raycaster.layers.enable(LAYER.COMPONENT);\n this._raycaster.layers.enable(LAYER.PREVIEW);\n this._raycaster.layers.enable(LAYER.UI);\n }\n\n public init(object: Object3D, camera: PerspectiveCamera) {\n this._object = object;\n this._camera = camera;\n\n this.checkComponentVisibility = throttle(\n this.checkComponentVisibility,\n 100\n ).bind(this);\n this.checkPreviewVisibility = throttle(\n this.checkPreviewVisibility,\n 100\n ).bind(this);\n }\n\n public setCamera(camera: PerspectiveCamera) {\n this._camera = camera;\n }\n\n public setObject(object: Object3D) {\n this._object = object;\n }\n\n public changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void\n ) {\n if (component === this._nonTransparentComponent) {\n return;\n }\n this._nonTransparentComponent = component;\n this._changeMaterialsOnSelect(object, component, selected, callback);\n }\n\n private _changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void\n ) {\n if (object.children.length > 0) {\n for (const child of object.children) {\n const selectChild =\n (component && object.id === component.id) || selected;\n const isComponent = !(child instanceof Mesh);\n if (!child.userData.ignoreComponentRaycast) {\n this._changeMaterialsOnSelect(\n child,\n component,\n selectChild && isComponent ? false : selectChild,\n callback\n );\n }\n }\n }\n if (component) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial &&\n !object.userData.oldMaterial\n ) {\n object.userData.oldMaterial = object.material;\n object.material = object.material.clone();\n if (!selected) {\n transitionTransparencyOfMaterial(object, {\n opacity: 0.2,\n transparent: true,\n }).then(() => {\n callback?.();\n });\n }\n }\n } else if (object.userData.oldMaterial) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial\n ) {\n const { opacity, transparent } = object.userData.oldMaterial;\n transitionTransparencyOfMaterial(object, { opacity, transparent }).then(\n () => callback?.()\n );\n object.userData.oldMaterial = undefined;\n }\n }\n }\n\n public isComponentVisible(component: RoomleComponent): boolean {\n const uuids: string[] = [];\n component.traverse((object) => uuids.push(object.uuid));\n const position = new Box3()\n .setFromObject(component)\n .getCenter(new Vector3());\n const direction = new Vector3()\n .subVectors(position, this._camera.position)\n .normalize();\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = this._camera.position.distanceTo(position);\n const visibleIntersections = [];\n this._raycaster\n .intersectObjects(this._object.children, true)\n .forEach((i) => {\n // do not include invisible materials\n if (!(i.object as any).material.visible) {\n return;\n }\n // do not include the object itself\n if (uuids.includes(i.object.uuid)) {\n return;\n }\n // do not include objects which explicitly have the ignoreComponentRaycast flag\n if ((i.object as any).userData.ignoreComponentRaycast) {\n return;\n }\n visibleIntersections.push(i);\n });\n return visibleIntersections.length === 0;\n }\n\n public checkComponentAndPreviewVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel\n ) {\n if (sceneEventHandler.hasSelection()) {\n this.checkComponentVisibility(sceneEventHandler, configuratorViewModel);\n } else if (configuratorViewModel.hasPreviews()) {\n this.checkPreviewVisibility(configuratorViewModel);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public checkComponentVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel\n ) {\n if (!sceneEventHandler.hasSelection()) {\n return;\n }\n const selectedComponents = configuratorViewModel.getComponentsForIds(\n sceneEventHandler.getSelectedRuntimeComponentIds()\n );\n if (selectedComponents.length > 1) {\n return;\n }\n const selectedComponent = selectedComponents[0];\n if (this.isComponentVisible(selectedComponent)) {\n this.changeMaterialsOnSelect(this._object, null);\n } else {\n this.changeMaterialsOnSelect(this._object, selectedComponent);\n }\n }\n\n public areAllPreviewsVisible(\n configuratorViewModel: ConfiguratorViewModel\n ): boolean {\n if (!configuratorViewModel.hasPreviews()) {\n return true;\n }\n const previews = configuratorViewModel.getPreviews();\n if (previews.length === 0) {\n return true;\n }\n return previews\n .map((preview) => this.isComponentVisible(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible\n );\n }\n\n public areAllComponentsInFrustum(previews: RoomleComponent[]): boolean {\n if (previews.length === 0) {\n return true;\n }\n const frustum = new Frustum();\n const matrix = new Matrix4().multiplyMatrices(\n this._camera.projectionMatrix,\n this._camera.matrixWorldInverse\n );\n const box3 = new Box3();\n frustum.setFromProjectionMatrix(matrix);\n const isComponentInFrustum = (component: RoomleComponent) => {\n const position = box3.setFromObject(component).getCenter(new Vector3());\n return frustum.containsPoint(position);\n };\n return previews\n .map((preview) => isComponentInFrustum(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible\n );\n }\n\n public checkPreviewVisibility(configuratorViewModel: ConfiguratorViewModel) {\n if (configuratorViewModel.hasPreviewLines()) {\n return;\n }\n const allPreviewsVisible = this.areAllPreviewsVisible(\n configuratorViewModel\n );\n if (!allPreviewsVisible) {\n this.changeMaterialsOnSelect(this._object, { id: -1 } as RoomleComponent);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public isComponentMeasurementLabelOccluded(\n labelWorldPos: Vector3,\n component: RoomleComponent\n ): boolean {\n const direction = new Vector3()\n .subVectors(labelWorldPos, this._camera.position)\n .normalize();\n const distance = this._camera.position.distanceTo(labelWorldPos);\n\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = distance - 0.01;\n\n const intersections = this._raycaster.intersectObject(component, true);\n\n const occludingIntersections = intersections.filter((intersection) => {\n const obj = intersection.object as any;\n\n if (\n obj.type !== 'Mesh' ||\n obj.userData.ignoreComponentRaycast ||\n (obj.material && !obj.material.visible)\n )\n {return false;}\n\n return true;\n });\n\n return occludingIntersections.length > 0;\n }\n\n public checkMultipleLabelOcclusion(\n labelPositions: Array<{ id: string; worldPos: Vector3 }>,\n component: RoomleComponent\n ): Set<string> {\n const occludedLabelIds = new Set<string>();\n\n labelPositions.forEach(({ id, worldPos }) => {\n if (this.isComponentMeasurementLabelOccluded(worldPos, component)) {\n occludedLabelIds.add(id);\n }\n });\n\n return occludedLabelIds;\n }\n}\n"],"names":["ComponentRaycastHelper","Raycaster","LAYER","object","camera","throttle","component","selected","callback","child","selectChild","isComponent","Mesh","MeshStandardMaterial","transitionTransparencyOfMaterial","opacity","transparent","uuids","position","Box3","Vector3","direction","visibleIntersections","i","sceneEventHandler","configuratorViewModel","selectedComponents","selectedComponent","previews","preview","arePreviewsVisible","isPreviewVisible","frustum","Frustum","matrix","Matrix4","box3","isComponentInFrustum","labelWorldPos","distance","intersection","obj","labelPositions","occludedLabelIds","id","worldPos","exports"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-raycast-helper-DvNtWlR5.js","sources":["../../packages/configurator-core/src/utils/component-raycast-helper.ts"],"sourcesContent":["import { type RoomleComponent } from '../../../common-core/src/webgl/roomle-component-factory';\nimport type ConfiguratorSceneEventHandler from '../webgl/configurator-scene-event-handler';\nimport type ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\nimport { throttle } from '../../../common-core/src/utils/common-utils';\nimport { LAYER } from '../../../common-core/src/webgl/layer';\nimport { transitionTransparencyOfMaterial } from '../../../common-core/src/utils/threejs-utils';\nimport type { Object3D, PerspectiveCamera } from 'three';\nimport {\n Box3,\n Frustum,\n Matrix4,\n Mesh,\n MeshStandardMaterial,\n Raycaster,\n Vector3,\n} from 'three';\n\nexport default class ComponentRaycastHelper {\n private _object: Object3D;\n private _camera: PerspectiveCamera;\n private _raycaster: Raycaster;\n\n private _nonTransparentComponent: RoomleComponent = null;\n\n constructor() {\n this._raycaster = new Raycaster();\n this._raycaster.near = 0.1;\n this._raycaster.layers.enable(LAYER.OBJECT);\n this._raycaster.layers.enable(LAYER.COMPONENT);\n this._raycaster.layers.enable(LAYER.PREVIEW);\n this._raycaster.layers.enable(LAYER.UI);\n }\n\n public init(object: Object3D, camera: PerspectiveCamera) {\n this._object = object;\n this._camera = camera;\n\n this.checkComponentVisibility = throttle(\n this.checkComponentVisibility,\n 100\n ).bind(this);\n this.checkPreviewVisibility = throttle(\n this.checkPreviewVisibility,\n 100\n ).bind(this);\n }\n\n public setCamera(camera: PerspectiveCamera) {\n this._camera = camera;\n }\n\n public setObject(object: Object3D) {\n this._object = object;\n }\n\n public changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void\n ) {\n if (component === this._nonTransparentComponent) {\n return;\n }\n this._nonTransparentComponent = component;\n this._changeMaterialsOnSelect(object, component, selected, callback);\n }\n\n private _changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void\n ) {\n if (object.children.length > 0) {\n for (const child of object.children) {\n const selectChild =\n (component && object.id === component.id) || selected;\n const isComponent = !(child instanceof Mesh);\n if (!child.userData.ignoreComponentRaycast) {\n this._changeMaterialsOnSelect(\n child,\n component,\n selectChild && isComponent ? false : selectChild,\n callback\n );\n }\n }\n }\n if (component) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial &&\n !object.userData.oldMaterial\n ) {\n object.userData.oldMaterial = object.material;\n object.material = object.material.clone();\n if (!selected) {\n transitionTransparencyOfMaterial(object, {\n opacity: 0.2,\n transparent: true,\n }).then(() => {\n callback?.();\n });\n }\n }\n } else if (object.userData.oldMaterial) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial\n ) {\n const { opacity, transparent } = object.userData.oldMaterial;\n transitionTransparencyOfMaterial(object, { opacity, transparent }).then(\n () => callback?.()\n );\n object.userData.oldMaterial = undefined;\n }\n }\n }\n\n public isComponentVisible(component: RoomleComponent): boolean {\n const uuids: string[] = [];\n component.traverse((object) => uuids.push(object.uuid));\n const position = new Box3()\n .setFromObject(component)\n .getCenter(new Vector3());\n const direction = new Vector3()\n .subVectors(position, this._camera.position)\n .normalize();\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = this._camera.position.distanceTo(position);\n const visibleIntersections = [];\n this._raycaster\n .intersectObjects(this._object.children, true)\n .forEach((i) => {\n // do not include invisible materials\n if (!(i.object as any).material.visible) {\n return;\n }\n // do not include the object itself\n if (uuids.includes(i.object.uuid)) {\n return;\n }\n // do not include objects which explicitly have the ignoreComponentRaycast flag\n if ((i.object as any).userData.ignoreComponentRaycast) {\n return;\n }\n visibleIntersections.push(i);\n });\n return visibleIntersections.length === 0;\n }\n\n public checkComponentAndPreviewVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel\n ) {\n if (sceneEventHandler.hasSelection()) {\n this.checkComponentVisibility(sceneEventHandler, configuratorViewModel);\n } else if (configuratorViewModel.hasPreviews()) {\n this.checkPreviewVisibility(configuratorViewModel);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public checkComponentVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel\n ) {\n if (!sceneEventHandler.hasSelection()) {\n return;\n }\n const selectedComponents = configuratorViewModel.getComponentsForIds(\n sceneEventHandler.getSelectedRuntimeComponentIds()\n );\n if (selectedComponents.length > 1) {\n return;\n }\n const selectedComponent = selectedComponents[0];\n if (this.isComponentVisible(selectedComponent)) {\n this.changeMaterialsOnSelect(this._object, null);\n } else {\n this.changeMaterialsOnSelect(this._object, selectedComponent);\n }\n }\n\n public areAllPreviewsVisible(\n configuratorViewModel: ConfiguratorViewModel\n ): boolean {\n if (!configuratorViewModel.hasPreviews()) {\n return true;\n }\n const previews = configuratorViewModel.getPreviews();\n if (previews.length === 0) {\n return true;\n }\n return previews\n .map((preview) => this.isComponentVisible(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible\n );\n }\n\n public areAllComponentsInFrustum(previews: RoomleComponent[]): boolean {\n if (previews.length === 0) {\n return true;\n }\n const frustum = new Frustum();\n const matrix = new Matrix4().multiplyMatrices(\n this._camera.projectionMatrix,\n this._camera.matrixWorldInverse\n );\n const box3 = new Box3();\n frustum.setFromProjectionMatrix(matrix);\n const isComponentInFrustum = (component: RoomleComponent) => {\n const position = box3.setFromObject(component).getCenter(new Vector3());\n return frustum.containsPoint(position);\n };\n return previews\n .map((preview) => isComponentInFrustum(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible\n );\n }\n\n public checkPreviewVisibility(configuratorViewModel: ConfiguratorViewModel) {\n if (configuratorViewModel.hasPreviewLines()) {\n return;\n }\n const allPreviewsVisible = this.areAllPreviewsVisible(\n configuratorViewModel\n );\n if (!allPreviewsVisible) {\n this.changeMaterialsOnSelect(this._object, { id: -1 } as RoomleComponent);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public isComponentMeasurementLabelOccluded(\n labelWorldPos: Vector3,\n component: RoomleComponent\n ): boolean {\n const direction = new Vector3()\n .subVectors(labelWorldPos, this._camera.position)\n .normalize();\n const distance = this._camera.position.distanceTo(labelWorldPos);\n\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = distance - 0.01;\n\n const intersections = this._raycaster.intersectObject(component, true);\n\n const occludingIntersections = intersections.filter((intersection) => {\n const obj = intersection.object as any;\n\n if (\n obj.type !== 'Mesh' ||\n obj.userData.ignoreComponentRaycast ||\n (obj.material && !obj.material.visible)\n )\n {return false;}\n\n return true;\n });\n\n return occludingIntersections.length > 0;\n }\n\n public checkMultipleLabelOcclusion(\n labelPositions: Array<{ id: string; worldPos: Vector3 }>,\n component: RoomleComponent\n ): Set<string> {\n const occludedLabelIds = new Set<string>();\n\n labelPositions.forEach(({ id, worldPos }) => {\n if (this.isComponentMeasurementLabelOccluded(worldPos, component)) {\n occludedLabelIds.add(id);\n }\n });\n\n return occludedLabelIds;\n }\n}\n"],"names":["ComponentRaycastHelper","Raycaster","LAYER","object","camera","throttle","component","selected","callback","child","selectChild","isComponent","Mesh","MeshStandardMaterial","transitionTransparencyOfMaterial","opacity","transparent","uuids","position","Box3","Vector3","direction","visibleIntersections","i","sceneEventHandler","configuratorViewModel","selectedComponents","selectedComponent","previews","preview","arePreviewsVisible","isPreviewVisible","frustum","Frustum","matrix","Matrix4","box3","isComponentInFrustum","labelWorldPos","distance","intersection","obj","labelPositions","occludedLabelIds","id","worldPos","exports"],"mappings":"+LAiBA,MAAqBA,CAAuB,CAO1C,aAAc,CAFd,KAAQ,yBAA4C,KAGlD,KAAK,WAAa,IAAIC,EACtB,KAAK,WAAW,KAAO,GACvB,KAAK,WAAW,OAAO,OAAOC,EAAM,MAAM,EAC1C,KAAK,WAAW,OAAO,OAAOA,EAAM,SAAS,EAC7C,KAAK,WAAW,OAAO,OAAOA,EAAM,OAAO,EAC3C,KAAK,WAAW,OAAO,OAAOA,EAAM,EAAE,CACxC,CAEO,KAAKC,EAAkBC,EAA2B,CACvD,KAAK,QAAUD,EACf,KAAK,QAAUC,EAEf,KAAK,yBAA2BC,EAC9B,KAAK,yBACL,GAAA,EACA,KAAK,IAAI,EACX,KAAK,uBAAyBA,EAC5B,KAAK,uBACL,GAAA,EACA,KAAK,IAAI,CACb,CAEO,UAAUD,EAA2B,CAC1C,KAAK,QAAUA,CACjB,CAEO,UAAUD,EAAkB,CACjC,KAAK,QAAUA,CACjB,CAEO,wBACLA,EACAG,EACAC,EAAoB,GACpBC,EACA,CACIF,IAAc,KAAK,2BAGvB,KAAK,yBAA2BA,EAChC,KAAK,yBAAyBH,EAAQG,EAAWC,EAAUC,CAAQ,EACrE,CAEQ,yBACNL,EACAG,EACAC,EAAoB,GACpBC,EACA,CACA,GAAIL,EAAO,SAAS,OAAS,EAC3B,UAAWM,KAASN,EAAO,SAAU,CACnC,MAAMO,EACHJ,GAAaH,EAAO,KAAOG,EAAU,IAAOC,EACzCI,EAAc,EAAEF,aAAiBG,GAClCH,EAAM,SAAS,wBAClB,KAAK,yBACHA,EACAH,EACAI,GAAeC,EAAc,GAAQD,EACrCF,CAAA,CAGN,CAEF,GAAIF,EAEAH,aAAkBS,GAClBT,EAAO,oBAAoBU,GAC3B,CAACV,EAAO,SAAS,cAEjBA,EAAO,SAAS,YAAcA,EAAO,SACrCA,EAAO,SAAWA,EAAO,SAAS,MAAA,EAC7BI,GACHO,EAAiCX,EAAQ,CACvC,QAAS,GACT,YAAa,EAAA,CACd,EAAE,KAAK,IAAM,CACZK,IAAA,CACF,CAAC,WAGIL,EAAO,SAAS,aAEvBA,aAAkBS,GAClBT,EAAO,oBAAoBU,EAC3B,CACA,KAAM,CAAE,QAAAE,EAAS,YAAAC,CAAA,EAAgBb,EAAO,SAAS,YACjDW,EAAiCX,EAAQ,CAAE,QAAAY,EAAS,YAAAC,CAAA,CAAa,EAAE,KACjE,IAAMR,IAAA,CAAW,EAEnBL,EAAO,SAAS,YAAc,MAChC,CAEJ,CAEO,mBAAmBG,EAAqC,CAC7D,MAAMW,EAAkB,CAAA,EACxBX,EAAU,SAAUH,GAAWc,EAAM,KAAKd,EAAO,IAAI,CAAC,EACtD,MAAMe,EAAW,IAAIC,IAClB,cAAcb,CAAS,EACvB,UAAU,IAAIc,CAAS,EACpBC,EAAY,IAAID,EAAA,EACnB,WAAWF,EAAU,KAAK,QAAQ,QAAQ,EAC1C,UAAA,EACH,KAAK,WAAW,IAAI,KAAK,QAAQ,SAAUG,CAAS,EACpD,KAAK,WAAW,IAAM,KAAK,QAAQ,SAAS,WAAWH,CAAQ,EAC/D,MAAMI,EAAuB,CAAA,EAC7B,YAAK,WACF,iBAAiB,KAAK,QAAQ,SAAU,EAAI,EAC5C,QAASC,GAAM,CAERA,EAAE,OAAe,SAAS,UAI5BN,EAAM,SAASM,EAAE,OAAO,IAAI,GAI3BA,EAAE,OAAe,SAAS,wBAG/BD,EAAqB,KAAKC,CAAC,EAC7B,CAAC,EACID,EAAqB,SAAW,CACzC,CAEO,mCACLE,EACAC,EACA,CACID,EAAkB,eACpB,KAAK,yBAAyBA,EAAmBC,CAAqB,EAC7DA,EAAsB,cAC/B,KAAK,uBAAuBA,CAAqB,EAEjD,KAAK,wBAAwB,KAAK,QAAS,IAAI,CAEnD,CAEO,yBACLD,EACAC,EACA,CACA,GAAI,CAACD,EAAkB,eACrB,OAEF,MAAME,EAAqBD,EAAsB,oBAC/CD,EAAkB,+BAAA,CAA+B,EAEnD,GAAIE,EAAmB,OAAS,EAC9B,OAEF,MAAMC,EAAoBD,EAAmB,CAAC,EAC1C,KAAK,mBAAmBC,CAAiB,EAC3C,KAAK,wBAAwB,KAAK,QAAS,IAAI,EAE/C,KAAK,wBAAwB,KAAK,QAASA,CAAiB,CAEhE,CAEO,sBACLF,EACS,CACT,GAAI,CAACA,EAAsB,cACzB,MAAO,GAET,MAAMG,EAAWH,EAAsB,YAAA,EACvC,OAAIG,EAAS,SAAW,EACf,GAEFA,EACJ,IAAKC,GAAY,KAAK,mBAAmBA,CAAO,CAAC,EACjD,OACC,CAACC,EAAoBC,IACnBD,GAAsBC,CAAA,CAE9B,CAEO,0BAA0BH,EAAsC,CACrE,GAAIA,EAAS,SAAW,EACtB,MAAO,GAET,MAAMI,EAAU,IAAIC,EACdC,EAAS,IAAIC,EAAA,EAAU,iBAC3B,KAAK,QAAQ,iBACb,KAAK,QAAQ,kBAAA,EAETC,EAAO,IAAIjB,EACjBa,EAAQ,wBAAwBE,CAAM,EACtC,MAAMG,EAAwB/B,GAA+B,CAC3D,MAAMY,EAAWkB,EAAK,cAAc9B,CAAS,EAAE,UAAU,IAAIc,CAAS,EACtE,OAAOY,EAAQ,cAAcd,CAAQ,CACvC,EACA,OAAOU,EACJ,IAAKC,GAAYQ,EAAqBR,CAAO,CAAC,EAC9C,OACC,CAACC,EAAoBC,IACnBD,GAAsBC,CAAA,CAE9B,CAEO,uBAAuBN,EAA8C,CAC1E,GAAIA,EAAsB,kBACxB,OAEyB,KAAK,sBAC9BA,CAAA,EAKA,KAAK,wBAAwB,KAAK,QAAS,IAAI,EAF/C,KAAK,wBAAwB,KAAK,QAAS,CAAE,GAAI,GAAuB,CAI5E,CAEO,oCACLa,EACAhC,EACS,CACT,MAAMe,EAAY,IAAID,EAAA,EACnB,WAAWkB,EAAe,KAAK,QAAQ,QAAQ,EAC/C,UAAA,EACGC,EAAW,KAAK,QAAQ,SAAS,WAAWD,CAAa,EAE/D,YAAK,WAAW,IAAI,KAAK,QAAQ,SAAUjB,CAAS,EACpD,KAAK,WAAW,IAAMkB,EAAW,IAEX,KAAK,WAAW,gBAAgBjC,EAAW,EAAI,EAExB,OAAQkC,GAAiB,CACpE,MAAMC,EAAMD,EAAa,OAEzB,MACE,EAAAC,EAAI,OAAS,QACbA,EAAI,SAAS,wBACZA,EAAI,UAAY,CAACA,EAAI,SAAS,QAKnC,CAAC,EAE6B,OAAS,CACzC,CAEO,4BACLC,EACApC,EACa,CACb,MAAMqC,MAAuB,IAE7B,OAAAD,EAAe,QAAQ,CAAC,CAAE,GAAAE,EAAI,SAAAC,KAAe,CACvC,KAAK,oCAAoCA,EAAUvC,CAAS,GAC9DqC,EAAiB,IAAIC,CAAE,CAE3B,CAAC,EAEMD,CACT,CACF,CAAAG,EAAA,UAAA9C,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as f, H as o, J as u, q as h, N as m, U as p, W as d, V as l, X as _, t as y } from "./main-
|
|
1
|
+
import { F as f, H as o, J as u, q as h, N as m, U as p, W as d, V as l, X as _, t as y } from "./main-RpgY_kch.mjs";
|
|
2
2
|
class M {
|
|
3
3
|
constructor() {
|
|
4
4
|
this._nonTransparentComponent = null, this._raycaster = new f(), this._raycaster.near = 0.1, this._raycaster.layers.enable(o.OBJECT), this._raycaster.layers.enable(o.COMPONENT), this._raycaster.layers.enable(o.PREVIEW), this._raycaster.layers.enable(o.UI);
|
|
@@ -118,4 +118,4 @@ class M {
|
|
|
118
118
|
export {
|
|
119
119
|
M as default
|
|
120
120
|
};
|
|
121
|
-
//# sourceMappingURL=component-raycast-helper-
|
|
121
|
+
//# sourceMappingURL=component-raycast-helper-zAwc-AuF.mjs.map
|
package/lib/{component-raycast-helper-CuZdUtrH.mjs.map → component-raycast-helper-zAwc-AuF.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-raycast-helper-CuZdUtrH.mjs","sources":["../../packages/configurator-core/src/utils/component-raycast-helper.ts"],"sourcesContent":["import { type RoomleComponent } from '../../../common-core/src/webgl/roomle-component-factory';\nimport type ConfiguratorSceneEventHandler from '../webgl/configurator-scene-event-handler';\nimport type ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\nimport { throttle } from '../../../common-core/src/utils/common-utils';\nimport { LAYER } from '../../../common-core/src/webgl/layer';\nimport { transitionTransparencyOfMaterial } from '../../../common-core/src/utils/threejs-utils';\nimport type { Object3D, PerspectiveCamera } from 'three';\nimport {\n Box3,\n Frustum,\n Matrix4,\n Mesh,\n MeshStandardMaterial,\n Raycaster,\n Vector3,\n} from 'three';\n\nexport default class ComponentRaycastHelper {\n private _object: Object3D;\n private _camera: PerspectiveCamera;\n private _raycaster: Raycaster;\n\n private _nonTransparentComponent: RoomleComponent = null;\n\n constructor() {\n this._raycaster = new Raycaster();\n this._raycaster.near = 0.1;\n this._raycaster.layers.enable(LAYER.OBJECT);\n this._raycaster.layers.enable(LAYER.COMPONENT);\n this._raycaster.layers.enable(LAYER.PREVIEW);\n this._raycaster.layers.enable(LAYER.UI);\n }\n\n public init(object: Object3D, camera: PerspectiveCamera) {\n this._object = object;\n this._camera = camera;\n\n this.checkComponentVisibility = throttle(\n this.checkComponentVisibility,\n 100\n ).bind(this);\n this.checkPreviewVisibility = throttle(\n this.checkPreviewVisibility,\n 100\n ).bind(this);\n }\n\n public setCamera(camera: PerspectiveCamera) {\n this._camera = camera;\n }\n\n public setObject(object: Object3D) {\n this._object = object;\n }\n\n public changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void\n ) {\n if (component === this._nonTransparentComponent) {\n return;\n }\n this._nonTransparentComponent = component;\n this._changeMaterialsOnSelect(object, component, selected, callback);\n }\n\n private _changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void\n ) {\n if (object.children.length > 0) {\n for (const child of object.children) {\n const selectChild =\n (component && object.id === component.id) || selected;\n const isComponent = !(child instanceof Mesh);\n if (!child.userData.ignoreComponentRaycast) {\n this._changeMaterialsOnSelect(\n child,\n component,\n selectChild && isComponent ? false : selectChild,\n callback\n );\n }\n }\n }\n if (component) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial &&\n !object.userData.oldMaterial\n ) {\n object.userData.oldMaterial = object.material;\n object.material = object.material.clone();\n if (!selected) {\n transitionTransparencyOfMaterial(object, {\n opacity: 0.2,\n transparent: true,\n }).then(() => {\n callback?.();\n });\n }\n }\n } else if (object.userData.oldMaterial) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial\n ) {\n const { opacity, transparent } = object.userData.oldMaterial;\n transitionTransparencyOfMaterial(object, { opacity, transparent }).then(\n () => callback?.()\n );\n object.userData.oldMaterial = undefined;\n }\n }\n }\n\n public isComponentVisible(component: RoomleComponent): boolean {\n const uuids: string[] = [];\n component.traverse((object) => uuids.push(object.uuid));\n const position = new Box3()\n .setFromObject(component)\n .getCenter(new Vector3());\n const direction = new Vector3()\n .subVectors(position, this._camera.position)\n .normalize();\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = this._camera.position.distanceTo(position);\n const visibleIntersections = [];\n this._raycaster\n .intersectObjects(this._object.children, true)\n .forEach((i) => {\n // do not include invisible materials\n if (!(i.object as any).material.visible) {\n return;\n }\n // do not include the object itself\n if (uuids.includes(i.object.uuid)) {\n return;\n }\n // do not include objects which explicitly have the ignoreComponentRaycast flag\n if ((i.object as any).userData.ignoreComponentRaycast) {\n return;\n }\n visibleIntersections.push(i);\n });\n return visibleIntersections.length === 0;\n }\n\n public checkComponentAndPreviewVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel\n ) {\n if (sceneEventHandler.hasSelection()) {\n this.checkComponentVisibility(sceneEventHandler, configuratorViewModel);\n } else if (configuratorViewModel.hasPreviews()) {\n this.checkPreviewVisibility(configuratorViewModel);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public checkComponentVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel\n ) {\n if (!sceneEventHandler.hasSelection()) {\n return;\n }\n const selectedComponents = configuratorViewModel.getComponentsForIds(\n sceneEventHandler.getSelectedRuntimeComponentIds()\n );\n if (selectedComponents.length > 1) {\n return;\n }\n const selectedComponent = selectedComponents[0];\n if (this.isComponentVisible(selectedComponent)) {\n this.changeMaterialsOnSelect(this._object, null);\n } else {\n this.changeMaterialsOnSelect(this._object, selectedComponent);\n }\n }\n\n public areAllPreviewsVisible(\n configuratorViewModel: ConfiguratorViewModel\n ): boolean {\n if (!configuratorViewModel.hasPreviews()) {\n return true;\n }\n const previews = configuratorViewModel.getPreviews();\n if (previews.length === 0) {\n return true;\n }\n return previews\n .map((preview) => this.isComponentVisible(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible\n );\n }\n\n public areAllComponentsInFrustum(previews: RoomleComponent[]): boolean {\n if (previews.length === 0) {\n return true;\n }\n const frustum = new Frustum();\n const matrix = new Matrix4().multiplyMatrices(\n this._camera.projectionMatrix,\n this._camera.matrixWorldInverse\n );\n const box3 = new Box3();\n frustum.setFromProjectionMatrix(matrix);\n const isComponentInFrustum = (component: RoomleComponent) => {\n const position = box3.setFromObject(component).getCenter(new Vector3());\n return frustum.containsPoint(position);\n };\n return previews\n .map((preview) => isComponentInFrustum(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible\n );\n }\n\n public checkPreviewVisibility(configuratorViewModel: ConfiguratorViewModel) {\n if (configuratorViewModel.hasPreviewLines()) {\n return;\n }\n const allPreviewsVisible = this.areAllPreviewsVisible(\n configuratorViewModel\n );\n if (!allPreviewsVisible) {\n this.changeMaterialsOnSelect(this._object, { id: -1 } as RoomleComponent);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public isComponentMeasurementLabelOccluded(\n labelWorldPos: Vector3,\n component: RoomleComponent\n ): boolean {\n const direction = new Vector3()\n .subVectors(labelWorldPos, this._camera.position)\n .normalize();\n const distance = this._camera.position.distanceTo(labelWorldPos);\n\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = distance - 0.01;\n\n const intersections = this._raycaster.intersectObject(component, true);\n\n const occludingIntersections = intersections.filter((intersection) => {\n const obj = intersection.object as any;\n\n if (\n obj.type !== 'Mesh' ||\n obj.userData.ignoreComponentRaycast ||\n (obj.material && !obj.material.visible)\n )\n {return false;}\n\n return true;\n });\n\n return occludingIntersections.length > 0;\n }\n\n public checkMultipleLabelOcclusion(\n labelPositions: Array<{ id: string; worldPos: Vector3 }>,\n component: RoomleComponent\n ): Set<string> {\n const occludedLabelIds = new Set<string>();\n\n labelPositions.forEach(({ id, worldPos }) => {\n if (this.isComponentMeasurementLabelOccluded(worldPos, component)) {\n occludedLabelIds.add(id);\n }\n });\n\n return occludedLabelIds;\n }\n}\n"],"names":["ComponentRaycastHelper","Raycaster","LAYER","object","camera","throttle","component","selected","callback","child","selectChild","isComponent","Mesh","MeshStandardMaterial","transitionTransparencyOfMaterial","opacity","transparent","uuids","position","Box3","Vector3","direction","visibleIntersections","i","sceneEventHandler","configuratorViewModel","selectedComponents","selectedComponent","previews","preview","arePreviewsVisible","isPreviewVisible","frustum","Frustum","matrix","Matrix4","box3","isComponentInFrustum","labelWorldPos","distance","intersection","obj","labelPositions","occludedLabelIds","id","worldPos"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-raycast-helper-zAwc-AuF.mjs","sources":["../../packages/configurator-core/src/utils/component-raycast-helper.ts"],"sourcesContent":["import { type RoomleComponent } from '../../../common-core/src/webgl/roomle-component-factory';\nimport type ConfiguratorSceneEventHandler from '../webgl/configurator-scene-event-handler';\nimport type ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\nimport { throttle } from '../../../common-core/src/utils/common-utils';\nimport { LAYER } from '../../../common-core/src/webgl/layer';\nimport { transitionTransparencyOfMaterial } from '../../../common-core/src/utils/threejs-utils';\nimport type { Object3D, PerspectiveCamera } from 'three';\nimport {\n Box3,\n Frustum,\n Matrix4,\n Mesh,\n MeshStandardMaterial,\n Raycaster,\n Vector3,\n} from 'three';\n\nexport default class ComponentRaycastHelper {\n private _object: Object3D;\n private _camera: PerspectiveCamera;\n private _raycaster: Raycaster;\n\n private _nonTransparentComponent: RoomleComponent = null;\n\n constructor() {\n this._raycaster = new Raycaster();\n this._raycaster.near = 0.1;\n this._raycaster.layers.enable(LAYER.OBJECT);\n this._raycaster.layers.enable(LAYER.COMPONENT);\n this._raycaster.layers.enable(LAYER.PREVIEW);\n this._raycaster.layers.enable(LAYER.UI);\n }\n\n public init(object: Object3D, camera: PerspectiveCamera) {\n this._object = object;\n this._camera = camera;\n\n this.checkComponentVisibility = throttle(\n this.checkComponentVisibility,\n 100\n ).bind(this);\n this.checkPreviewVisibility = throttle(\n this.checkPreviewVisibility,\n 100\n ).bind(this);\n }\n\n public setCamera(camera: PerspectiveCamera) {\n this._camera = camera;\n }\n\n public setObject(object: Object3D) {\n this._object = object;\n }\n\n public changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void\n ) {\n if (component === this._nonTransparentComponent) {\n return;\n }\n this._nonTransparentComponent = component;\n this._changeMaterialsOnSelect(object, component, selected, callback);\n }\n\n private _changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void\n ) {\n if (object.children.length > 0) {\n for (const child of object.children) {\n const selectChild =\n (component && object.id === component.id) || selected;\n const isComponent = !(child instanceof Mesh);\n if (!child.userData.ignoreComponentRaycast) {\n this._changeMaterialsOnSelect(\n child,\n component,\n selectChild && isComponent ? false : selectChild,\n callback\n );\n }\n }\n }\n if (component) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial &&\n !object.userData.oldMaterial\n ) {\n object.userData.oldMaterial = object.material;\n object.material = object.material.clone();\n if (!selected) {\n transitionTransparencyOfMaterial(object, {\n opacity: 0.2,\n transparent: true,\n }).then(() => {\n callback?.();\n });\n }\n }\n } else if (object.userData.oldMaterial) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial\n ) {\n const { opacity, transparent } = object.userData.oldMaterial;\n transitionTransparencyOfMaterial(object, { opacity, transparent }).then(\n () => callback?.()\n );\n object.userData.oldMaterial = undefined;\n }\n }\n }\n\n public isComponentVisible(component: RoomleComponent): boolean {\n const uuids: string[] = [];\n component.traverse((object) => uuids.push(object.uuid));\n const position = new Box3()\n .setFromObject(component)\n .getCenter(new Vector3());\n const direction = new Vector3()\n .subVectors(position, this._camera.position)\n .normalize();\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = this._camera.position.distanceTo(position);\n const visibleIntersections = [];\n this._raycaster\n .intersectObjects(this._object.children, true)\n .forEach((i) => {\n // do not include invisible materials\n if (!(i.object as any).material.visible) {\n return;\n }\n // do not include the object itself\n if (uuids.includes(i.object.uuid)) {\n return;\n }\n // do not include objects which explicitly have the ignoreComponentRaycast flag\n if ((i.object as any).userData.ignoreComponentRaycast) {\n return;\n }\n visibleIntersections.push(i);\n });\n return visibleIntersections.length === 0;\n }\n\n public checkComponentAndPreviewVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel\n ) {\n if (sceneEventHandler.hasSelection()) {\n this.checkComponentVisibility(sceneEventHandler, configuratorViewModel);\n } else if (configuratorViewModel.hasPreviews()) {\n this.checkPreviewVisibility(configuratorViewModel);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public checkComponentVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel\n ) {\n if (!sceneEventHandler.hasSelection()) {\n return;\n }\n const selectedComponents = configuratorViewModel.getComponentsForIds(\n sceneEventHandler.getSelectedRuntimeComponentIds()\n );\n if (selectedComponents.length > 1) {\n return;\n }\n const selectedComponent = selectedComponents[0];\n if (this.isComponentVisible(selectedComponent)) {\n this.changeMaterialsOnSelect(this._object, null);\n } else {\n this.changeMaterialsOnSelect(this._object, selectedComponent);\n }\n }\n\n public areAllPreviewsVisible(\n configuratorViewModel: ConfiguratorViewModel\n ): boolean {\n if (!configuratorViewModel.hasPreviews()) {\n return true;\n }\n const previews = configuratorViewModel.getPreviews();\n if (previews.length === 0) {\n return true;\n }\n return previews\n .map((preview) => this.isComponentVisible(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible\n );\n }\n\n public areAllComponentsInFrustum(previews: RoomleComponent[]): boolean {\n if (previews.length === 0) {\n return true;\n }\n const frustum = new Frustum();\n const matrix = new Matrix4().multiplyMatrices(\n this._camera.projectionMatrix,\n this._camera.matrixWorldInverse\n );\n const box3 = new Box3();\n frustum.setFromProjectionMatrix(matrix);\n const isComponentInFrustum = (component: RoomleComponent) => {\n const position = box3.setFromObject(component).getCenter(new Vector3());\n return frustum.containsPoint(position);\n };\n return previews\n .map((preview) => isComponentInFrustum(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible\n );\n }\n\n public checkPreviewVisibility(configuratorViewModel: ConfiguratorViewModel) {\n if (configuratorViewModel.hasPreviewLines()) {\n return;\n }\n const allPreviewsVisible = this.areAllPreviewsVisible(\n configuratorViewModel\n );\n if (!allPreviewsVisible) {\n this.changeMaterialsOnSelect(this._object, { id: -1 } as RoomleComponent);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public isComponentMeasurementLabelOccluded(\n labelWorldPos: Vector3,\n component: RoomleComponent\n ): boolean {\n const direction = new Vector3()\n .subVectors(labelWorldPos, this._camera.position)\n .normalize();\n const distance = this._camera.position.distanceTo(labelWorldPos);\n\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = distance - 0.01;\n\n const intersections = this._raycaster.intersectObject(component, true);\n\n const occludingIntersections = intersections.filter((intersection) => {\n const obj = intersection.object as any;\n\n if (\n obj.type !== 'Mesh' ||\n obj.userData.ignoreComponentRaycast ||\n (obj.material && !obj.material.visible)\n )\n {return false;}\n\n return true;\n });\n\n return occludingIntersections.length > 0;\n }\n\n public checkMultipleLabelOcclusion(\n labelPositions: Array<{ id: string; worldPos: Vector3 }>,\n component: RoomleComponent\n ): Set<string> {\n const occludedLabelIds = new Set<string>();\n\n labelPositions.forEach(({ id, worldPos }) => {\n if (this.isComponentMeasurementLabelOccluded(worldPos, component)) {\n occludedLabelIds.add(id);\n }\n });\n\n return occludedLabelIds;\n }\n}\n"],"names":["ComponentRaycastHelper","Raycaster","LAYER","object","camera","throttle","component","selected","callback","child","selectChild","isComponent","Mesh","MeshStandardMaterial","transitionTransparencyOfMaterial","opacity","transparent","uuids","position","Box3","Vector3","direction","visibleIntersections","i","sceneEventHandler","configuratorViewModel","selectedComponents","selectedComponent","previews","preview","arePreviewsVisible","isPreviewVisible","frustum","Frustum","matrix","Matrix4","box3","isComponentInFrustum","labelWorldPos","distance","intersection","obj","labelPositions","occludedLabelIds","id","worldPos"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { D as e, x as s, a as i, c, y as l, b as a, z as p, R as g, K as u, A as m, C, B as f } from "./main-
|
|
2
|
-
import { C as d, a as h } from "./camera-behaviour-
|
|
3
|
-
import { S as w } from "./script-loader-
|
|
4
|
-
import A from "./component-raycast-helper-
|
|
5
|
-
import { C as R, a as _ } from "./configurator-scene-manager-
|
|
1
|
+
import { D as e, x as s, a as i, c, y as l, b as a, z as p, R as g, K as u, A as m, C, B as f } from "./main-RpgY_kch.mjs";
|
|
2
|
+
import { C as d, a as h } from "./camera-behaviour-DWkBHxkk.mjs";
|
|
3
|
+
import { S as w } from "./script-loader-CHolkWhE.mjs";
|
|
4
|
+
import A from "./component-raycast-helper-zAwc-AuF.mjs";
|
|
5
|
+
import { C as R, a as _ } from "./configurator-scene-manager-DnZvFw0N.mjs";
|
|
6
6
|
const k = [
|
|
7
7
|
new e("logger", s),
|
|
8
8
|
new e("rapi-access", i),
|
|
@@ -62,4 +62,4 @@ class y extends p {
|
|
|
62
62
|
export {
|
|
63
63
|
y as Configurator
|
|
64
64
|
};
|
|
65
|
-
//# sourceMappingURL=configurator-
|
|
65
|
+
//# sourceMappingURL=configurator-DDhzCgxy.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurator-
|
|
1
|
+
{"version":3,"file":"configurator-DDhzCgxy.mjs","sources":["../../packages/configurator-core/src/utils/injectables.ts","../../packages/configurator-core/src/configurator.ts"],"sourcesContent":["import CameraControl from '../../../common-core/src/cameracontrol/camera-control';\nimport CameraControl3D from '../../../common-core/src/cameracontrol/camera-control-3d';\nimport ScriptLoader from '../../../common-core/src/script-loader';\nimport RapiAccess from '../../../common-core/src/rapi-access';\nimport Logger from '../../../common-core/src/logger';\nimport DataSyncer from '../../../common-core/src/services/data-syncer';\nimport {\n DependencyInjectionAssignment,\n DI_TYPE,\n} from '../../../common-core/src/di/container';\nimport ComponentRaycastHelper from './component-raycast-helper';\nimport ConfiguratorSceneManager from '../webgl/configurator-scene-manager';\nimport ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\nimport GlobalInitData from '../../../common-core/src/utils/global-init-data';\n\nexport const INJECTABLES: DependencyInjectionAssignment[] = [\n new DependencyInjectionAssignment('logger', Logger),\n new DependencyInjectionAssignment('rapi-access', RapiAccess),\n new DependencyInjectionAssignment('script-loader', ScriptLoader),\n new DependencyInjectionAssignment('camera-control-3d', CameraControl3D),\n new DependencyInjectionAssignment('camera-control', CameraControl),\n new DependencyInjectionAssignment('global-init-data', GlobalInitData),\n new DependencyInjectionAssignment('data-syncer', DataSyncer),\n new DependencyInjectionAssignment(\n 'configurator-scene-manager',\n ConfiguratorSceneManager,\n DI_TYPE.CONTEXT\n ),\n new DependencyInjectionAssignment(\n 'configurator-view-model',\n ConfiguratorViewModel,\n DI_TYPE.CONTEXT\n ),\n new DependencyInjectionAssignment(\n 'component-raycast-helper',\n ComponentRaycastHelper,\n DI_TYPE.GLOBAL\n ),\n];\n","import './utils/global-definitions';\n\nimport Main, { BASE_CONTEXT } from '../../common-core/src/main';\nimport type { AppState } from '../../common-core/src/utils/app-context';\nimport AppContext from '../../common-core/src/utils/app-context';\nimport { INJECTABLES } from './utils/injectables';\nimport RoomleDependencyInjection from '../../common-core/src/di/roomle-dependency-injection';\nimport type ScriptLoader from '../../common-core/src/script-loader';\nimport type RapiAccess from '../../common-core/src/rapi-access';\nimport type Logger from '../../common-core/src/logger';\nimport type DomHelper from '../../common-core/src/utils/dom-helper';\nimport type ConfiguratorSceneManager from './webgl/configurator-scene-manager';\nimport RoomleConfigurator from './roomle-configurator';\nimport type PlannerKernelAccess from '../../planner-core/src/services/planner-kernel-access';\nimport { KERNEL_TYPE } from '../../common-core/src/services/common-kernel-access';\n\nexport class Configurator extends Main {\n private _configurator: RoomleConfigurator;\n\n protected setupDependencies(): void {\n RoomleDependencyInjection.setup(INJECTABLES);\n // This needs to be done so that subscribe to events is done\n const plannerKernelAccess = this.lookup<PlannerKernelAccess>(\n 'planner-kernel-access',\n this._context\n );\n plannerKernelAccess.init(KERNEL_TYPE.CONFIGURATOR);\n this.lookup<RapiAccess>('rapi-access', this._context);\n this.lookup<ScriptLoader>('script-loader', this._context);\n this.lookup<Logger>('logger', this._context);\n }\n\n protected cleanUpGlobals(): void {\n delete window.RoomleConfigurator;\n }\n\n protected cleanUpDependencies(): void {\n const scriptLoader = this.lookup<ScriptLoader>('script-loader');\n const rapiAccess = this.lookup<RapiAccess>('rapi-access');\n const domHelper = this.lookup<DomHelper>('dom-helper');\n const sceneManager = this.lookup<ConfiguratorSceneManager>(\n 'configurator-scene-manager'\n );\n\n if (scriptLoader) {\n scriptLoader.cleanUp();\n }\n\n if (rapiAccess) {\n rapiAccess.cleanUp();\n }\n\n if (domHelper) {\n //domHelper.cleanUp();\n }\n\n if (sceneManager) {\n sceneManager.cleanUp();\n }\n }\n\n protected setupGlobals(appState?: AppState): void {\n const { kernelInstance, kernelContainer, planObjectId } = appState || {};\n AppContext.init({ kernelInstance, kernelContainer, planObjectId });\n }\n\n public getApi(): RoomleConfigurator {\n return this._configurator;\n }\n\n protected async bootFinished(): Promise<void> {\n this._configurator = new RoomleConfigurator(this._context);\n this._configurator.getMain = () => {\n return this;\n };\n\n if (!window.RoomleConfigurator) {\n window.RoomleConfigurator = this._configurator;\n }\n }\n\n protected getContextName(): string {\n return BASE_CONTEXT.CONFIGURATOR;\n }\n}\n"],"names":["INJECTABLES","DependencyInjectionAssignment","Logger","RapiAccess","ScriptLoader","CameraControl3D","CameraControl","GlobalInitData","DataSyncer","ConfiguratorSceneManager","DI_TYPE","ConfiguratorViewModel","ComponentRaycastHelper","Configurator","Main","RoomleDependencyInjection","KERNEL_TYPE","scriptLoader","rapiAccess","sceneManager","appState","kernelInstance","kernelContainer","planObjectId","AppContext","RoomleConfigurator","BASE_CONTEXT"],"mappings":";;;;;AAeO,MAAMA,IAA+C;AAAA,EAC1D,IAAIC,EAA8B,UAAUC,CAAM;AAAA,EAClD,IAAID,EAA8B,eAAeE,CAAU;AAAA,EAC3D,IAAIF,EAA8B,iBAAiBG,CAAY;AAAA,EAC/D,IAAIH,EAA8B,qBAAqBI,CAAe;AAAA,EACtE,IAAIJ,EAA8B,kBAAkBK,CAAa;AAAA,EACjE,IAAIL,EAA8B,oBAAoBM,CAAc;AAAA,EACpE,IAAIN,EAA8B,eAAeO,CAAU;AAAA,EAC3D,IAAIP;AAAA,IACF;AAAA,IACAQ;AAAA,IACAC,EAAQ;AAAA,EAAA;AAAA,EAEV,IAAIT;AAAA,IACF;AAAA,IACAU;AAAA,IACAD,EAAQ;AAAA,EAAA;AAAA,EAEV,IAAIT;AAAA,IACF;AAAA,IACAW;AAAA,IACAF,EAAQ;AAAA,EAAA;AAEZ;ACtBO,MAAMG,UAAqBC,EAAK;AAAA,EAG3B,oBAA0B;AAClC,IAAAC,EAA0B,MAAMf,CAAW,GAEf,KAAK;AAAA,MAC/B;AAAA,MACA,KAAK;AAAA,IAAA,EAEa,KAAKgB,EAAY,YAAY,GACjD,KAAK,OAAmB,eAAe,KAAK,QAAQ,GACpD,KAAK,OAAqB,iBAAiB,KAAK,QAAQ,GACxD,KAAK,OAAe,UAAU,KAAK,QAAQ;AAAA,EAC7C;AAAA,EAEU,iBAAuB;AAC/B,WAAO,OAAO;AAAA,EAChB;AAAA,EAEU,sBAA4B;AACpC,UAAMC,IAAe,KAAK,OAAqB,eAAe,GACxDC,IAAa,KAAK,OAAmB,aAAa;AACtC,SAAK,OAAkB,YAAY;AACrD,UAAMC,IAAe,KAAK;AAAA,MACxB;AAAA,IAAA;AAGF,IAAIF,KACFA,EAAa,QAAA,GAGXC,KACFA,EAAW,QAAA,GAOTC,KACFA,EAAa,QAAA;AAAA,EAEjB;AAAA,EAEU,aAAaC,GAA2B;AAChD,UAAM,EAAE,gBAAAC,GAAgB,iBAAAC,GAAiB,cAAAC,EAAA,IAAiBH,KAAY,CAAA;AACtE,IAAAI,EAAW,KAAK,EAAE,gBAAAH,GAAgB,iBAAAC,GAAiB,cAAAC,GAAc;AAAA,EACnE;AAAA,EAEO,SAA6B;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAgB,eAA8B;AAC5C,SAAK,gBAAgB,IAAIE,EAAmB,KAAK,QAAQ,GACzD,KAAK,cAAc,UAAU,MACpB,MAGJ,OAAO,uBACV,OAAO,qBAAqB,KAAK;AAAA,EAErC;AAAA,EAEU,iBAAyB;AACjC,WAAOC,EAAa;AAAA,EACtB;AACF;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["./main-
|
|
2
|
-
//# sourceMappingURL=configurator-
|
|
1
|
+
System.register(["./main-DVWEbQdM.js","./camera-behaviour-CzgZxW1D.js","./script-loader-BZOMZ1AI.js","./component-raycast-helper-DvNtWlR5.js","./configurator-scene-manager-Bxdyg2zz.js"],function(T,y){"use strict";var n,i,s,c,p,o,l,g,u,C,h,f,w,A,R,d,_,k;return{setters:[e=>{n=e.D,i=e.x,s=e.a,c=e.c,p=e.y,o=e.b,l=e.z,g=e.R,u=e.K,C=e.A,h=e.C,f=e.B},e=>{w=e.C,A=e.a},e=>{R=e.S},e=>{d=e.default},e=>{_=e.C,k=e.a}],execute:function(){const e=[new n("logger",i),new n("rapi-access",s),new n("script-loader",R),new n("camera-control-3d",w),new n("camera-control",A),new n("global-init-data",c),new n("data-syncer",p),new n("configurator-scene-manager",_,o.CONTEXT),new n("configurator-view-model",k,o.CONTEXT),new n("component-raycast-helper",d,o.GLOBAL)];class m extends l{setupDependencies(){g.setup(e),this.lookup("planner-kernel-access",this._context).init(u.CONFIGURATOR),this.lookup("rapi-access",this._context),this.lookup("script-loader",this._context),this.lookup("logger",this._context)}cleanUpGlobals(){delete window.RoomleConfigurator}cleanUpDependencies(){const t=this.lookup("script-loader"),r=this.lookup("rapi-access");this.lookup("dom-helper");const a=this.lookup("configurator-scene-manager");t&&t.cleanUp(),r&&r.cleanUp(),a&&a.cleanUp()}setupGlobals(t){const{kernelInstance:r,kernelContainer:a,planObjectId:x}=t||{};C.init({kernelInstance:r,kernelContainer:a,planObjectId:x})}getApi(){return this._configurator}async bootFinished(){this._configurator=new h(this._context),this._configurator.getMain=()=>this,window.RoomleConfigurator||(window.RoomleConfigurator=this._configurator)}getContextName(){return f.CONFIGURATOR}}T("Configurator",m)}}});
|
|
2
|
+
//# sourceMappingURL=configurator-DJnpG8CG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurator-
|
|
1
|
+
{"version":3,"file":"configurator-DJnpG8CG.js","sources":["../../packages/configurator-core/src/utils/injectables.ts","../../packages/configurator-core/src/configurator.ts"],"sourcesContent":["import CameraControl from '../../../common-core/src/cameracontrol/camera-control';\nimport CameraControl3D from '../../../common-core/src/cameracontrol/camera-control-3d';\nimport ScriptLoader from '../../../common-core/src/script-loader';\nimport RapiAccess from '../../../common-core/src/rapi-access';\nimport Logger from '../../../common-core/src/logger';\nimport DataSyncer from '../../../common-core/src/services/data-syncer';\nimport {\n DependencyInjectionAssignment,\n DI_TYPE,\n} from '../../../common-core/src/di/container';\nimport ComponentRaycastHelper from './component-raycast-helper';\nimport ConfiguratorSceneManager from '../webgl/configurator-scene-manager';\nimport ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\nimport GlobalInitData from '../../../common-core/src/utils/global-init-data';\n\nexport const INJECTABLES: DependencyInjectionAssignment[] = [\n new DependencyInjectionAssignment('logger', Logger),\n new DependencyInjectionAssignment('rapi-access', RapiAccess),\n new DependencyInjectionAssignment('script-loader', ScriptLoader),\n new DependencyInjectionAssignment('camera-control-3d', CameraControl3D),\n new DependencyInjectionAssignment('camera-control', CameraControl),\n new DependencyInjectionAssignment('global-init-data', GlobalInitData),\n new DependencyInjectionAssignment('data-syncer', DataSyncer),\n new DependencyInjectionAssignment(\n 'configurator-scene-manager',\n ConfiguratorSceneManager,\n DI_TYPE.CONTEXT\n ),\n new DependencyInjectionAssignment(\n 'configurator-view-model',\n ConfiguratorViewModel,\n DI_TYPE.CONTEXT\n ),\n new DependencyInjectionAssignment(\n 'component-raycast-helper',\n ComponentRaycastHelper,\n DI_TYPE.GLOBAL\n ),\n];\n","import './utils/global-definitions';\n\nimport Main, { BASE_CONTEXT } from '../../common-core/src/main';\nimport type { AppState } from '../../common-core/src/utils/app-context';\nimport AppContext from '../../common-core/src/utils/app-context';\nimport { INJECTABLES } from './utils/injectables';\nimport RoomleDependencyInjection from '../../common-core/src/di/roomle-dependency-injection';\nimport type ScriptLoader from '../../common-core/src/script-loader';\nimport type RapiAccess from '../../common-core/src/rapi-access';\nimport type Logger from '../../common-core/src/logger';\nimport type DomHelper from '../../common-core/src/utils/dom-helper';\nimport type ConfiguratorSceneManager from './webgl/configurator-scene-manager';\nimport RoomleConfigurator from './roomle-configurator';\nimport type PlannerKernelAccess from '../../planner-core/src/services/planner-kernel-access';\nimport { KERNEL_TYPE } from '../../common-core/src/services/common-kernel-access';\n\nexport class Configurator extends Main {\n private _configurator: RoomleConfigurator;\n\n protected setupDependencies(): void {\n RoomleDependencyInjection.setup(INJECTABLES);\n // This needs to be done so that subscribe to events is done\n const plannerKernelAccess = this.lookup<PlannerKernelAccess>(\n 'planner-kernel-access',\n this._context\n );\n plannerKernelAccess.init(KERNEL_TYPE.CONFIGURATOR);\n this.lookup<RapiAccess>('rapi-access', this._context);\n this.lookup<ScriptLoader>('script-loader', this._context);\n this.lookup<Logger>('logger', this._context);\n }\n\n protected cleanUpGlobals(): void {\n delete window.RoomleConfigurator;\n }\n\n protected cleanUpDependencies(): void {\n const scriptLoader = this.lookup<ScriptLoader>('script-loader');\n const rapiAccess = this.lookup<RapiAccess>('rapi-access');\n const domHelper = this.lookup<DomHelper>('dom-helper');\n const sceneManager = this.lookup<ConfiguratorSceneManager>(\n 'configurator-scene-manager'\n );\n\n if (scriptLoader) {\n scriptLoader.cleanUp();\n }\n\n if (rapiAccess) {\n rapiAccess.cleanUp();\n }\n\n if (domHelper) {\n //domHelper.cleanUp();\n }\n\n if (sceneManager) {\n sceneManager.cleanUp();\n }\n }\n\n protected setupGlobals(appState?: AppState): void {\n const { kernelInstance, kernelContainer, planObjectId } = appState || {};\n AppContext.init({ kernelInstance, kernelContainer, planObjectId });\n }\n\n public getApi(): RoomleConfigurator {\n return this._configurator;\n }\n\n protected async bootFinished(): Promise<void> {\n this._configurator = new RoomleConfigurator(this._context);\n this._configurator.getMain = () => {\n return this;\n };\n\n if (!window.RoomleConfigurator) {\n window.RoomleConfigurator = this._configurator;\n }\n }\n\n protected getContextName(): string {\n return BASE_CONTEXT.CONFIGURATOR;\n }\n}\n"],"names":["INJECTABLES","DependencyInjectionAssignment","Logger","RapiAccess","ScriptLoader","CameraControl3D","CameraControl","GlobalInitData","DataSyncer","ConfiguratorSceneManager","DI_TYPE","ConfiguratorViewModel","ComponentRaycastHelper","Configurator","Main","RoomleDependencyInjection","KERNEL_TYPE","scriptLoader","rapiAccess","sceneManager","appState","kernelInstance","kernelContainer","planObjectId","AppContext","RoomleConfigurator","BASE_CONTEXT","exports"],"mappings":"4aAeO,MAAMA,EAA+C,CAC1D,IAAIC,EAA8B,SAAUC,CAAM,EAClD,IAAID,EAA8B,cAAeE,CAAU,EAC3D,IAAIF,EAA8B,gBAAiBG,CAAY,EAC/D,IAAIH,EAA8B,oBAAqBI,CAAe,EACtE,IAAIJ,EAA8B,iBAAkBK,CAAa,EACjE,IAAIL,EAA8B,mBAAoBM,CAAc,EACpE,IAAIN,EAA8B,cAAeO,CAAU,EAC3D,IAAIP,EACF,6BACAQ,EACAC,EAAQ,OAAA,EAEV,IAAIT,EACF,0BACAU,EACAD,EAAQ,OAAA,EAEV,IAAIT,EACF,2BACAW,EACAF,EAAQ,MAAA,CAEZ,ECtBO,MAAMG,UAAqBC,CAAK,CAG3B,mBAA0B,CAClCC,EAA0B,MAAMf,CAAW,EAEf,KAAK,OAC/B,wBACA,KAAK,QAAA,EAEa,KAAKgB,EAAY,YAAY,EACjD,KAAK,OAAmB,cAAe,KAAK,QAAQ,EACpD,KAAK,OAAqB,gBAAiB,KAAK,QAAQ,EACxD,KAAK,OAAe,SAAU,KAAK,QAAQ,CAC7C,CAEU,gBAAuB,CAC/B,OAAO,OAAO,kBAChB,CAEU,qBAA4B,CACpC,MAAMC,EAAe,KAAK,OAAqB,eAAe,EACxDC,EAAa,KAAK,OAAmB,aAAa,EACtC,KAAK,OAAkB,YAAY,EACrD,MAAMC,EAAe,KAAK,OACxB,4BAAA,EAGEF,GACFA,EAAa,QAAA,EAGXC,GACFA,EAAW,QAAA,EAOTC,GACFA,EAAa,QAAA,CAEjB,CAEU,aAAaC,EAA2B,CAChD,KAAM,CAAE,eAAAC,EAAgB,gBAAAC,EAAiB,aAAAC,CAAA,EAAiBH,GAAY,CAAA,EACtEI,EAAW,KAAK,CAAE,eAAAH,EAAgB,gBAAAC,EAAiB,aAAAC,EAAc,CACnE,CAEO,QAA6B,CAClC,OAAO,KAAK,aACd,CAEA,MAAgB,cAA8B,CAC5C,KAAK,cAAgB,IAAIE,EAAmB,KAAK,QAAQ,EACzD,KAAK,cAAc,QAAU,IACpB,KAGJ,OAAO,qBACV,OAAO,mBAAqB,KAAK,cAErC,CAEU,gBAAyB,CACjC,OAAOC,EAAa,YACtB,CACF,CAAAC,EAAA,eAAAd,CAAA"}
|