@roomle/web-sdk 3.9.0 → 3.10.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ConfiguratorKernel.wasm +0 -0
- package/lib/RoomleCore.js +5 -5
- package/lib/RoomleCore.wasm +0 -0
- package/lib/RoomleToolsCore.wasm +0 -0
- package/lib/{api-52cOotqw.mjs → api-BXU3pZnX.mjs} +10 -10
- package/lib/{api-52cOotqw.mjs.map → api-BXU3pZnX.mjs.map} +1 -1
- package/lib/asset-loader.worker-C911tbNL.mjs.map +1 -1
- package/lib/budgeteer.sw-D3VxiASa.mjs.map +1 -1
- package/lib/{component-dimensioning-12aJsCzQ.mjs → component-dimensioning-5iIw1f_3.mjs} +2 -2
- package/lib/{component-dimensioning-12aJsCzQ.mjs.map → component-dimensioning-5iIw1f_3.mjs.map} +1 -1
- package/lib/{component-raycast-helper-CcrmOq29.mjs → component-raycast-helper-O27_buEg.mjs} +2 -2
- package/lib/{component-raycast-helper-CcrmOq29.mjs.map → component-raycast-helper-O27_buEg.mjs.map} +1 -1
- package/lib/configurator-BIyxKNI0.mjs +2 -0
- package/lib/configurator-BwxEIDv7.mjs +45 -0
- package/lib/{configurator-D3ZKy6bf.mjs.map → configurator-BwxEIDv7.mjs.map} +1 -1
- package/lib/{glb-viewer-BJJ9OIlH.mjs → glb-viewer-C0Et5SO6.mjs} +17 -17
- package/lib/{glb-viewer-BJJ9OIlH.mjs.map → glb-viewer-C0Et5SO6.mjs.map} +1 -1
- package/lib/glb-viewer-DfMzLkqg.mjs +2 -0
- package/lib/{highlight-coordinator-BuFleG2q.mjs → highlight-coordinator-DdQ8yNjO.mjs} +2 -2
- package/lib/{highlight-coordinator-BuFleG2q.mjs.map → highlight-coordinator-DdQ8yNjO.mjs.map} +1 -1
- package/lib/{homag-intelligence-BxpMWKLs.mjs → homag-intelligence-DrKayEjK.mjs} +4 -4
- package/lib/homag-intelligence-DrKayEjK.mjs.map +1 -0
- package/lib/kernel-C7YDLxq8.mjs.map +1 -1
- package/lib/{main-QTvbXAvy.mjs → main-D2BulNeN.mjs} +5039 -4351
- package/lib/main-D2BulNeN.mjs.map +1 -0
- package/lib/{material-viewer-BPcCfvCC.mjs → material-viewer-CZQwo8Nc.mjs} +21 -21
- package/lib/material-viewer-CZQwo8Nc.mjs.map +1 -0
- package/lib/packages-BtLLQZLz.mjs +4 -0
- package/lib/planner-BF94NrwH.mjs +2 -0
- package/lib/planner-OgIPgZ1m.mjs +44 -0
- package/lib/{planner-C1-sOmHY.mjs.map → planner-OgIPgZ1m.mjs.map} +1 -1
- package/lib/roomle-headless.d.ts +521 -146
- package/lib/roomle-headless.js +45 -45
- package/lib/roomle-headless.js.map +1 -1
- package/lib/roomle-sdk.d.ts +521 -146
- package/lib/roomle-sdk.js +8 -8
- package/lib/{roomle-webgpu-renderer-BrZZeAGw.mjs → roomle-webgpu-renderer-5-aG3CMs.mjs} +2 -2
- package/lib/{roomle-webgpu-renderer-BrZZeAGw.mjs.map → roomle-webgpu-renderer-5-aG3CMs.mjs.map} +1 -1
- package/lib/{scene-renderer-3nhM4cEu.mjs → scene-renderer-DvXjoKHZ.mjs} +2 -2
- package/lib/{scene-renderer-3nhM4cEu.mjs.map → scene-renderer-DvXjoKHZ.mjs.map} +1 -1
- package/lib/{script-loader-3LiaLeLT.mjs → script-loader-CScqyQhc.mjs} +2 -2
- package/lib/{script-loader-3LiaLeLT.mjs.map → script-loader-CScqyQhc.mjs.map} +1 -1
- package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/package.json +1 -1
- package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.d.ts +36 -24
- package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.js.map +1 -1
- package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
- package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.js +5 -5
- package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
- package/lib/{stats-helper-COC7Moh0.mjs → stats-helper-BYi5TI_H.mjs} +2 -2
- package/lib/{stats-helper-COC7Moh0.mjs.map → stats-helper-BYi5TI_H.mjs.map} +1 -1
- package/lib/{threejs-utils-CElderZe.mjs → threejs-utils-C4J_TZ0o.mjs} +61 -57
- package/lib/threejs-utils-C4J_TZ0o.mjs.map +1 -0
- package/lib/{tools-core-mkA4m80O.mjs → tools-core-BCkbEbim.mjs} +5 -5
- package/lib/{tools-core-mkA4m80O.mjs.map → tools-core-BCkbEbim.mjs.map} +1 -1
- package/package.json +1 -1
- package/lib/configurator-CarZpfPv.mjs +0 -2
- package/lib/configurator-D3ZKy6bf.mjs +0 -45
- package/lib/glb-viewer-CJ7BPqI-.mjs +0 -2
- package/lib/homag-intelligence-BxpMWKLs.mjs.map +0 -1
- package/lib/main-QTvbXAvy.mjs.map +0 -1
- package/lib/material-viewer-BPcCfvCC.mjs.map +0 -1
- package/lib/packages-JQ2uWInj.mjs +0 -4
- package/lib/planner-C1-sOmHY.mjs +0 -44
- package/lib/planner-CnRaQM_h.mjs +0 -2
- package/lib/threejs-utils-CElderZe.mjs.map +0 -1
|
Binary file
|
package/lib/RoomleCore.js
CHANGED
|
@@ -37,19 +37,19 @@ e?a.call(this):this.Ba?gb(d.ha.ua,{ka:d,ja:e,ra:this,oa:b}):gb(d.ha.ua,{ka:d,ja:
|
|
|
37
37
|
var kb,U,Zb,$b,ac,xa,qa,ib,bc={H:()=>wa(""),X:b=>{var a=Ia[b];delete Ia[b];var c=a.Ea,d=a.sa,e=a.Ga,g=e.map(f=>f.Sa).concat(e.map(f=>f.Ya));M([b],g,f=>{var h={},k,m;for([k,m]of e.entries()){const l=f[k],p=m.Qa,q=m.Ra,t=f[k+e.length],v=m.Xa,z=m.Za;h[m.Na]={read:E=>l.ia(p(q,E)),write:(E,I)=>{var A=[];v(z,E,t.la(A,I));F(A)},optional:l.optional}}return[{name:a.name,ia:l=>{var p={},q;for(q in h)p[q]=h[q].read(l);d(l);return p},la:(l,p)=>{for(var q in h)if(!(q in p||h[q].optional))throw new TypeError(`Missing field: "${q}"`);
|
|
38
38
|
var t=c();for(q in h)h[q].write(t,p[q]);null!==l&&l.push(d,t);return t},qa:G,na:d}]})},B:(b,a,c,d,e)=>{a=N(a);d=0n===d;let g=f=>f;if(d){const f=8*c;g=h=>BigInt.asUintN(f,h);e=g(e)}L(b,{name:a,ia:g,la:(f,h)=>{"number"==typeof h&&(h=BigInt(h));return h},qa:Oa(a,c,!d),na:null})},T:(b,a,c,d)=>{a=N(a);L(b,{name:a,ia:function(e){return!!e},la:function(e,g){return g?c:d},qa:function(e){return this.ia(y[e])},na:null})},f:(b,a,c,d,e,g,f,h,k,m,l,p,q)=>{l=N(l);g=T(e,g);h&&=T(f,h);m&&=T(k,m);q=T(p,q);var t=Xa(l);
|
|
39
39
|
Q(t,function(){V(`Cannot construct ${l} due to unbound types`,[d])});M([b,a,c],d?[d]:[],v=>{v=v[0];if(d){var z=v.ha;var E=z.ua}else E=Ta.prototype;v=Ua(l,function(...Ma){if(Object.getPrototypeOf(this)!==I)throw new O(`Use 'new' to construct ${l}`);if(void 0===A.va)throw new O(`${l} has no accessible constructor`);var vb=A.va[Ma.length];if(void 0===vb)throw new O(`Tried to invoke ctor of ${l} with invalid number of parameters (${Ma.length}) - expected (${Object.keys(A.va).toString()}) parameters instead!`);
|
|
40
|
-
return vb.apply(this,Ma)});var I=Object.create(E,{constructor:{value:v}});v.prototype=I;var A=new Ya(l,v,I,q,z,g,h,m);if(A.pa){var K;(K=A.pa).za??(K.za=[]);A.pa.za.push(A)}z=new S(l,A,!0,!1,!1);K=new S(l+"*",A,!1,!1,!1);E=new S(l+" const*",A,!1,!0,!1);Va[b]={pointerType:K,La:E};hb(t,v);return[z,K,E]})},
|
|
40
|
+
return vb.apply(this,Ma)});var I=Object.create(E,{constructor:{value:v}});v.prototype=I;var A=new Ya(l,v,I,q,z,g,h,m);if(A.pa){var K;(K=A.pa).za??(K.za=[]);A.pa.za.push(A)}z=new S(l,A,!0,!1,!1);K=new S(l+"*",A,!1,!1,!1);E=new S(l+" const*",A,!1,!0,!1);Va[b]={pointerType:K,La:E};hb(t,v);return[z,K,E]})},o:(b,a,c,d,e,g,f,h)=>{var k=ob(c,d);a=N(a);a=pb(a);g=T(e,g);M([],[b],m=>{function l(){V(`Cannot call ${p} due to unbound types`,k)}m=m[0];var p=`${m.name}.${a}`;a.startsWith("@@")&&(a=Symbol[a.substring(2)]);
|
|
41
41
|
var q=m.ha.constructor;void 0===q[a]?(l.ta=c-1,q[a]=l):(Wa(q,a,p),q[a].ma[c-1]=l);M([],k,t=>{t=[t[0],null].concat(t.slice(1));t=nb(p,t,null,g,f,h);void 0===q[a].ma?(t.ta=c-1,q[a]=t):q[a].ma[c-1]=t;if(m.ha.za)for(const v of m.ha.za)v.constructor.hasOwnProperty(a)||(v.constructor[a]=t);return[]});return[]})},Q:(b,a,c,d,e,g,f,h)=>{a=N(a);g=T(e,g);M([],[b],k=>{k=k[0];var m=`${k.name}.${a}`,l={get(){V(`Cannot access ${m} due to unbound types`,[c])},enumerable:!0,configurable:!0};l.set=h?()=>{V(`Cannot access ${m} due to unbound types`,
|
|
42
42
|
[c])}:()=>{throw new O(`${m} is a read-only property`);};Object.defineProperty(k.ha.constructor,a,l);M([],[c],p=>{p=p[0];var q={get(){return p.ia(g(d))},enumerable:!0};h&&(h=T(f,h),q.set=t=>{var v=[];h(d,p.la(v,t));F(v)});Object.defineProperty(k.ha.constructor,a,q);return[]});return[]})},g:(b,a,c,d,e,g)=>{var f=ob(a,c);e=T(d,e);M([],[b],h=>{h=h[0];var k=`constructor ${h.name}`;void 0===h.ha.va&&(h.ha.va=[]);if(void 0!==h.ha.va[a-1])throw new O(`Cannot register multiple constructors with identical number of parameters (${a-
|
|
43
43
|
1}) for class '${h.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);h.ha.va[a-1]=()=>{V(`Cannot construct ${h.name} due to unbound types`,f)};M([],f,m=>{m.splice(1,0,null);h.ha.va[a-1]=nb(k,m,null,e,g);return[]});return[]})},a:(b,a,c,d,e,g,f,h,k)=>{var m=ob(c,d);a=N(a);a=pb(a);g=T(e,g);M([],[b],l=>{function p(){V(`Cannot call ${q} due to unbound types`,m)}l=l[0];var q=`${l.name}.${a}`;a.startsWith("@@")&&(a=Symbol[a.substring(2)]);h&&l.ha.Va.push(a);
|
|
44
|
-
var t=l.ha.ua,v=t[a];void 0===v||void 0===v.ma&&v.className!==l.name&&v.ta===c-2?(p.ta=c-2,p.className=l.name,t[a]=p):(Wa(t,a,q),t[a].ma[c-2]=p);M([],m,z=>{z=nb(q,z,l,g,f,k);void 0===t[a].ma?(z.ta=c-2,t[a]=z):t[a].ma[c-2]=z;return[]});return[]})},
|
|
44
|
+
var t=l.ha.ua,v=t[a];void 0===v||void 0===v.ma&&v.className!==l.name&&v.ta===c-2?(p.ta=c-2,p.className=l.name,t[a]=p):(Wa(t,a,q),t[a].ma[c-2]=p);M([],m,z=>{z=nb(q,z,l,g,f,k);void 0===t[a].ma?(z.ta=c-2,t[a]=z):t[a].ma[c-2]=z;return[]});return[]})},h:(b,a,c,d,e,g,f,h,k,m)=>{a=N(a);e=T(d,e);M([],[b],l=>{l=l[0];var p=`${l.name}.${a}`,q={get(){V(`Cannot access ${p} due to unbound types`,[c,f])},enumerable:!0,configurable:!0};q.set=k?()=>V(`Cannot access ${p} due to unbound types`,[c,f]):()=>{throw new O(p+
|
|
45
45
|
" is a read-only property");};Object.defineProperty(l.ha.ua,a,q);M([],k?[c,f]:[c],t=>{var v=t[0],z={get(){var I=qb(this,l,p+" getter");return v.ia(e(g,I))},enumerable:!0};if(k){k=T(h,k);var E=t[1];z.set=function(I){var A=qb(this,l,p+" setter"),K=[];k(m,A,E.la(K,I));F(K)}}Object.defineProperty(l.ha.ua,a,z);return[]});return[]})},R:b=>L(b,ub),m:(b,a,c,d,e)=>{a=N(a);e=0===e?"object":1===e?"number":"string";switch(e){case "object":function f(){}f.values={};L(b,{name:a,constructor:f,valueType:e,ia:function(h){return this.constructor.values[h]},
|
|
46
46
|
la:(h,k)=>k.value,qa:wb(a,c,d),na:null});Q(a,f);break;case "number":var g={};L(b,{name:a,Da:g,valueType:e,ia:h=>h,la:(h,k)=>k,qa:wb(a,c,d),na:null});Q(a,g);delete n[a].ta;break;case "string":g={},L(b,{name:a,Ka:{},Ja:{},Da:g,valueType:e,ia:function(h){return this.Ja[h]},la:function(h,k){return this.Ka[k]},qa:wb(a,c,d),na:null}),Q(a,g),delete n[a].ta}},c:(b,a,c)=>{var d=xb(b,"enum");a=N(a);switch(d.valueType){case "object":b=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:Ua(`${d.name}_${a}`,
|
|
47
47
|
function(){})}});b.values[c]=d;b[a]=d;break;case "number":d.Da[a]=c;break;case "string":d.Ka[a]=c,d.Ja[c]=a,d.Da[a]=a}},A:(b,a,c)=>{a=N(a);L(b,{name:a,ia:d=>d,la:(d,e)=>e,qa:yb(a,c),na:null})},s:(b,a,c,d,e,g,f)=>{var h=ob(a,c);b=N(b);b=pb(b);e=T(d,e);Q(b,function(){V(`Cannot call ${b} due to unbound types`,h)},a-1);M([],h,k=>{k=[k[0],null].concat(k.slice(1));hb(b,nb(b,k,null,e,g,f),a-1);return[]})},u:(b,a,c,d,e)=>{a=N(a);let g=h=>h;if(0===d){var f=32-8*c;g=h=>h<<f>>>f;e=g(e)}L(b,{name:a,ia:g,la:(h,
|
|
48
|
-
k)=>k,qa:Oa(a,c,0!==d),na:null})},j:(b,a,c,d)=>{c=N(c);d=N(d);M([],[b,a],e=>{zb(e[0].ha.ua,c,d);return[]})},
|
|
48
|
+
k)=>k,qa:Oa(a,c,0!==d),na:null})},j:(b,a,c,d)=>{c=N(c);d=N(d);M([],[b,a],e=>{zb(e[0].ha.ua,c,d);return[]})},r:(b,a,c)=>{function d(g){return new e(ra.buffer,D[g+4>>2],D[g>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][a];c=N(c);L(b,{name:c,ia:d,qa:d},{Ta:!0})},k:b=>{L(b,Ab)},p:(b,a,c,d,e,g,f,h,k,m,l,p)=>{c=N(c);g=T(e,g);h=T(f,h);m=T(k,m);p=T(l,p);M([b],[a],q=>{q=q[0];return[new S(c,q.ha,!1,!1,!0,q,d,g,h,m,p)]})},
|
|
49
49
|
S:(b,a)=>{a=N(a);L(b,{name:a,ia(c){var d=(d=c+4)?Cb.decode(y.subarray(d,Db(y,d,D[c>>2],!0))):"";U(c);return d},la(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new O("Cannot pass non-string to std::string");var g=e?Bb(d):d.length;var f=Zb(4+g+1),h=f+4;D[f>>2]=g;e?Y(d,h,g+1):y.set(d,h);null!==c&&c.push(U,f);return f},qa:G,na(c){U(c)}})},y:(b,a,c)=>{c=N(c);if(2===a){var d=Fb;var e=Gb;var g=Hb}else d=Ib,e=Jb,
|
|
50
|
-
g=Kb;L(b,{name:c,ia:f=>{var h=d(f+4,D[f>>2]*a,!0);U(f);return h},la:(f,h)=>{if("string"!=typeof h)throw new O(`Cannot pass non-string to C++ string type ${c}`);var k=g(h),m=Zb(4+k+a);D[m>>2]=k/a;e(h,m+4,k+a);null!==f&&f.push(U,m);return m},qa:G,na(f){U(f)}})},
|
|
50
|
+
g=Kb;L(b,{name:c,ia:f=>{var h=d(f+4,D[f>>2]*a,!0);U(f);return h},la:(f,h)=>{if("string"!=typeof h)throw new O(`Cannot pass non-string to C++ string type ${c}`);var k=g(h),m=Zb(4+k+a);D[m>>2]=k/a;e(h,m+4,k+a);null!==f&&f.push(U,m);return m},qa:G,na(f){U(f)}})},i:(b,a,c,d,e,g)=>{Ia[b]={name:N(a),Ea:T(c,d),sa:T(e,g),Ga:[]}},b:(b,a,c,d,e,g,f,h,k,m)=>{Ia[b].Ga.push({Na:N(a),Sa:c,Qa:T(d,e),Ra:g,Ya:f,Xa:T(h,k),Za:m})},U:(b,a)=>{a=N(a);L(b,{Ha:!0,name:a,ia:()=>{},la:()=>{}})},F:()=>{Ha=!1;Lb=0},e:(b,a,c)=>
|
|
51
51
|
{var [d,...e]=Ob(b,a);a=d.la.bind(d);var g=e.map(k=>k.qa.bind(k));b--;var f={toValue:X};b=g.map((k,m)=>{var l=`argFromPtr${m}`;f[l]=k;return`${l}(args${m?"+"+8*m:""})`});switch(c){case 0:var h="toValue(handle)";break;case 2:h="new (toValue(handle))";break;case 3:h="";break;case 1:f.getStringOrSymbol=Rb,h="toValue(handle)[getStringOrSymbol(methodName)]"}h+=`(${b})`;d.Ha||(f.toReturnWire=a,f.emval_returnValue=Pb,h=`return emval_returnValue(toReturnWire, destructorsRef, ${h})`);h=`return function (handle, methodName, destructorsRef, args) {\n${h}\n}`;
|
|
52
|
-
c=(new Function(Object.keys(f),h))(...Object.values(f));h=`methodCaller<(${e.map(k=>k.name)}) => ${d.name}>`;return Nb(Ua(h,c))},W:tb,w:b=>{if(!b)return R(globalThis);b=Rb(b);return R(globalThis[b])},C:b=>{b=Rb(b);return R(n[b])},t:(b,a)=>{b=X(b);a=X(a);return R(b[a])},z:b=>{9<b&&(W[b+1]+=1)},V:(b,a)=>{b=X(b);a=X(a);return b instanceof a},d:(b,a,c,d,e)=>Mb[b](a,c,d,e),x:b=>{b=X(b);return"string"==typeof b},v:()=>R([]),l:b=>R(Rb(b)),
|
|
52
|
+
c=(new Function(Object.keys(f),h))(...Object.values(f));h=`methodCaller<(${e.map(k=>k.name)}) => ${d.name}>`;return Nb(Ua(h,c))},W:tb,w:b=>{if(!b)return R(globalThis);b=Rb(b);return R(globalThis[b])},C:b=>{b=Rb(b);return R(n[b])},t:(b,a)=>{b=X(b);a=X(a);return R(b[a])},z:b=>{9<b&&(W[b+1]+=1)},V:(b,a)=>{b=X(b);a=X(a);return b instanceof a},d:(b,a,c,d,e)=>Mb[b](a,c,d,e),x:b=>{b=X(b);return"string"==typeof b},v:()=>R([]),l:b=>R(Rb(b)),q:()=>R({}),E:b=>{var a=X(b);F(a);tb(b)},n:(b,a,c)=>{b=X(b);a=X(a);
|
|
53
53
|
c=X(c);b[a]=c},Y:(b,a)=>{b=X(b);a=X(a);return b===a},G:(b,a)=>{Z[b]&&(clearTimeout(Z[b].id),delete Z[b]);if(!a)return 0;var c=setTimeout(()=>{delete Z[b];Ub(()=>ac(b,performance.now()))},a);Z[b]={id:c,ab:a};return 0},I:(b,a,c,d)=>{var e=(new Date).getFullYear(),g=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();D[b>>2]=60*Math.max(g,e);C[a>>2]=Number(g!=e);a=f=>{var h=Math.abs(f);return`UTC${0<=f?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,
|
|
54
54
|
"0")}`};b=a(g);a=a(e);e<g?(Y(b,c,17),Y(a,d,17)):(Y(b,d,17),Y(a,c,17))},J:b=>{var a=y.length;b>>>=0;if(2147483648<b)return!1;for(var c=1;4>=c;c*=2){var d=a*(1+.2/c);d=Math.min(d,b+100663296);a:{d=(Math.min(2147483648,65536*Math.ceil(Math.max(b,d)/65536))-qa.buffer.byteLength+65535)/65536|0;try{qa.grow(d);pa();var e=1;break a}catch(g){}e=void 0}if(e)return!0}return!1},L:(b,a)=>{var c=0,d=0,e;for(e of Xb()){var g=a+c;D[b+d>>2]=g;c+=Y(e,g,Infinity)+1;d+=4}return 0},M:(b,a)=>{var c=Xb();D[b>>2]=c.length;
|
|
55
55
|
b=0;for(var d of c)b+=Bb(d)+1;D[a>>2]=b;return 0},N:()=>52,P:()=>52,K:function(){return 70},O:(b,a,c,d)=>{for(var e=0,g=0;g<c;g++){var f=D[a>>2],h=D[a+4>>2];a+=8;for(var k=0;k<h;k++){var m=b,l=y[f+k],p=Yb[m];0===l||10===l?(m=1===m?ja:u,l=Db(p,0),l=Cb.decode(p.buffer?p.subarray(0,l):new Uint8Array(p.slice(0,l))),m(l),p.length=0):p.push(l)}e+=h}D[d>>2]=e;return 0},D:Tb},cc;
|
package/lib/RoomleCore.wasm
CHANGED
|
Binary file
|
package/lib/RoomleToolsCore.wasm
CHANGED
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as e,
|
|
1
|
+
import { B as e, V as t } from "./main-D2BulNeN.mjs";
|
|
2
2
|
//#region packages/homag-intelligence/src/api.ts
|
|
3
3
|
var n = class {
|
|
4
4
|
constructor(e) {
|
|
@@ -14,14 +14,14 @@ var n = class {
|
|
|
14
14
|
completelyLoaded() {
|
|
15
15
|
this._roomlePlanner.externalObjectsCompletelyLoaded();
|
|
16
16
|
}
|
|
17
|
-
async selectGroup(
|
|
18
|
-
await this._roomlePlanner.selectExternalObject(
|
|
17
|
+
async selectGroup(t) {
|
|
18
|
+
await this._roomlePlanner.selectExternalObject(t, null, e.ROOM);
|
|
19
19
|
}
|
|
20
|
-
async selectRoot(
|
|
21
|
-
await this._roomlePlanner.selectExternalObject(
|
|
20
|
+
async selectRoot(t) {
|
|
21
|
+
await this._roomlePlanner.selectExternalObject(t, null, e.ISOLATION);
|
|
22
22
|
}
|
|
23
|
-
async selectModule(
|
|
24
|
-
await this._roomlePlanner.selectExternalObject(
|
|
23
|
+
async selectModule(t, n) {
|
|
24
|
+
await this._roomlePlanner.selectExternalObject(t, n, e.ISOLATION);
|
|
25
25
|
}
|
|
26
26
|
openCloseGroup(e, t, n, r) {
|
|
27
27
|
return this._roomlePlanner.openOrCloseGeometryOfExternalObject(e, t ?? null, n, r), Promise.resolve();
|
|
@@ -35,8 +35,8 @@ var n = class {
|
|
|
35
35
|
async getPosDataOfAllGroups() {
|
|
36
36
|
return await this._roomlePlanner.getExternalObjectGroups();
|
|
37
37
|
}
|
|
38
|
-
async getRoomInformation(
|
|
39
|
-
return await this._roomlePlanner.getExternalRoomInformation(
|
|
38
|
+
async getRoomInformation(e) {
|
|
39
|
+
return await this._roomlePlanner.getExternalRoomInformation(e ?? t.FLOOR);
|
|
40
40
|
}
|
|
41
41
|
async saveExternalObjectSnapshot() {
|
|
42
42
|
return this._roomlePlanner.saveExternalObjectSnapshot();
|
|
@@ -52,4 +52,4 @@ var n = class {
|
|
|
52
52
|
//#endregion
|
|
53
53
|
export { n as t };
|
|
54
54
|
|
|
55
|
-
//# sourceMappingURL=api-
|
|
55
|
+
//# sourceMappingURL=api-BXU3pZnX.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-
|
|
1
|
+
{"version":3,"file":"api-BXU3pZnX.mjs","names":[],"sources":["../../packages/homag-intelligence/src/api.ts"],"sourcesContent":["import type { RoomDesignerRequests } from './glue-logic';\nimport type { MasterData, PosGroup } from './model/oc-scripts-domain.model';\nimport type { PlanRoomGeometryMode } from './external-object-api';\nimport { PLAN_ROOM_GEOMETRY_MODE } from './external-object-api';\nimport type { RoomlePlannerType } from '../../typings/external-objects';\nimport {\n HI_CONTEXT_ACTION,\n type LoadExternalObjectOptions,\n} from './external-object-api';\n\nexport interface ExternalObjectModuleIdMap {\n originalModuleId: string;\n newModuleId: string;\n}\n\nexport class RoomDesignerApi implements RoomDesignerRequests {\n private _roomlePlanner: RoomlePlannerType;\n\n constructor(roomlePlanner: RoomlePlannerType) {\n this._roomlePlanner = roomlePlanner;\n }\n\n public loadMasterData(masterData: MasterData) {\n this._roomlePlanner.loadExternalObjectMasterData(masterData);\n }\n\n public async loadPosGroups(\n posDataJson: PosGroup | PosGroup[],\n options: LoadExternalObjectOptions,\n ): Promise<void> {\n const posDataArray = Array.isArray(posDataJson)\n ? posDataJson\n : [posDataJson];\n await this._roomlePlanner.loadExternalObjectGroups(posDataArray, options);\n }\n\n completelyLoaded(): void {\n this._roomlePlanner.externalObjectsCompletelyLoaded();\n }\n\n public async selectGroup(groupId: string): Promise<void> {\n await this._roomlePlanner.selectExternalObject(\n groupId,\n null,\n HI_CONTEXT_ACTION.ROOM,\n );\n }\n\n public async selectRoot(rootModuleId: string): Promise<void> {\n await this._roomlePlanner.selectExternalObject(\n rootModuleId,\n null,\n HI_CONTEXT_ACTION.ISOLATION,\n );\n }\n\n public async selectModule(\n rootModuleId: string,\n subModuleId: string,\n ): Promise<void> {\n await this._roomlePlanner.selectExternalObject(\n rootModuleId,\n subModuleId,\n HI_CONTEXT_ACTION.ISOLATION,\n );\n }\n\n public openCloseGroup(\n groupOrRootModuleId: string,\n subModuleId: string | null,\n open: boolean,\n animate: boolean,\n ) {\n this._roomlePlanner.openOrCloseGeometryOfExternalObject(\n groupOrRootModuleId,\n subModuleId ?? null,\n open,\n animate,\n );\n return Promise.resolve();\n }\n\n public deleteGroup(groupId: string) {\n this._roomlePlanner.removeExternalObject(groupId);\n }\n\n public deleteRootModule(rootModuleId: string) {\n this._roomlePlanner.removeExternalObject(rootModuleId);\n }\n\n public async getPosDataOfAllGroups() {\n const groups =\n (await this._roomlePlanner.getExternalObjectGroups()) as PosGroup[];\n return groups;\n }\n\n public async getRoomInformation(mode?: PlanRoomGeometryMode) {\n const rooms = await this._roomlePlanner.getExternalRoomInformation(\n mode ?? PLAN_ROOM_GEOMETRY_MODE.FLOOR,\n );\n return rooms;\n }\n\n public async saveExternalObjectSnapshot() {\n return this._roomlePlanner.saveExternalObjectSnapshot();\n }\n\n public async saveCurrentPlanSnapshot() {\n return this._roomlePlanner.saveCurrentPlanSnapshot();\n }\n\n public async renderPosDataImage(posDataJson: object) {\n const posDataArray = Array.isArray(posDataJson)\n ? posDataJson\n : [posDataJson];\n await this._roomlePlanner.renderImagesOfExternalObjectGroup(posDataArray);\n }\n}\n"],"mappings":";;AAeA,IAAa,IAAb,MAA6D;CAG3D,YAAY,GAAkC;AAC5C,OAAK,iBAAiB;;CAGxB,eAAsB,GAAwB;AAC5C,OAAK,eAAe,6BAA6B,EAAW;;CAG9D,MAAa,cACX,GACA,GACe;EACf,IAAM,IAAe,MAAM,QAAQ,EAAY,GAC3C,IACA,CAAC,EAAY;AACjB,QAAM,KAAK,eAAe,yBAAyB,GAAc,EAAQ;;CAG3E,mBAAyB;AACvB,OAAK,eAAe,iCAAiC;;CAGvD,MAAa,YAAY,GAAgC;AACvD,QAAM,KAAK,eAAe,qBACxB,GACA,MACA,EAAkB,KACnB;;CAGH,MAAa,WAAW,GAAqC;AAC3D,QAAM,KAAK,eAAe,qBACxB,GACA,MACA,EAAkB,UACnB;;CAGH,MAAa,aACX,GACA,GACe;AACf,QAAM,KAAK,eAAe,qBACxB,GACA,GACA,EAAkB,UACnB;;CAGH,eACE,GACA,GACA,GACA,GACA;AAOA,SANA,KAAK,eAAe,oCAClB,GACA,KAAe,MACf,GACA,EACD,EACM,QAAQ,SAAS;;CAG1B,YAAmB,GAAiB;AAClC,OAAK,eAAe,qBAAqB,EAAQ;;CAGnD,iBAAwB,GAAsB;AAC5C,OAAK,eAAe,qBAAqB,EAAa;;CAGxD,MAAa,wBAAwB;AAGnC,SADG,MAAM,KAAK,eAAe,yBAAyB;;CAIxD,MAAa,mBAAmB,GAA6B;AAI3D,SAHc,MAAM,KAAK,eAAe,2BACtC,KAAQ,EAAwB,MACjC;;CAIH,MAAa,6BAA6B;AACxC,SAAO,KAAK,eAAe,4BAA4B;;CAGzD,MAAa,0BAA0B;AACrC,SAAO,KAAK,eAAe,yBAAyB;;CAGtD,MAAa,mBAAmB,GAAqB;EACnD,IAAM,IAAe,MAAM,QAAQ,EAAY,GAC3C,IACA,CAAC,EAAY;AACjB,QAAM,KAAK,eAAe,kCAAkC,EAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-loader.worker-C911tbNL.mjs","names":[],"sources":["../../packages/workers/generated/asset-loader.worker.js?no-inline?url"],"sourcesContent":["export default \"
|
|
1
|
+
{"version":3,"file":"asset-loader.worker-C911tbNL.mjs","names":[],"sources":["../../packages/workers/generated/asset-loader.worker.js?no-inline?url"],"sourcesContent":["export default \"__VITE_ASSET__dJ$ULFcuzX43djbIEsCZPw__\""],"mappings":";AAAA,IAAA,IAAe,KAAA,IAAA,IAAA,0BAAA,OAAA,KAAA,IAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budgeteer.sw-D3VxiASa.mjs","names":[],"sources":["../../packages/workers/generated/budgeteer.sw.js?no-inline?url"],"sourcesContent":["export default \"
|
|
1
|
+
{"version":3,"file":"budgeteer.sw-D3VxiASa.mjs","names":[],"sources":["../../packages/workers/generated/budgeteer.sw.js?no-inline?url"],"sourcesContent":["export default \"__VITE_ASSET__ZoP2ebLT5e$hm8jPkF9mgA__\""],"mappings":";AAAA,IAAA,IAAe,KAAA,IAAA,IAAA,mBAAA,OAAA,KAAA,IAAA,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as e } from "./threejs-utils-
|
|
1
|
+
import { R as e } from "./threejs-utils-C4J_TZ0o.mjs";
|
|
2
2
|
import { Bt as t, Si as n, Tn as r, Vt as i, h as a, m as o, zt as s } from "./three.core-tV_4n8Wg.mjs";
|
|
3
3
|
import { n as c, r as l, t as u } from "./decorate-C9r0zXzz.mjs";
|
|
4
4
|
import { c as d, t as f } from "./dimensioning-helper-d6JA4UMr.mjs";
|
|
@@ -165,4 +165,4 @@ u([l, c("design:type", Object)], w.prototype, "_cacheHolder", void 0), u([l, c("
|
|
|
165
165
|
//#endregion
|
|
166
166
|
export { w as default };
|
|
167
167
|
|
|
168
|
-
//# sourceMappingURL=component-dimensioning-
|
|
168
|
+
//# sourceMappingURL=component-dimensioning-5iIw1f_3.mjs.map
|
package/lib/{component-dimensioning-12aJsCzQ.mjs.map → component-dimensioning-5iIw1f_3.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-dimensioning-12aJsCzQ.mjs","names":[],"sources":["../../packages/configurator-core/src/utils/component-dimensioning-html-util.ts","../../packages/configurator-core/src/utils/component-dimensioning.ts"],"sourcesContent":["export function createDimensioningTextLabelHtmlDiv(\n labelText: string,\n dimensioningLevel: number,\n interactionKey: string | undefined,\n editingFinishedCallback: (interactionKey: string, value: string) => void,\n): HTMLDivElement {\n const labelHtmlDiv = document.createElement('div');\n labelHtmlDiv.classList.add('dimension-label');\n\n if (dimensioningLevel === 0) {\n labelHtmlDiv.classList.add('dimension-label--primary');\n } else {\n labelHtmlDiv.classList.add('dimension-label--secondary');\n }\n\n if (!interactionKey) {\n labelHtmlDiv.classList.add('dimension-label--disabled');\n } else {\n labelHtmlDiv.onclick = () => {\n labelHtmlDiv.classList.add('dimension-label--editing');\n while (labelHtmlDiv.firstChild) {\n labelHtmlDiv.removeChild(labelHtmlDiv.firstChild);\n }\n const labelHtmlInput = createDimensioningLabelHtmlInput(\n labelText,\n interactionKey,\n editingFinishedCallback,\n );\n labelHtmlDiv.appendChild(labelHtmlInput);\n labelHtmlInput.focus();\n labelHtmlInput.select();\n };\n }\n\n resetChildren(labelHtmlDiv, labelText);\n\n return labelHtmlDiv;\n}\n\nfunction createDimensioningLabelHtmlInput(\n originalValue: string,\n interactionKey: string,\n editingFinishedCallback: (interactionKey: string, value: string) => void,\n): HTMLInputElement {\n const labelHtmlInput = document.createElement('input');\n labelHtmlInput.id = interactionKey;\n labelHtmlInput.type = 'text';\n labelHtmlInput.enterKeyHint = 'done';\n labelHtmlInput.classList.add('dimension-label__input');\n labelHtmlInput.inputMode = 'numeric';\n labelHtmlInput.pattern = '[0-9]*';\n labelHtmlInput.value = originalValue;\n\n function finishEditing(interactionKey: string, valueToSet: string): void {\n // avoid race conditions\n if (labelHtmlInput.id !== interactionKey) {\n return;\n }\n labelHtmlInput.id = '';\n\n const numValue = parseFloat(valueToSet);\n\n if (isNaN(numValue) || numValue <= 0) {\n editingFinishedCallback(interactionKey, originalValue);\n return;\n }\n\n editingFinishedCallback(interactionKey, valueToSet);\n }\n\n labelHtmlInput.onkeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Esc') {\n finishEditing(interactionKey, originalValue);\n } else if (event.key === 'Enter') {\n finishEditing(interactionKey, labelHtmlInput.value);\n }\n };\n\n labelHtmlInput.onblur = () => {\n finishEditing(interactionKey, labelHtmlInput.value);\n };\n\n return labelHtmlInput;\n}\n\nfunction resetChildren(labelHtmlDiv: HTMLDivElement, labelText: string): void {\n while (labelHtmlDiv.firstChild) {\n labelHtmlDiv.removeChild(labelHtmlDiv.firstChild);\n }\n\n const labelHtmlSpan = document.createElement('span');\n labelHtmlSpan.classList.add('dimension-label__value');\n labelHtmlSpan.innerHTML = labelText;\n labelHtmlDiv.appendChild(labelHtmlSpan);\n}\n","import 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 Line,\n Line3,\n LineBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\nimport { kernelDimensioningToThree } from '../../../common-core/src/utils/threejs-utils';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport { DIMENSIONING_GEOMETRY } from './dimensioning-helper';\nimport inject from '../../../common-core/src/di/inject';\nimport { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer.js';\nimport { LAYER } from '../../../common-core/src/webgl/layer';\nimport { createDimensioningTextLabelHtmlDiv } from './component-dimensioning-html-util';\n\nconst LINE_MATERIAL = 'component_dimensioning_line_material';\nconst LINE_COLOR = 0x373737;\nconst LINE_SPACING = 0.05;\n\nconst TEXT_SPACING = 0.02;\nconst TEXT_SIZE = 0.025;\n\nexport interface DimensioningAndAxis {\n dimensioning: Dimensioning;\n axis?: DimensioningAxis;\n}\n\nclass ComponentDimensioningAxis {\n private _origin: Vector3;\n private readonly _direction: Vector3;\n private readonly _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(from: number, to: number, lineOffset: number): Line3 {\n const start = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(from))\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 _dimensionInMM: number;\n\n private readonly editingFinishedCallback: (\n interactionKey: string,\n value: number,\n ) => void;\n\n private readonly _level: number;\n private _lineMaterial: LineBasicMaterial;\n\n private _textLabel: CSS2DObject;\n\n private _mainLineObject: Line | null = null;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n relativeCameraDirection: Vector3,\n editingFinishedCallback: (interactionKey: string, value: number) => void,\n ) {\n super();\n this.name = DIMENSIONING_GEOMETRY;\n\n this._size = boundingBox.getSize(new Vector3());\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\n this.editingFinishedCallback = editingFinishedCallback;\n\n this._init();\n }\n\n clone() {\n console.warn(\n 'Will not clone ComponentDimensioning because this can break the generation of perspective images. ' +\n 'If the ComponentDimensioning is visible during the generation of the perspective image, ' +\n 'three.js tries to clone it but clone does not give any parameters to the constructor and therefore the clone breaks.',\n );\n // Since we do not need to clone ComponentDimensioning, we return undefined\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: LINE_COLOR,\n });\n this._cacheHolder.materialCache.set(LINE_MATERIAL, this._lineMaterial);\n }\n }\n\n private _init() {\n this._initMaterials();\n\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\n let fontSize = TEXT_SIZE + (maxSize < 4 ? 0 : maxSize * 0.005);\n if (length < 0.3) {\n fontSize *= 0.5 + length;\n }\n\n // Approximate text height for spacing calculations\n // Based on typical font metrics (height is roughly 1.4x the font size)\n const levelSpacing = fontSize * 1.4;\n\n const lineOffset =\n LINE_SPACING + (3 * TEXT_SPACING + levelSpacing) * this._level;\n\n const line = this._axis.getEdge(\n this._dimensioning.from,\n this._dimensioning.to,\n lineOffset,\n );\n\n this._addEdgeSideLines(\n levelSpacing,\n line,\n this._axis.labelDirection.clone(),\n );\n\n const lineGeometry = new BufferGeometry();\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\n const lineObject = new Line(lineGeometry, this._lineMaterial);\n lineObject.name = 'component dimension line ' + this._dimensioning.axis;\n lineObject.renderOrder = 0;\n lineObject.layers.set(LAYER.DIMENSIONS);\n\n this._mainLineObject = lineObject;\n\n this.add(lineObject);\n\n const labelText = this._unitFormatter.formatMMValueToUnitString(\n length * 1000,\n );\n this._dimensionInMM = length * 1000;\n\n if (labelText === null) {\n return;\n }\n\n this._textLabel = this.createTextLabel(labelText);\n this.add(this._textLabel);\n }\n\n public setLabelVisible(visible: boolean) {\n if (!this._textLabel) {\n return;\n }\n\n this._textLabel.visible = visible;\n }\n\n public getDimensionInMM(): number {\n return this._dimensionInMM;\n }\n\n private createTextLabel(labelText: string): CSS2DObject {\n const labelHtmlDiv = createDimensioningTextLabelHtmlDiv(\n labelText,\n this._dimensioning.level,\n this._dimensioning.interactionKey,\n this.onEditingFinished,\n );\n const labelObject = new CSS2DObject(labelHtmlDiv);\n labelObject.userData.isLabel = true;\n labelObject.renderOrder = 1;\n\n return labelObject;\n }\n\n private onEditingFinished = (interactionKey: string, value: string): void => {\n const parsedValue = this._unitFormatter.parseMMValueFromUnitString(\n value,\n 'length',\n );\n\n if (parsedValue === null) {\n return;\n }\n\n this.editingFinishedCallback(interactionKey, parsedValue);\n };\n\n // Get the world position center of the main dimension line (same logic as getDimensionLineCenter)\n private _getMainLineCenterWorldPosition(): Vector3 | null {\n if (!this._mainLineObject) {\n return null;\n }\n\n this.updateMatrixWorld(true);\n this._mainLineObject.updateMatrixWorld(true);\n\n const positions = this._mainLineObject.geometry.attributes.position.array;\n\n if (positions.length < 6) {\n return null;\n }\n\n const start = new Vector3(positions[0], positions[1], positions[2]);\n const end = new Vector3(positions[3], positions[4], positions[5]);\n\n start.applyMatrix4(this._mainLineObject.matrixWorld);\n end.applyMatrix4(this._mainLineObject.matrixWorld);\n\n return start.clone().add(end).multiplyScalar(0.5);\n }\n\n public initializeTextLabels(): void {\n if (!this._textLabel || this._textLabel.children.length > 0) {\n return;\n }\n\n try {\n this.updateMatrixWorld(true);\n\n const labelWorldPos = this._getMainLineCenterWorldPosition();\n if (labelWorldPos) {\n const labelLocalPos = this.worldToLocal(labelWorldPos.clone());\n this._textLabel.position.copy(labelLocalPos);\n }\n } catch (error) {\n console.warn('Failed to initialize text label for dimension:', error);\n if (this._textLabel) {\n this.remove(this._textLabel);\n }\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 const line = new Line(lineGeometry, this._lineMaterial);\n line.renderOrder = 0;\n line.layers.set(LAYER.DIMENSIONS);\n this.add(line);\n }\n\n public dispose() {\n this.remove(this._textLabel);\n this._mainLineObject = null;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-dimensioning-5iIw1f_3.mjs","names":[],"sources":["../../packages/configurator-core/src/utils/component-dimensioning-html-util.ts","../../packages/configurator-core/src/utils/component-dimensioning.ts"],"sourcesContent":["export function createDimensioningTextLabelHtmlDiv(\n labelText: string,\n dimensioningLevel: number,\n interactionKey: string | undefined,\n editingFinishedCallback: (interactionKey: string, value: string) => void,\n): HTMLDivElement {\n const labelHtmlDiv = document.createElement('div');\n labelHtmlDiv.classList.add('dimension-label');\n\n if (dimensioningLevel === 0) {\n labelHtmlDiv.classList.add('dimension-label--primary');\n } else {\n labelHtmlDiv.classList.add('dimension-label--secondary');\n }\n\n if (!interactionKey) {\n labelHtmlDiv.classList.add('dimension-label--disabled');\n } else {\n labelHtmlDiv.onclick = () => {\n labelHtmlDiv.classList.add('dimension-label--editing');\n while (labelHtmlDiv.firstChild) {\n labelHtmlDiv.removeChild(labelHtmlDiv.firstChild);\n }\n const labelHtmlInput = createDimensioningLabelHtmlInput(\n labelText,\n interactionKey,\n editingFinishedCallback,\n );\n labelHtmlDiv.appendChild(labelHtmlInput);\n labelHtmlInput.focus();\n labelHtmlInput.select();\n };\n }\n\n resetChildren(labelHtmlDiv, labelText);\n\n return labelHtmlDiv;\n}\n\nfunction createDimensioningLabelHtmlInput(\n originalValue: string,\n interactionKey: string,\n editingFinishedCallback: (interactionKey: string, value: string) => void,\n): HTMLInputElement {\n const labelHtmlInput = document.createElement('input');\n labelHtmlInput.id = interactionKey;\n labelHtmlInput.type = 'text';\n labelHtmlInput.enterKeyHint = 'done';\n labelHtmlInput.classList.add('dimension-label__input');\n labelHtmlInput.inputMode = 'numeric';\n labelHtmlInput.pattern = '[0-9]*';\n labelHtmlInput.value = originalValue;\n\n function finishEditing(interactionKey: string, valueToSet: string): void {\n // avoid race conditions\n if (labelHtmlInput.id !== interactionKey) {\n return;\n }\n labelHtmlInput.id = '';\n\n const numValue = parseFloat(valueToSet);\n\n if (isNaN(numValue) || numValue <= 0) {\n editingFinishedCallback(interactionKey, originalValue);\n return;\n }\n\n editingFinishedCallback(interactionKey, valueToSet);\n }\n\n labelHtmlInput.onkeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Esc') {\n finishEditing(interactionKey, originalValue);\n } else if (event.key === 'Enter') {\n finishEditing(interactionKey, labelHtmlInput.value);\n }\n };\n\n labelHtmlInput.onblur = () => {\n finishEditing(interactionKey, labelHtmlInput.value);\n };\n\n return labelHtmlInput;\n}\n\nfunction resetChildren(labelHtmlDiv: HTMLDivElement, labelText: string): void {\n while (labelHtmlDiv.firstChild) {\n labelHtmlDiv.removeChild(labelHtmlDiv.firstChild);\n }\n\n const labelHtmlSpan = document.createElement('span');\n labelHtmlSpan.classList.add('dimension-label__value');\n labelHtmlSpan.innerHTML = labelText;\n labelHtmlDiv.appendChild(labelHtmlSpan);\n}\n","import 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 Line,\n Line3,\n LineBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\nimport { kernelDimensioningToThree } from '../../../common-core/src/utils/threejs-utils';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport { DIMENSIONING_GEOMETRY } from './dimensioning-helper';\nimport inject from '../../../common-core/src/di/inject';\nimport { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer.js';\nimport { LAYER } from '../../../common-core/src/webgl/layer';\nimport { createDimensioningTextLabelHtmlDiv } from './component-dimensioning-html-util';\n\nconst LINE_MATERIAL = 'component_dimensioning_line_material';\nconst LINE_COLOR = 0x373737;\nconst LINE_SPACING = 0.05;\n\nconst TEXT_SPACING = 0.02;\nconst TEXT_SIZE = 0.025;\n\nexport interface DimensioningAndAxis {\n dimensioning: Dimensioning;\n axis?: DimensioningAxis;\n}\n\nclass ComponentDimensioningAxis {\n private _origin: Vector3;\n private readonly _direction: Vector3;\n private readonly _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(from: number, to: number, lineOffset: number): Line3 {\n const start = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(from))\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 _dimensionInMM: number;\n\n private readonly editingFinishedCallback: (\n interactionKey: string,\n value: number,\n ) => void;\n\n private readonly _level: number;\n private _lineMaterial: LineBasicMaterial;\n\n private _textLabel: CSS2DObject;\n\n private _mainLineObject: Line | null = null;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n relativeCameraDirection: Vector3,\n editingFinishedCallback: (interactionKey: string, value: number) => void,\n ) {\n super();\n this.name = DIMENSIONING_GEOMETRY;\n\n this._size = boundingBox.getSize(new Vector3());\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\n this.editingFinishedCallback = editingFinishedCallback;\n\n this._init();\n }\n\n clone() {\n console.warn(\n 'Will not clone ComponentDimensioning because this can break the generation of perspective images. ' +\n 'If the ComponentDimensioning is visible during the generation of the perspective image, ' +\n 'three.js tries to clone it but clone does not give any parameters to the constructor and therefore the clone breaks.',\n );\n // Since we do not need to clone ComponentDimensioning, we return undefined\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: LINE_COLOR,\n });\n this._cacheHolder.materialCache.set(LINE_MATERIAL, this._lineMaterial);\n }\n }\n\n private _init() {\n this._initMaterials();\n\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\n let fontSize = TEXT_SIZE + (maxSize < 4 ? 0 : maxSize * 0.005);\n if (length < 0.3) {\n fontSize *= 0.5 + length;\n }\n\n // Approximate text height for spacing calculations\n // Based on typical font metrics (height is roughly 1.4x the font size)\n const levelSpacing = fontSize * 1.4;\n\n const lineOffset =\n LINE_SPACING + (3 * TEXT_SPACING + levelSpacing) * this._level;\n\n const line = this._axis.getEdge(\n this._dimensioning.from,\n this._dimensioning.to,\n lineOffset,\n );\n\n this._addEdgeSideLines(\n levelSpacing,\n line,\n this._axis.labelDirection.clone(),\n );\n\n const lineGeometry = new BufferGeometry();\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\n const lineObject = new Line(lineGeometry, this._lineMaterial);\n lineObject.name = 'component dimension line ' + this._dimensioning.axis;\n lineObject.renderOrder = 0;\n lineObject.layers.set(LAYER.DIMENSIONS);\n\n this._mainLineObject = lineObject;\n\n this.add(lineObject);\n\n const labelText = this._unitFormatter.formatMMValueToUnitString(\n length * 1000,\n );\n this._dimensionInMM = length * 1000;\n\n if (labelText === null) {\n return;\n }\n\n this._textLabel = this.createTextLabel(labelText);\n this.add(this._textLabel);\n }\n\n public setLabelVisible(visible: boolean) {\n if (!this._textLabel) {\n return;\n }\n\n this._textLabel.visible = visible;\n }\n\n public getDimensionInMM(): number {\n return this._dimensionInMM;\n }\n\n private createTextLabel(labelText: string): CSS2DObject {\n const labelHtmlDiv = createDimensioningTextLabelHtmlDiv(\n labelText,\n this._dimensioning.level,\n this._dimensioning.interactionKey,\n this.onEditingFinished,\n );\n const labelObject = new CSS2DObject(labelHtmlDiv);\n labelObject.userData.isLabel = true;\n labelObject.renderOrder = 1;\n\n return labelObject;\n }\n\n private onEditingFinished = (interactionKey: string, value: string): void => {\n const parsedValue = this._unitFormatter.parseMMValueFromUnitString(\n value,\n 'length',\n );\n\n if (parsedValue === null) {\n return;\n }\n\n this.editingFinishedCallback(interactionKey, parsedValue);\n };\n\n // Get the world position center of the main dimension line (same logic as getDimensionLineCenter)\n private _getMainLineCenterWorldPosition(): Vector3 | null {\n if (!this._mainLineObject) {\n return null;\n }\n\n this.updateMatrixWorld(true);\n this._mainLineObject.updateMatrixWorld(true);\n\n const positions = this._mainLineObject.geometry.attributes.position.array;\n\n if (positions.length < 6) {\n return null;\n }\n\n const start = new Vector3(positions[0], positions[1], positions[2]);\n const end = new Vector3(positions[3], positions[4], positions[5]);\n\n start.applyMatrix4(this._mainLineObject.matrixWorld);\n end.applyMatrix4(this._mainLineObject.matrixWorld);\n\n return start.clone().add(end).multiplyScalar(0.5);\n }\n\n public initializeTextLabels(): void {\n if (!this._textLabel || this._textLabel.children.length > 0) {\n return;\n }\n\n try {\n this.updateMatrixWorld(true);\n\n const labelWorldPos = this._getMainLineCenterWorldPosition();\n if (labelWorldPos) {\n const labelLocalPos = this.worldToLocal(labelWorldPos.clone());\n this._textLabel.position.copy(labelLocalPos);\n }\n } catch (error) {\n console.warn('Failed to initialize text label for dimension:', error);\n if (this._textLabel) {\n this.remove(this._textLabel);\n }\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 const line = new Line(lineGeometry, this._lineMaterial);\n line.renderOrder = 0;\n line.layers.set(LAYER.DIMENSIONS);\n this.add(line);\n }\n\n public dispose() {\n this.remove(this._textLabel);\n this._mainLineObject = null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { J as e } from "./threejs-utils-
|
|
1
|
+
import { J as e } from "./threejs-utils-C4J_TZ0o.mjs";
|
|
2
2
|
import { Dr as t, Si as n, _n as r, cn as i, dt as a, f as o, sn as s } from "./three.core-tV_4n8Wg.mjs";
|
|
3
3
|
import { t as c } from "./layer-C_JtkhdO.mjs";
|
|
4
4
|
import { I as l } from "./common-utils-B9PC_rvS.mjs";
|
|
@@ -93,4 +93,4 @@ var u = class {
|
|
|
93
93
|
//#endregion
|
|
94
94
|
export { u as t };
|
|
95
95
|
|
|
96
|
-
//# sourceMappingURL=component-raycast-helper-
|
|
96
|
+
//# sourceMappingURL=component-raycast-helper-O27_buEg.mjs.map
|
package/lib/{component-raycast-helper-CcrmOq29.mjs.map → component-raycast-helper-O27_buEg.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-raycast-helper-CcrmOq29.mjs","names":[],"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\nimport type { HighlightHelper } from './highlight-helper';\n\nexport default class ComponentRaycastHelper implements HighlightHelper {\n private _object: Object3D;\n private _camera: PerspectiveCamera;\n private _raycaster: Raycaster;\n\n private _nonTransparentComponent: RoomleComponent | null = 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 | null) {\n if (object) {\n this._object = object;\n }\n }\n\n public changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent | null,\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 public cancelDocking(object: Object3D, callback?: () => void) {\n this.changeMaterialsOnSelect(object, null, false, callback);\n }\n\n private _changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent | null,\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 = this._raycaster\n .intersectObjects(this._object.children, true)\n .filter((i) => {\n // do not include invisible materials\n if (!(i.object as any).material.visible) {\n return false;\n }\n // do not include the object itself\n if (uuids.includes(i.object.uuid)) {\n return false;\n }\n // do not include objects which explicitly have the ignoreComponentRaycast flag\n if ((i.object as any).userData.ignoreComponentRaycast) {\n return false;\n }\n return true;\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\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 public onSelectionChanged(\n _object: Object3D,\n _componentIds: number[],\n _callback?: () => void,\n ) {\n // no-op: standard raycast highlighting reacts to camera movement, not selection\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-raycast-helper-O27_buEg.mjs","names":[],"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\nimport type { HighlightHelper } from './highlight-helper';\n\nexport default class ComponentRaycastHelper implements HighlightHelper {\n private _object: Object3D;\n private _camera: PerspectiveCamera;\n private _raycaster: Raycaster;\n\n private _nonTransparentComponent: RoomleComponent | null = 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 | null) {\n if (object) {\n this._object = object;\n }\n }\n\n public changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent | null,\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 public cancelDocking(object: Object3D, callback?: () => void) {\n this.changeMaterialsOnSelect(object, null, false, callback);\n }\n\n private _changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent | null,\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 = this._raycaster\n .intersectObjects(this._object.children, true)\n .filter((i) => {\n // do not include invisible materials\n if (!(i.object as any).material.visible) {\n return false;\n }\n // do not include the object itself\n if (uuids.includes(i.object.uuid)) {\n return false;\n }\n // do not include objects which explicitly have the ignoreComponentRaycast flag\n if ((i.object as any).userData.ignoreComponentRaycast) {\n return false;\n }\n return true;\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\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 public onSelectionChanged(\n _object: Object3D,\n _componentIds: number[],\n _callback?: () => void,\n ) {\n // no-op: standard raycast highlighting reacts to camera movement, not selection\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { A as e, C as t, D as n, Q as r, T as i, X as a, Z as o, d as s, it as c, k as l, lt as u, n as d, ot as f, r as p, rt as m, t as h } from "./main-D2BulNeN.mjs";
|
|
2
|
+
import { t as g } from "./script-loader-CScqyQhc.mjs";
|
|
3
|
+
import { t as _ } from "./component-raycast-helper-O27_buEg.mjs";
|
|
4
|
+
//#region packages/configurator-core/src/utils/injectables.ts
|
|
5
|
+
var v = [
|
|
6
|
+
new c("logger", r),
|
|
7
|
+
new c("rapi-access", f),
|
|
8
|
+
new c("script-loader", g),
|
|
9
|
+
new c("camera-control-3d", i),
|
|
10
|
+
new c("camera-control", n),
|
|
11
|
+
new c("global-init-data", a),
|
|
12
|
+
new c("data-syncer", o),
|
|
13
|
+
new c("configurator-scene-manager", s, m.CONTEXT),
|
|
14
|
+
new c("configurator-view-model", t, m.CONTEXT),
|
|
15
|
+
new c("component-raycast-helper", _, m.GLOBAL)
|
|
16
|
+
], y = class extends d {
|
|
17
|
+
setupDependencies() {
|
|
18
|
+
p.setup(v), this.lookup("planner-kernel-access", this._context).init(e.CONFIGURATOR), this.lookup("rapi-access", this._context), this.lookup("script-loader", this._context), this.lookup("logger", this._context);
|
|
19
|
+
}
|
|
20
|
+
cleanUpGlobals() {
|
|
21
|
+
delete window.RoomleConfigurator;
|
|
22
|
+
}
|
|
23
|
+
cleanUpDependencies() {
|
|
24
|
+
let e = this.lookup("script-loader"), t = this.lookup("rapi-access");
|
|
25
|
+
this.lookup("dom-helper");
|
|
26
|
+
let n = this.lookup("configurator-scene-manager");
|
|
27
|
+
e && e.cleanUp(), t && t.cleanUp(), n && n.cleanUp();
|
|
28
|
+
}
|
|
29
|
+
setupGlobals(e) {
|
|
30
|
+
u.init(e ?? {});
|
|
31
|
+
}
|
|
32
|
+
getApi() {
|
|
33
|
+
return this._configurator;
|
|
34
|
+
}
|
|
35
|
+
async bootFinished() {
|
|
36
|
+
this._configurator = new l(this._context), this._configurator.getMain = () => this, window.RoomleConfigurator || (window.RoomleConfigurator = this._configurator);
|
|
37
|
+
}
|
|
38
|
+
getContextName() {
|
|
39
|
+
return h.CONFIGURATOR;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { y as t };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=configurator-BwxEIDv7.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurator-
|
|
1
|
+
{"version":3,"file":"configurator-BwxEIDv7.mjs","names":[],"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';\nimport { Main, BASE_CONTEXT } from '../../common-core/src/main';\nimport type { AppState } from '../../common-core/src/utils/app-context';\nimport ConfiguratorAppContext 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 /** Currently the only module that uses AppState — all others ignore the parameter. */\n protected setupGlobals(appState?: AppState): void {\n ConfiguratorAppContext.init(appState ?? {});\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"],"mappings":";;;;AAeA,IAAa,IAA+C;CAC1D,IAAI,EAA8B,UAAU,EAAO;CACnD,IAAI,EAA8B,eAAe,EAAW;CAC5D,IAAI,EAA8B,iBAAiB,EAAa;CAChE,IAAI,EAA8B,qBAAqB,EAAgB;CACvE,IAAI,EAA8B,kBAAkB,EAAc;CAClE,IAAI,EAA8B,oBAAoB,EAAe;CACrE,IAAI,EAA8B,eAAe,EAAW;CAC5D,IAAI,EACF,8BACA,GACA,EAAQ,QACT;CACD,IAAI,EACF,2BACA,GACA,EAAQ,QACT;CACD,IAAI,EACF,4BACA,GACA,EAAQ,OACT;CACF,ECvBY,IAAb,cAAkC,EAAK;CAGrC,oBAAoC;AAUlC,EATA,EAA0B,MAAM,EAAY,EAEhB,KAAK,OAC/B,yBACA,KAAK,SACN,CACmB,KAAK,EAAY,aAAa,EAClD,KAAK,OAAmB,eAAe,KAAK,SAAS,EACrD,KAAK,OAAqB,iBAAiB,KAAK,SAAS,EACzD,KAAK,OAAe,UAAU,KAAK,SAAS;;CAG9C,iBAAiC;AAC/B,SAAO,OAAO;;CAGhB,sBAAsC;EACpC,IAAM,IAAe,KAAK,OAAqB,gBAAgB,EACzD,IAAa,KAAK,OAAmB,cAAc;AACvC,OAAK,OAAkB,aAAa;EAFtD,IAGM,IAAe,KAAK,OACxB,6BACD;AAcD,EAZI,KACF,EAAa,SAAS,EAGpB,KACF,EAAW,SAAS,EAOlB,KACF,EAAa,SAAS;;CAK1B,aAAuB,GAA2B;AAChD,IAAuB,KAAK,KAAY,EAAE,CAAC;;CAG7C,SAAoC;AAClC,SAAO,KAAK;;CAGd,MAAgB,eAA8B;AAM5C,EALA,KAAK,gBAAgB,IAAI,EAAmB,KAAK,SAAS,EAC1D,KAAK,cAAc,gBACV,MAGJ,OAAO,uBACV,OAAO,qBAAqB,KAAK;;CAIrC,iBAAmC;AACjC,SAAO,EAAa"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ft as e, h as t } from "./threejs-utils-C4J_TZ0o.mjs";
|
|
2
2
|
import { Br as n, Ln as r, On as i, Si as a, f as o, n as s, nt as c, w as l } from "./three.core-tV_4n8Wg.mjs";
|
|
3
3
|
import { r as u } from "./three.module-DC5fF9Zl.mjs";
|
|
4
4
|
import { n as d, r as f, t as p } from "./decorate-C9r0zXzz.mjs";
|
|
5
5
|
import { g as m, v as h } from "./common-utils-B9PC_rvS.mjs";
|
|
6
|
-
import { $ as g,
|
|
7
|
-
import { t as F } from "./script-loader-
|
|
6
|
+
import { $ as g, E as _, L as v, O as y, Q as b, T as x, at as S, et as C, h as w, it as T, m as E, n as D, ot as O, p as k, q as A, r as j, rt as M, t as N, u as P } from "./main-D2BulNeN.mjs";
|
|
7
|
+
import { t as F } from "./script-loader-CScqyQhc.mjs";
|
|
8
8
|
//#region packages/glb-viewer-core/src/camera-control/adjustable-camera-control-3d.ts
|
|
9
|
-
var I = class extends
|
|
9
|
+
var I = class extends x {
|
|
10
10
|
constructor(...e) {
|
|
11
11
|
super(...e), this.shouldIgnoreStandardBehavior = !1;
|
|
12
12
|
}
|
|
@@ -21,7 +21,7 @@ var I = class extends P {
|
|
|
21
21
|
animateCamera(e) {
|
|
22
22
|
return this.shouldIgnoreStandardBehavior ? !0 : super.animateCamera(e);
|
|
23
23
|
}
|
|
24
|
-
}, L = class extends
|
|
24
|
+
}, L = class extends y {
|
|
25
25
|
constructor(e, t) {
|
|
26
26
|
super(e, t), this._params = { ambientLight: { color: "#ffffff" } }, this._ambientLight = new s(new l(this._params.ambientLight.color), .5), this.addToScene();
|
|
27
27
|
}
|
|
@@ -44,13 +44,13 @@ var I = class extends P {
|
|
|
44
44
|
}
|
|
45
45
|
}, R = class extends w {
|
|
46
46
|
constructor(e, t) {
|
|
47
|
-
if (super(e, t,
|
|
48
|
-
let e =
|
|
47
|
+
if (super(e, t, A.GLB, S.CAMERA_3D), this._itemsCount = 0, this._standardSceneBackgroundColor = this._scene.background, this._initData.legacyLight && this._renderer instanceof u) if (this._renderer.capabilities.maxTextures > 8) {
|
|
48
|
+
let e = g.createDynamicLightSettingSource(null, C.CAMERA);
|
|
49
49
|
e && this.loadDynamicLightSetting(e);
|
|
50
50
|
} else console.warn("this device has a maximum of 8 texture units thus we are using a simpler light setting"), this._lightSetting = new L(this._scene);
|
|
51
51
|
}
|
|
52
52
|
createCameraControl(e, t) {
|
|
53
|
-
this._changeCameraBehaviour(new
|
|
53
|
+
this._changeCameraBehaviour(new P(new I(this._creator_, this._getInputManager(), void 0), this._cameraBehaviourState));
|
|
54
54
|
}
|
|
55
55
|
_getInputManager() {
|
|
56
56
|
return this._glbInputManager;
|
|
@@ -138,9 +138,9 @@ var I = class extends P {
|
|
|
138
138
|
return null;
|
|
139
139
|
}
|
|
140
140
|
cameraBehaviourChanged(e = !0) {
|
|
141
|
-
super.cameraBehaviourChanged(e), this.cameraBehaviour.cameraControl.addEventListener(
|
|
141
|
+
super.cameraBehaviourChanged(e), this.cameraBehaviour.cameraControl.addEventListener(_.ZOOM_IN, () => {
|
|
142
142
|
this._requestRender();
|
|
143
|
-
}, this), this.cameraBehaviour.cameraControl.addEventListener(
|
|
143
|
+
}, this), this.cameraBehaviour.cameraControl.addEventListener(_.ZOOM_OUT, () => {
|
|
144
144
|
this._requestRender();
|
|
145
145
|
}, this);
|
|
146
146
|
}
|
|
@@ -300,14 +300,14 @@ p([f, d("design:type", Object)], V.prototype, "_rapiAccess", void 0), p([f, d("d
|
|
|
300
300
|
//#endregion
|
|
301
301
|
//#region packages/glb-viewer-core/src/input/glb-input-manager.ts
|
|
302
302
|
var H = class extends v {}, U = [
|
|
303
|
-
new
|
|
304
|
-
new
|
|
305
|
-
new
|
|
306
|
-
new
|
|
303
|
+
new T("script-loader", F),
|
|
304
|
+
new T("glb-input-manager", H, M.CONTEXT),
|
|
305
|
+
new T("logger", b),
|
|
306
|
+
new T("rapi-access", O)
|
|
307
307
|
], W = class extends D {
|
|
308
308
|
setupGlobals() {}
|
|
309
309
|
setupDependencies() {
|
|
310
|
-
|
|
310
|
+
j.setup(U), this.lookup("logger", this._context);
|
|
311
311
|
}
|
|
312
312
|
cleanUpGlobals() {
|
|
313
313
|
throw Error("Method not implemented.");
|
|
@@ -322,10 +322,10 @@ var H = class extends v {}, U = [
|
|
|
322
322
|
return this._viewer;
|
|
323
323
|
}
|
|
324
324
|
getContextName() {
|
|
325
|
-
return
|
|
325
|
+
return N.GLB_VIEWER;
|
|
326
326
|
}
|
|
327
327
|
};
|
|
328
328
|
//#endregion
|
|
329
329
|
export { V as n, W as t };
|
|
330
330
|
|
|
331
|
-
//# sourceMappingURL=glb-viewer-
|
|
331
|
+
//# sourceMappingURL=glb-viewer-C0Et5SO6.mjs.map
|