{"version":3,"file":"app-2e6db95c.c84c0e22ee9cc10e.bundle.js","mappings":"yHAMO,MAAMA,EAAb,cA+BC,KAAAC,YAAuB,CAAC,CACzB,E,4DClCO,MAAMC,EAIT,WAAAC,CAAoBC,GAAA,KAAAA,WAAAA,EACtBC,KAAKC,WAAaD,KAAKD,WAAWG,MAAMC,IAAI,MAC5CH,KAAKC,WAAWG,aAAe,EAC/BJ,KAAKC,WAAWI,SAAU,CAC3B,CAEA,cAAMC,GACLN,KAAKC,WAAWI,SAAU,CAC3B,CAEA,gBAAME,GACLP,KAAKC,WAAWI,SAAU,QACpBL,KAAKC,WAAWO,WACvB,CAEA,mBAAMC,CAAcC,GACpB,CAEA,iBAAMC,CAAYD,GAClB,CAEA,eAAME,CAAUF,GAChB,CAEA,aAAMG,CAAQH,GACQ,IAAjBA,EAAMI,aACHd,KAAKC,WAAWc,SAEG,IAAjBL,EAAMI,QACdd,KAAKC,WAAWe,gBAElB,E,eCzBM,MAAMC,EAYZ,WAAAnB,CAAoBC,GAAA,KAAAA,WAAAA,EANH,KAAAmB,gBAAkB,cAClB,KAAAC,wBAA0B,yBAM1CnB,KAAKoB,gBAAkBrB,EAAWG,MAAMC,IAAI,MAC5CH,KAAKqB,cAAgBtB,EAAWG,MAAMC,IAAI,MAE1CH,KAAKsB,oBAAsB,IAAI,EAAAC,kBAAkB,CAChDC,MAAO,WACPC,aAAa,EACbC,QAAS,KAGV1B,KAAKoB,gBAAgBO,YAAY3B,KAAKkB,gBAAiBlB,KAAKsB,qBAC5DtB,KAAKoB,gBAAiBO,YAAY3B,KAAKmB,wBAAyBnB,KAAKsB,qBAErEtB,KAAK4B,2BAA6B,IAAIC,EAA2B9B,EAElE,CAEA,oBAAM+B,CAAeC,EAAgCC,GAEpD,MAAMC,EAASC,MAAMC,KAAKnC,KAAKD,WAAWkC,QAC1CjC,KAAKoB,gBAAgBgB,UAAU,cAAeH,GAE9CjC,KAAK4B,2BAA2BS,WAAW,GACzC,CAEH,aAAMC,GACLtC,KAAK4B,2BAA2BW,aAAa,IAC7CC,QAAQC,IAAI,kBACZzC,KAAKqB,cAAcqB,KAAI,GACvBF,QAAQC,IAAI,gBACb,CAEA,aAAME,GACL3C,KAAK4B,2BAA2BW,aAAa,IAC7CC,QAAQC,IAAI,kBACZzC,KAAKoB,gBAAgBsB,KAAI,EAAO,CAAC,gBACjC1C,KAAKqB,cAAcqB,KAAI,GACvBF,QAAQC,IAAI,gBACb,CAEA,kBAAMG,GACL5C,KAAK4B,2BAA2BW,aAAa,IAC7CC,QAAQC,IAAI,uBACZzC,KAAKqB,cAAcqB,KAAI,GACvB1C,KAAKoB,gBAAgBsB,KAAI,EAAM,CAAC,gBAChCF,QAAQC,IAAI,qBACb,CACO,qBAAMI,CAAgBC,GAC5B,MACMC,EADkB/C,KAAKD,WAAWG,MAAMC,IAAI,MACd6C,OAAO,GAAGC,eAAeH,EAAkBI,WAC/ElD,KAAK4B,2BAA2BuB,4BAA4B,GAAKJ,EAClE,EAYM,MAAMlB,UAAmC,KAa/C,WAAA/B,CAAYC,GACXqD,MAAMrD,GATA,KAAAM,SAAU,EAGT,KAAAgD,qBAEJ,CAAC,EACY,KAAAC,0BAA4B,oBAK5CvD,EAAWG,MAAMqD,IAAI1B,EAA2B2B,KAAMxD,MACtDA,KAAKyD,MAAQ1D,EAAWG,MAAMC,IAAI,MAClCH,KAAK0D,QAAU3D,EAAWG,MAAMC,IAAI,MAEpCH,KAAKsB,oBAAsB,IAAI,EAAAC,kBAAkB,CAChDC,MAAO,WACPC,aAAa,EACbC,QAAS,IAGX,CAEO,GAAAvB,GACN,OAAOH,IACR,CAEO,eAAA2D,CAAgBjC,GACtB,IAAK,MAAMkC,KAAc5D,KAAK0D,QAAQG,KACpB7D,KAAK0D,QAAQG,KAAKD,GAE1BE,KAAKC,SAASC,SAASD,IAC/BA,EAAStC,aAAc,EACvBsC,EAASrC,QAAUA,EACnBqC,EAASE,aAAc,CAAI,GAG9B,CAEO,UAAA5B,CAAWX,GACjB1B,KAAKkE,2BAA2BxC,EACjC,CAEO,cAAAyC,CAAezC,EAAiB0C,GAEtC,IAAK,MAAMR,KAAcQ,EACxBpE,KAAKqD,qBAAqB3B,GAASkC,GAAYS,eAC9C,EACAD,EAAcR,IAKhB5D,KAAKyD,MAAMf,KAAI,EAAO0B,EACvB,CACO,2BAAAjB,CAA4BzB,EAAiB0C,GAEnD,IAAK,MAAMR,KAAc5D,KAAKqD,qBAAqB3B,GAClD1B,KAAKqD,qBAAqB3B,GAASkC,GAAYS,eAAc,GAI9D,IAAK,MAAMT,KAAcQ,EACxBpE,KAAKqD,qBAAqB3B,GAASkC,GAAYS,eAC9C,EACAD,EAAcR,IAKhB5D,KAAKyD,MAAMf,KAAI,GACf1C,KAAKyD,MAAMf,KAAI,EAAM0B,EACtB,CAEO,YAAA7B,CAAab,GACnB,IAAK,MAAMkC,KAAc5D,KAAKqD,qBAAqB3B,GAClD1B,KAAKqD,qBAAqB3B,GAASkC,GAAYS,eAAc,GAE9DrE,KAAKyD,MAAMf,KAAI,EAChB,CAEO,gBAAA4B,CAAiB5C,EAAiB0C,GACxC,IAAK,MAAMR,KAAcQ,EACxBpE,KAAKqD,qBAAqB3B,GAASkC,GAAYS,eAC9C,EACAD,EAAcR,IAKhB5D,KAAKyD,MAAMf,KAAI,EAAM0B,EACtB,CAEO,cAAAG,CAAe7C,G,MACrB,IAAK,MAAMkC,KAAc5D,KAAK0D,QAAQG,KAAM,CAC3C,MAAMW,EAAWxE,KAAK0D,QAAQG,KAAKD,GAC7Ba,EAAwBb,EAAa5D,KAAKsD,0BAC1CoB,EAAsBF,EAASG,UAAUF,GAE3CC,IACiB,QAApB,EAAAF,EAASV,KAAKc,cAAM,SAAEC,OAAOH,EAAoBZ,MACjDU,EAASM,eAAeL,GAExBzE,KAAKqD,qBAAqB3B,GAASkC,GAAYmB,iBACxC/E,KAAKqD,qBAAqB3B,GAASkC,G,CAG7C,CAEO,mBAAAoB,GACN,IAAK,MAAMtD,KAAW1B,KAAKqD,qBAC1BrD,KAAKuE,eAAeU,OAAOvD,GAE7B,CAEQ,0BAAAwC,CAA2BxC,G,MAClC,IAAI1B,KAAKqD,qBAAqB3B,GAA9B,CAIA1B,KAAKqD,qBAAqB3B,GAAW,CAAC,EAEtC,IAAK,MAAMkC,KAAc5D,KAAK0D,QAAQG,KAAM,CAC3C,MAAMW,EAAqBxE,KAAK0D,QAAQG,KAAKD,GACvCsB,EAAuBV,EAASV,KAAKC,SAASoB,KAAKpB,GACxD/D,KAAKoF,0BAA0BrB,EAAUrC,KAEpC+C,EAAwBb,EAAa5D,KAAKsD,0BAC1CoB,EAAiCF,EAASa,YAC/CZ,EACAS,GAEmB,QAApB,EAAAV,EAASV,KAAKc,cAAM,SAAErB,IAAImB,EAAoBZ,MAE9CY,EAAoBZ,KAAKwB,YAAc,EACvCZ,EAAoBZ,KAAKyB,eAAgB,EAEzCvF,KAAKwF,wBAAwBhB,EAASV,KAAMY,EAAoBZ,MAGhEY,EAAoBL,eAAc,GAClCrE,KAAKqD,qBAAqB3B,GAASkC,GAAcc,C,EAEnD,CAEQ,yBAAAU,CAA0BrB,EAAoBrC,GACrD,OAAO1B,KAAKsB,mBASb,CAEQ,uBAAAkE,CACPxD,EACAyD,GAEA,GAA6B,OAAzBzD,EAAO0D,cAIX,IAAK,IAAIC,EAAI,EAAGA,GAAKF,EAAOG,MAAOD,IAAK,CACvC,MAAMnE,EAAQ,IAAI,EAAAqE,MAClB7D,EAAO8D,WAAWH,EAAGnE,GACrBiE,EAAOM,WAAWJ,EAAGnE,E,CAEvB,EA3KgB,EAAAgC,KAAO,uCCzFjB,MAAMwC,EAIZ,WAAAlG,CAAoBC,GAAA,KAAAA,WAAAA,EAFZ,KAAAM,SAAmB,EAG1BL,KAAKiG,QAAU,IAAI,KAAkBlG,EACtC,CAEG,iBAAMY,CAAYD,GACrB,CACA,eAAME,CAAUF,GACb,CAEH,aAAMG,CAAQH,GACTV,KAAKK,SAA4B,IAAjBK,EAAMI,SACrBJ,EAAMwF,QACTlG,KAAKiG,QAAQE,SAEbnG,KAAKiG,QAAQlF,SAEhB,CACA,mBAAMN,CAAcC,GACjB,CACH,cAAMJ,GACLN,KAAKK,SAAU,EACfL,KAAKiG,QAAQ5F,SAAU,CAExB,CACA,gBAAME,GACLP,KAAKK,SAAU,CAEb,E,4DC7BG,MAAM+F,EAGZ,sBAAIA,GACH,OAAOpG,KAAKqG,kBACb,CASA,WAAAvG,CAAoBC,GAAA,KAAAA,WAAAA,EAZZ,KAAAsG,oBAA8B,EAK9B,KAAAC,kBAAsC,IAAIC,EAAcvG,KAAKD,YAC7D,KAAAyG,kBAAsC,IAAIC,EAAczG,KAAKD,YAE7D,KAAA2G,wBAAuD,IAAIC,IAE3D,KAAAC,gBAAkB5G,KAAKD,WAAWG,MAAMC,IAAI,MAmB5C,KAAA0G,SAAW,CAAC,WAhBpB,CAIA,oBAAM/E,CAAeC,EAAgCC,GAChDA,IAAW,EAAA8E,eAAeC,UACvB/G,KAAKsG,kBAAkBxE,eAAeC,EAAgBC,GAClDA,IAAW,EAAA8E,eAAeE,WAC9BhH,KAAKwG,kBAAkB1E,eAAeC,EAAgBC,GAG7DhC,KAAK0G,wBAAwBhE,IAAIX,EAAekF,GAAIjF,GAEpDhC,KAAKkH,sBAAsBlH,KAAKqG,mBAC9B,CAIH,qBAAAa,CAAsBC,GAErBnH,KAAK4G,gBAAgB5D,OAAOgB,SAAQoD,IACnC,IAAKA,EAAMC,QACV,OAED,MAAMrF,EAAShC,KAAK0G,wBAAwBvG,IAAIiH,EAAMH,IAClDjF,IAAW,EAAA8E,eAAeC,IAC7B/G,KAAKsG,kBAAkBgB,kCAAkCtH,KAAK6G,SAAUO,EAAOD,GAEvEnF,IAAW,EAAA8E,eAAeE,KAClChH,KAAKwG,kBAAkBc,kCAAkCtH,KAAK6G,SAAUO,EAAOD,E,IAIjFnH,KAAKqG,mBAAqBc,CAC3B,EAOM,MAAMV,EAGZ,WAAA3G,CAAoBC,GAAA,KAAAA,WAAAA,EACnBC,KAAKuH,mBAAqBxH,EAAWG,MAAMC,IAAIqH,EAAA,EAChD,CAKA,oBAAM1F,CAAeC,EAAgCC,GAErD,CAEA,iCAAAsF,CAAkCT,EAAoBO,EAAuBK,GAC5E,MAAMb,EAAkB5G,KAAKD,WAAWG,MAAMC,IAAI,MAE5CuH,EAAQN,EAAMO,qBACpB,IAAKD,EACJ,OAED,IAAIE,EAAoB,GAGpBC,EADUC,OAAOC,OAAOL,GACNM,QAAOrC,GAAKkB,EAASoB,MAAKC,IAAI,MAAC,OAAAA,EAAEC,gBAA6B,QAAZ,EAAAxC,EAAW,eAAC,eAAEwC,cAAc,MACpG,IAAK,IAAIC,KAASP,EAAS,CAC1B,IAAIQ,EAAWD,EAAgB,SAC/B,GAAIC,EAAU,CAEb,MAAMC,EAAwBtI,KAAKuH,mBAAmBgB,uBAAuBnB,EAAMH,IACnF,IAAKqB,EACJ,OAED,IAAIrB,EAAKqB,EAAsBE,gBAAgBrI,IAAIkI,GAC/CpB,GACHW,EAAQa,KAAKxB,E,EAIFL,EAAgB5D,OAAO0F,SAAQ/C,GAAKA,EAAEgD,QAE9C3E,SAAQ4E,IACbhB,EAAQ5D,SAAQiD,IACX2B,EAAKC,IAAIC,IAAI7B,IAChB2B,EAAKvE,cAAcoD,EAAM,CAACR,GAAI,GAC9B,GAGJ,EAGM,MAAMV,EAGZ,WAAAzG,CAAoBC,GAAA,KAAAA,WAAAA,EACnBC,KAAK+I,WAAa,IAAI,KAAuBhJ,EAC9C,CAOA,oBAAM+B,CAAeC,EAAgCC,GACpD,GAAIA,IAAW,EAAA8E,eAAeC,IAC7B,aAGK/G,KAAK+I,WAAWhE,UACtB/E,KAAK+I,WAAWC,SAASjH,GAEzB,MAAMkH,EAAiBjJ,KAAK+I,WAAW5I,MACvCqC,QAAQC,IAAI,sBAAuBwG,GAEnCjJ,KAAKkJ,SAAWD,EAAeC,QAChC,CAEA,iCAAA5B,CAAkCT,EAAoBO,EAAuBK,GAC5E,MAAMpG,EAAgBrB,KAAKD,WAAWG,MAAMC,IAAI,MAE1C+I,EAAWlJ,KAAKkJ,SACtB,GAAIA,EACH,IAAK,IAAIC,KAAWtC,EAAU,CAC7B,IAAIuC,EAASF,EAASC,EAAQhB,eAC1BiB,IACH5G,QAAQC,IAAI,cAAe2G,GAC3B/H,EAAcqB,IAAI+E,EAAM2B,G,CAI5B,ECpJM,MAAMC,EAIT,WAAAvJ,CAAoBC,GAAA,KAAAA,WAAAA,EACtBC,KAAKsJ,gBAAkB,IAAI,KAAoBvJ,GAC/CC,KAAKsJ,gBAAgBjJ,SAAU,CAChC,CAEA,cAAMC,GACLN,KAAKsJ,gBAAgBjJ,SAAU,CAChC,CAEA,gBAAME,GACLP,KAAKsJ,gBAAgBjJ,SAAU,QACzBL,KAAKsJ,gBAAgB9I,WAC5B,CAEA,mBAAMC,CAAcC,GACpB,CAEA,iBAAMC,CAAYD,GAClB,CAEA,eAAME,CAAUF,GAChB,CAEA,aAAMG,CAAQH,GACQ,IAAjBA,EAAMI,QACTd,KAAKsJ,gBAAgBvI,SACrByB,QAAQC,IAAI,2BAEa,IAAjB/B,EAAMI,SACdd,KAAKsJ,gBAAgBC,cACrB/G,QAAQC,IAAI,+BAEd,E,0BCnBM,MAAM+G,EAYZ,WAAA1J,CAAoB2J,EAAsCC,EAAgCC,GAAtE,KAAAF,YAAAA,EAAsC,KAAAC,eAAAA,EAF1C,KAAAE,sBAA+C,GAG9D,MAAM7J,EAAa2J,EAAeG,KAClC7J,KAAK2J,oBAAsBA,EAC3B3J,KAAK8J,kBAAoB,IAAIjK,EAAkBE,GAC/CC,KAAK+J,gBAAkB,IAAIV,EAAgBtJ,GAC3CC,KAAKgK,SAAW,IAAIhE,EAASjG,GAE7BC,KAAKiK,eAAiB,IAAIhJ,EAAelB,GACzCC,KAAKqG,mBAAqB,IAAID,EAAmBrG,GACjDC,KAAKkK,mBAAqB,IAAIC,EAAA,EAAmBT,GAEjD1J,KAAK4J,sBAAsBnB,KAAKzI,KAAKiK,gBACrCjK,KAAK4J,sBAAsBnB,KAAKzI,KAAKqG,mBACtC,CAEA,wBAAM+D,CAAmBC,GAExB,OADA7H,QAAQC,IAAI,gDAAiD4H,GACrDA,GACP,KAAK,IAASC,sBACPtK,KAAKyJ,YAAYc,QAAQvK,KAAK2J,qBACpC,MACD,KAAK,IAASa,oBACPxK,KAAKyJ,YAAYc,QAAQvK,KAAK8J,mBACpC,MACD,KAAK,IAASW,kBACPzK,KAAKyJ,YAAYc,QAAQvK,KAAK+J,iBACpC,MACD,KAAK,IAAS/D,eACPhG,KAAKyJ,YAAYc,QAAQvK,KAAKgK,UAGvC,CACA,oBAAMU,SACC1K,KAAKiK,eAAe3H,SAC3B,CACA,yBAAMqI,SACC3K,KAAKiK,eAAerH,eAC1B5C,KAAKqG,mBAAmBa,sBAAsBlH,KAAKqG,mBAAmBD,mBACvE,CACA,oBAAMwE,SACC5K,KAAKiK,eAAetH,UAC1B3C,KAAKqG,mBAAmBa,sBAAsBlH,KAAKqG,mBAAmBD,mBACvE,CACA,kBAAMyE,CAAa1D,GAClBnH,KAAKqG,mBAAmBa,sBAAsBC,EAC/C,CAEA,mBAAM2D,CAAc5H,G,MACnBV,QAAQC,IAAI,iCAAkCS,EAAUA,UAAU6H,OAAO,UAAW7H,EAAU8H,eAAeD,QAC7G/K,KAAKiL,iBAAiB/H,GACtB,MAAMgI,EAA4BhI,EAAUA,UAEtCiI,GAD8C,QAAnB,EAAAnL,KAAK0J,sBAAc,eAAE0B,UACEnI,eAAeiI,GAYjEG,EAAiBvD,OAAOwD,KAAKH,GAAyBJ,OAC5DvI,QAAQC,IAAI,sDAAuDyI,EAClE,kBAAmBG,GAKpB,MAAME,EAAcvL,KAAK0J,eAAgB6B,aACzC,QAAuBA,EAAaJ,EACrC,CAEA,gBAAAF,CAAiB/H,G,MAChB,MAAMsI,EAAuC,QAAnB,EAAAxL,KAAK0J,sBAAc,eAAE9J,YAE/C,IAAK,IAAI6L,KAAcvI,EAAU8H,eAAgB,CAChD,IAAKS,EAAY,CAAEjJ,QAAQC,IAAI,6BAA8BgJ,GAAa,Q,CAC1E,KAAMA,KAAcD,GAAW,CAAEhJ,QAAQC,IAAI,yBAA0BgJ,GAAa,Q,CACpF,MAAMC,EAAsBF,EAASC,GACjCC,EAAWX,QAAU,EAAKvI,QAAQC,IAAI,0CAA2CgJ,EAAYC,GACjGlJ,QAAQC,IAAI,oDAAqDgJ,EAAYC,E,CAE/E,CAEA,iBAAMC,CAAYzI,G,UACjB,MAAM0I,EAA2B,QAAnB,EAAA5L,KAAK0J,sBAAc,eAAE0B,SAAUnI,eAAeC,EAAUA,WAC7C,QAAzB,EAAmB,QAAnB,EAAAlD,KAAK0J,sBAAc,eAAEG,YAAI,SAAE3J,MAAMC,IAAI,MAAmBuC,KAAI,EAAOkJ,EACpE,CAEA,mBAAMC,CAAc3I,G,YACblD,KAAK8K,cAAc5H,GAEzB,MAAM4I,EAA4D,QAAxB,EAAA9L,KAAK0J,eAAeG,YAAI,eAAEiC,OACpE,IAAKA,EACJ,OAID,GAA+C,IAA3C9L,KAAK0J,eAAeqC,IAAK/I,OAAO+H,OACnC,MAAM,IAAIiB,MAAM,sDAGjB,MAAMC,EAAuCjM,KAAK0J,eAAeqC,IAAK/I,OAAO,GAAGC,eAAeC,EAAUA,WACnGgJ,EAAoBlM,KAAKkK,mBAAmBiC,uBAAuBF,GAGzEH,EAAOM,SAASC,YAAYH,EAAaI,kBAAkB,IAAI,EAAAC,SAAW,GACxEC,MAAKC,GAAKjK,QAAQC,IAAI,YAAagK,IACtC,CAEA,iBAAMC,CAAYxJ,GACjB,MAAM,IAAI8I,MAAM,0BACjB,CAEA,sBAAMW,CAAiBzJ,GACtB,MAAM,IAAI8I,MAAM,0BACjB,CAEA,gBAAMY,CAAW1J,G,UAChB,MAAM0I,EAA2B,QAAnB,EAAA5L,KAAK0J,sBAAc,eAAE0B,SAAUnI,eAAeC,EAAUA,WAC7C,QAAzB,EAAmB,QAAnB,EAAAlD,KAAK0J,sBAAc,eAAEG,YAAI,SAAE3J,MAAMC,IAAI,MAAmB0M,QAAQjB,EACjE,CAEA,qBAAM/I,CAAgBC,SACf9C,KAAK4K,uBACL5K,KAAKiK,eAAepH,gBAAgBC,EAC3C,E,mCC1JM,MAAMgK,EAGZ,WAAAhN,CAAYiN,GAiBJ,KAAAC,cAAwB,EAhB/BhN,KAAKiN,WAAaF,EAClB/M,KAAKiN,WAAW3M,UACjB,CAEO,aAAMiK,CAAQF,GACpB7H,QAAQC,IAAI,0BAA2B4H,GACnCrK,KAAKiN,kBACFjN,KAAKiN,WAAW1M,aAGvBP,KAAKiN,WAAa5C,EACdrK,KAAKiN,kBACFjN,KAAKiN,WAAW3M,UAExB,CAIO,iBAAMK,CAAYD,GACxBV,KAAKgN,cAAgBtM,EAAMwM,UAEvBlN,KAAKiN,kBACFjN,KAAKiN,WAAWtM,YAAYD,EAEpC,CAEO,eAAME,CAAUF,GAElBA,EAAMwM,UAAYlN,KAAKgN,cAAgB,KACtChN,KAAKiN,kBACFjN,KAAKiN,WAAWpM,QAAQH,GAI5BV,KAAKiN,kBACFjN,KAAKiN,WAAWrM,UAAUF,EAElC,CAEO,mBAAMD,CAAcC,GACtBV,KAAKiN,kBACFjN,KAAKiN,WAAWxM,cAAcC,EAEtC,CAEO,oCAAOyM,CAA8BC,EAAwBC,GACnED,EAAUE,iBAAiB,aAAaC,MAAO7M,GAAqB2M,EAAgB1M,YAAYD,KAChG0M,EAAUE,iBAAmB,WAAWC,MAAO7M,GAAqB2M,EAAgBzM,UAAUF,KAC9F0M,EAAUE,iBAAiB,YAAYC,MAAO7M,GAAqB2M,EAAgB5M,cAAcC,IAClG,E,6DC9CM,MAAM8M,EAEZ,WAAA1N,CAAoB2N,EAA4BlC,EAA8CmC,GAA1E,KAAAD,GAAAA,EAA4B,KAAAlC,YAAAA,EAA8C,KAAAmC,gBAAAA,CAC9F,CAEA,cAAMpN,GACDN,KAAKuL,cACRvL,KAAKuL,YAAYlL,SAAU,EAC7B,CAEA,gBAAME,G,MACDP,KAAKuL,cACRvL,KAAKuL,YAAYlL,SAAU,IAGvB,YACJ,QAA0BL,KAAKuL,aAEhB,QAAhB,EAAAvL,KAAKuL,mBAAW,SAAEoC,MAAM,KACzB,CAEA,mBAAMlN,CAAcC,GACpB,CAEA,iBAAMC,CAAYD,GAClB,CAEA,eAAME,CAAUF,GAChB,CAEA,aAAMG,CAAQH,GACQ,IAAjBA,EAAMI,cACH0M,EAAoBI,iBAAiB5N,KAAKuL,YAAcvL,KAAKyN,GAAIzN,KAAK0N,gBAE9E,CAEQ,6BAAaE,CAAiBrC,EAAsCkC,EAAoBI,G,YAG/FrL,QAAQC,IAAI,oBAAqB8I,EAAYuC,gBAGxC,YACJ,QAA0BvC,GAG3B,MAAMwC,QAA0DxC,EAAYyC,UAAU,MATxD,GAU9BxL,QAAQC,IAAI,cAAesL,GAC3B,MAAME,EAA6B1C,EAAY2C,UAAU,MACzD1L,QAAQC,IAAI,kBAAmBwL,GAE1BF,GACJvL,QAAQC,IAAI,cAab,MAAM0L,EAAwBlJ,OAAO8I,aAAG,EAAHA,EAAK9G,IACpCmH,EAAiCL,aAAG,EAAHA,EAAKpJ,UAAU,GAChDyC,EAAoCgH,aAAQ,EAARA,EAAUhH,MAC9CM,EAAmCN,aAAK,EAALA,EAAOO,qBAC1C0G,EAA6C3G,EAAQA,EAAMyG,QAAiBG,EAElF,IACC,MAAMC,EAA6C,QAA1B,EAAmB,QAAnB,EAAAF,aAAc,EAAdA,EAAgBG,WAAG,eAAEC,aAAK,QAAI,iBACjDC,EAAqBL,aAAc,EAAdA,EAAgBM,KAGrCC,EAAM,CAACT,gBAAeI,WAAUG,aAAYG,YAFE,QAAxB,EAAAR,aAAc,EAAdA,EAAgBS,gBAAQ,eAAEL,MAESM,QADnB,QAApB,EAAAV,aAAc,EAAdA,EAAgBW,YAAI,eAAEP,OAG9CjM,QAAQC,IAAImM,GACZ5O,KAAKiP,sBAAsBpB,EAAMI,EAASR,EAAImB,E,CAC7C,MAAOM,GACR1M,QAAQ2M,KAAKD,EAAGb,E,CAElB,CAEQ,4BAAOY,CACdpB,EACAI,EACAR,EACAmB,GAQA,MAAMQ,GAAU,QAAkBnB,GAClCzL,QAAQC,IAAI,wBAAyB2M,GACrCvB,EAAKwB,QAAQ,8BAA+B,CAC3C3O,MAAO,mBACPwC,UAAWkM,GAEb,E","sources":["webpack://client-app/./src/app/project/ifc-fun/OpenBimHandles.ts","webpack://client-app/./src/app/project/ifc-fun/Tools/LengthMeasureTool.ts","webpack://client-app/./src/app/project/ifc-fun/Tools/VisibilityTool.ts","webpack://client-app/./src/app/project/ifc-fun/Tools/CropTool.ts","webpack://client-app/./src/app/project/ifc-fun/Tools/IfcSpaceVisibility.ts","webpack://client-app/./src/app/project/ifc-fun/Tools/AreaMeasureTool.ts","webpack://client-app/./src/app/project/ifc-fun/OpenBimViewerThreeDService.ts","webpack://client-app/./src/app/project/ifc-fun/Tools/ModeToolHandler.ts","webpack://client-app/./src/app/project/ifc-fun/Tools/ObjectSelectionTool.ts"],"sourcesContent":["import * as OBC from \"openbim-components\";\r\nimport { FragmentsGroup } from 'bim-fragment';\r\nimport {EgFragmentLoader} from \"./EgMessagePackLoader/EgFragmentLoader\";\r\nimport {OpenBimViewerThreeDService} from \"./OpenBimViewerThreeDService\";\r\nimport { RevitMap } from \"./openbim-container\";\r\n\r\nexport class OpenBimHandles {\r\n\t/* JG: Denne klasse kan ogsaa opfattes \r\n\tsom et 'openBim SCOPE' eller en 'openBim CONTEXT'.\r\n\t Brugs-intentionen er følgende:\r\n\tEt parent/hosting objekt laver en instans af den,\r\n\tog styrer derved lifetime/lifecycle for det openBim-scope.\r\n\r\n\tDerudover videregiver den dette scope-objekt\r\n\ttil diverse nestede conceptuelle children.\r\n\tDels aurelia element/component children,\r\n\thvor den kan 'passe' ved at binde egenskaben som en input-parameter på det child.\r\n\tAlternativt ved direkte at assigne/kalde metoder,\r\n\tpå children den selv har referencer til.\r\n\t Det fungerer, idet det er en objekt-reference.\r\n\tDerved er det ikke så skrøbeligt som aurealias value-passing mekanisme for simple value bindings\r\n\t(e.g. af strings eller numbers), hvor vi oplever at ændringer i den bundne værdi ikke altid reflekteres.\r\n\t Det hjælper også, \r\n\tat vi ikke er afhængige af OpenBimHandles i rendered views/DOM elementer\r\n\t(ie vi har ikke behov for, at disse re-renderes.)\r\n\t*/\r\n\tcomp: OBC.Components | undefined;\r\n\tmgr: OBC.FragmentManager | undefined;\r\n\tloader: OBC.FragmentIfcLoader | undefined;\r\n\tmpkLoader: EgFragmentLoader | undefined;\t// Loader for the message pack format\r\n\thighlighter: OBC.FragmentHighlighter | undefined; // in-for openbim-container. MAY NOT BE NECESSARY, instead we could request it from COMPONENTS? \r\n\r\n\t// fixme, should be robust for >1 model/revision loaded!\r\n\ttheModel: FragmentsGroup | undefined;\r\n\r\n\topenbimViewerThreeDService: OpenBimViewerThreeDService|undefined;\r\n\r\n\ttmpRevitMap:RevitMap = {};\r\n}\r\n","import * as OBC from \"openbim-components\";\r\nimport {ModeTool} from \"./ModeTool\";\r\nimport {Components} from \"openbim-components\";\r\n\r\nexport class LengthMeasureTool implements ModeTool {\r\n\r\n\tprivate dimensions: OBC.LengthMeasurement;\r\n\r\n constructor(private components: Components) {\r\n\t\tthis.dimensions = this.components.tools.get(OBC.LengthMeasurement);\r\n\t\tthis.dimensions.snapDistance = 1;\r\n\t\tthis.dimensions.enabled = false;\r\n\t}\r\n\r\n\tasync activate(): Promise {\r\n\t\tthis.dimensions.enabled = true;\r\n\t}\r\n\r\n\tasync deactivate(): Promise {\r\n\t\tthis.dimensions.enabled = false;\r\n\t\tawait this.dimensions.deleteAll();\r\n\t}\r\n\r\n\tasync onDoubleClick(event: MouseEvent): Promise {\r\n\t}\r\n\t\r\n\tasync onMouseDown(event: MouseEvent): Promise {\r\n\t}\r\n\r\n\tasync onMouseUp(event: MouseEvent): Promise {\r\n\t}\r\n\t\r\n\tasync onClick(event: MouseEvent): Promise {\r\n\t\tif (event.button === 0) { // Left mouse button \r\n\t\t\tawait this.dimensions.create();\r\n\t\t}\r\n\t\telse if (event.button === 2) { // Right mouse button\r\n\t\t\tthis.dimensions.cancelCreation();\r\n\t\t}\r\n\t}\r\n}\r\n","import {\r\n\tComponents,\r\n\tFragmentHider, FragmentIdMap,\r\n\tFragmentManager,\r\n\tMaterialManager\r\n} from \"openbim-components\";\r\nimport {\r\n\tMaterial,\r\n\tMeshBasicMaterial\r\n} from \"three\";\r\nimport {ModelLoadCallbackIF} from \"../EgMessagePackLoader/ModelLoadCallbackIF\";\r\nimport {Fragment, FragmentsGroup} from \"bim-fragment\";\r\nimport {FragmentSource, ObjectIDsIF} from \"../openbim-container\";\r\nimport * as OBC from \"openbim-components\";\r\nexport class VisibilityTool implements ModelLoadCallbackIF {\r\n\tprivate materialManager: MaterialManager;\r\n\tprivate fragmentHider: FragmentHider;\r\n\r\n\tprivate readonly translucentMaterial: MeshBasicMaterial;\r\n\t\r\n\tprivate readonly _translucentAll = 'translucent';\r\n\tprivate readonly _translucentPerFragment = 'translucentPerFragment';\r\n\r\n\r\n\tprivate fragmentTransparencyStyler: FragmentTransparencyStyler;\r\n\r\n\tconstructor(private components: Components) {\r\n\t\tthis.materialManager = components.tools.get(MaterialManager);\r\n\t\tthis.fragmentHider = components.tools.get(FragmentHider);\r\n\t\t\r\n\t\tthis.translucentMaterial = new MeshBasicMaterial({\r\n\t\t\tcolor: 'darkblue',\r\n\t\t\ttransparent: true,\r\n\t\t\topacity: 0.1\r\n\t\t});\r\n\t\t\r\n\t\tthis.materialManager.addMaterial(this._translucentAll, this.translucentMaterial);\r\n\t\tthis.materialManager!.addMaterial(this._translucentPerFragment, this.translucentMaterial);\r\n\r\n\t\tthis.fragmentTransparencyStyler = new FragmentTransparencyStyler(components);\r\n\t\t\r\n\t}\r\n\r\n\tasync afterModelLoad(fragmentsGroup: FragmentsGroup, source: FragmentSource): Promise {\r\n\t\t// We need to add the meshes to the translucent material every time a new model is loaded.\r\n\t\tconst meshes = Array.from(this.components.meshes);\r\n\t\tthis.materialManager.addMeshes('translucent', meshes);\r\n\t\t\r\n\t\tthis.fragmentTransparencyStyler.addOpacity(0.1);\r\n }\r\n\t\r\n\tasync hideAll() {\r\n\t\tthis.fragmentTransparencyStyler.resetOpacity(0.1);\r\n\t\tconsole.log('Before hideAll');\r\n\t\tthis.fragmentHider.set(false);\r\n\t\tconsole.log('After hideAll');\r\n\t}\r\n\t\r\n\tasync showAll() {\r\n\t\tthis.fragmentTransparencyStyler.resetOpacity(0.1);\r\n\t\tconsole.log('Before showAll');\r\n\t\tthis.materialManager.set(false, ['translucent']);\r\n\t\tthis.fragmentHider.set(true);\r\n\t\tconsole.log('After showAll');\r\n\t}\r\n\t\r\n\tasync transluteAll() {\r\n\t\tthis.fragmentTransparencyStyler.resetOpacity(0.1);\r\n\t\tconsole.log('Before transluteAll');\r\n\t\tthis.fragmentHider.set(true);\r\n\t\tthis.materialManager.set(true, ['translucent']);\r\n\t\tconsole.log('After transluteAll');\r\n\t}\r\n\tpublic async transluteOthers(selectedObjectIds: ObjectIDsIF) {\r\n\t\tconst fragmentManager = this.components.tools.get(FragmentManager);\r\n\t\tconst fragmentMap = fragmentManager.groups[0].getFragmentMap(selectedObjectIds.objectIds);\r\n\t\tthis.fragmentTransparencyStyler.setOpacityOfNonSelectedById(0.1, fragmentMap);\r\n\t}\r\n}\r\n\r\nimport {\r\n\tComponent\r\n} from 'openbim-components';\r\nimport {\r\n\tColor,\r\n\tInstancedMesh,\r\n\tMatrix4\r\n} from 'three';\r\n\r\nexport class FragmentTransparencyStyler extends Component {\r\n\r\n\tprivate readonly translucentMaterial: MeshBasicMaterial;\r\n\t\r\n\tstatic readonly uuid = 'e124cf3a-111c-47d7-98ad-11f0d92db181';\r\n\tpublic enabled = true;\r\n\tprivate hider: FragmentHider;\r\n\tprivate manager: FragmentManager;\r\n\tprivate transparentFragments: {\r\n\t\t[opacity: number]: { [fragmentId: string]: Fragment };\r\n\t} = {};\r\n\tprivate readonly transparentFragmentSuffix = '_transparent_copy';\r\n\r\n\tconstructor(components: Components) {\r\n\t\tsuper(components);\r\n\r\n\t\tcomponents.tools.add(FragmentTransparencyStyler.uuid, this);\r\n\t\tthis.hider = components.tools.get(FragmentHider);\r\n\t\tthis.manager = components.tools.get(FragmentManager);\r\n\r\n\t\tthis.translucentMaterial = new MeshBasicMaterial({\r\n\t\t\tcolor: 'darkblue',\r\n\t\t\ttransparent: true,\r\n\t\t\topacity: 0.1\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tpublic get(): FragmentTransparencyStyler {\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic setModelOpacity(opacity: number) {\r\n\t\tfor (const fragmentId in this.manager.list) {\r\n\t\t\tconst fragment = this.manager.list[fragmentId];\r\n\r\n\t\t\tfragment.mesh.material.forEach((material) => {\r\n\t\t\t\tmaterial.transparent = true;\r\n\t\t\t\tmaterial.opacity = opacity;\r\n\t\t\t\tmaterial.needsUpdate = true;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic addOpacity(opacity: number) {\r\n\t\tthis.createTransparentFragments(opacity);\r\n\t}\r\n\r\n\tpublic setOpacityById(opacity: number, fragmentIdMap: FragmentIdMap) {\r\n\t\t// Make the transparent fragments visible.\r\n\t\tfor (const fragmentId in fragmentIdMap) {\r\n\t\t\tthis.transparentFragments[opacity][fragmentId].setVisibility(\r\n\t\t\t\ttrue,\r\n\t\t\t\tfragmentIdMap[fragmentId],\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Hide the main items so the transparent ones are visible.\r\n\t\tthis.hider.set(false, fragmentIdMap);\r\n\t}\r\n\tpublic setOpacityOfNonSelectedById(opacity: number, fragmentIdMap: FragmentIdMap) {\r\n\t\t// Set every transparentFragment to be visible.\r\n\t\tfor (const fragmentId in this.transparentFragments[opacity]) {\r\n\t\t\tthis.transparentFragments[opacity][fragmentId].setVisibility(true);\r\n\t\t}\r\n\t\t\r\n\t\t// Make the transparent fragments visible.\r\n\t\tfor (const fragmentId in fragmentIdMap) {\r\n\t\t\tthis.transparentFragments[opacity][fragmentId].setVisibility(\r\n\t\t\t\tfalse,\r\n\t\t\t\tfragmentIdMap[fragmentId],\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Hide the main items so the transparent ones are visible.\r\n\t\tthis.hider.set(false);\r\n\t\tthis.hider.set(true, fragmentIdMap);\r\n\t}\r\n\t\r\n\tpublic resetOpacity(opacity: number) {\r\n\t\tfor (const fragmentId in this.transparentFragments[opacity]) {\r\n\t\t\tthis.transparentFragments[opacity][fragmentId].setVisibility(false);\r\n\t\t}\r\n\t\tthis.hider.set(true);\r\n\t}\r\n\r\n\tpublic clearOpacityById(opacity: number, fragmentIdMap: FragmentIdMap) {\r\n\t\tfor (const fragmentId in fragmentIdMap) {\r\n\t\t\tthis.transparentFragments[opacity][fragmentId].setVisibility(\r\n\t\t\t\tfalse,\r\n\t\t\t\tfragmentIdMap[fragmentId],\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Show the main fragments.\r\n\t\tthis.hider.set(true, fragmentIdMap);\r\n\t}\r\n\r\n\tpublic disposeOpacity(opacity: number) {\r\n\t\tfor (const fragmentId in this.manager.list) {\r\n\t\t\tconst fragment = this.manager.list[fragmentId];\r\n\t\t\tconst transparentFragmentId = fragmentId + this.transparentFragmentSuffix;\r\n\t\t\tconst transparentFragment = fragment.fragments[transparentFragmentId];\r\n\r\n\t\t\tif (transparentFragment) {\r\n\t\t\t\tfragment.mesh.parent?.remove(transparentFragment.mesh);\r\n\t\t\t\tfragment.removeFragment(transparentFragmentId);\r\n\r\n\t\t\t\tthis.transparentFragments[opacity][fragmentId].dispose();\r\n\t\t\t\tdelete this.transparentFragments[opacity][fragmentId];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic disposeAllOpacities() {\r\n\t\tfor (const opacity in this.transparentFragments) {\r\n\t\t\tthis.disposeOpacity(Number(opacity));\r\n\t\t}\r\n\t}\r\n\r\n\tprivate createTransparentFragments(opacity: number) {\r\n\t\tif (this.transparentFragments[opacity]) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.transparentFragments[opacity] = {};\r\n\r\n\t\tfor (const fragmentId in this.manager.list) {\r\n\t\t\tconst fragment: Fragment = this.manager.list[fragmentId];\r\n\t\t\tconst transparentMaterials = fragment.mesh.material.map((material: Material) =>\r\n\t\t\t\tthis.copyToTransparentMaterial(material, opacity),\r\n\t\t\t);\r\n\t\t\tconst transparentFragmentId = fragmentId + this.transparentFragmentSuffix;\r\n\t\t\tconst transparentFragment : Fragment = fragment.addFragment(\r\n\t\t\t\ttransparentFragmentId,\r\n\t\t\t\ttransparentMaterials,\r\n\t\t\t);\r\n\t\t\tfragment.mesh.parent?.add(transparentFragment.mesh);\r\n\r\n\t\t\ttransparentFragment.mesh.renderOrder = 2;\r\n\t\t\ttransparentFragment.mesh.frustumCulled = false;\r\n\r\n\t\t\tthis.copyInstancedMeshColors(fragment.mesh, transparentFragment.mesh);\r\n\r\n\t\t\t// The transparent fragment is initially hidden.\r\n\t\t\ttransparentFragment.setVisibility(false);\r\n\t\t\tthis.transparentFragments[opacity][fragmentId] = transparentFragment;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate copyToTransparentMaterial(material: Material, opacity: number) {\r\n\t\treturn this.translucentMaterial;\r\n\t\t/*\r\n\t\tconst transparentMaterial = new MeshLambertMaterial();\r\n\t\ttransparentMaterial.copy(material);\r\n\t\ttransparentMaterial.transparent = true;\r\n\t\ttransparentMaterial.opacity = opacity;\r\n\r\n\t\treturn transparentMaterial;\r\n\t\t */\r\n\t}\r\n\r\n\tprivate copyInstancedMeshColors(\r\n\t\tsource: InstancedMesh,\r\n\t\ttarget: InstancedMesh,\r\n\t) {\r\n\t\tif (source.instanceColor === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i <= target.count; i++) {\r\n\t\t\tconst color = new Color();\r\n\t\t\tsource.getColorAt(i, color);\r\n\t\t\ttarget.setColorAt(i, color);\r\n\t\t}\r\n\t}\r\n}\r\n","import {ModeTool} from \"./ModeTool\";\r\nimport * as OBC from \"openbim-components\";\r\nimport {SimpleClipper, SimplePlane} from \"openbim-components\";\r\n\r\nexport class CropTool implements ModeTool {\r\n\tprivate clipper: SimpleClipper;\r\n\tprivate enabled: boolean = false;\r\n\t\r\n\tconstructor(private components: OBC.Components) {\r\n\t\tthis.clipper = new OBC.SimpleClipper(components);\r\n\t}\r\n\t\r\n async onMouseDown(event: MouseEvent): Promise {\r\n\t}\r\n\tasync onMouseUp(event: Event): Promise {\r\n }\r\n\t\r\n\tasync onClick(event: MouseEvent): Promise {\r\n\t\tif (this.enabled && event.button === 0) { // Left mouse button\r\n\t\t\tif (event.ctrlKey)\r\n\t\t\t\tthis.clipper.delete();\r\n\t\t\telse\r\n\t\t\t\tthis.clipper.create();\r\n\t\t}\r\n\t}\r\n\tasync onDoubleClick(event: Event): Promise {\r\n }\r\n\tasync activate(): Promise {\r\n\t\tthis.enabled = true;\r\n\t\tthis.clipper.enabled = true;\r\n\t\t//this.clipper.enabled = true;\r\n\t}\r\n\tasync deactivate(): Promise {\r\n\t\tthis.enabled = false;\r\n //this.clipper.enabled = false;\r\n }\r\n\t\r\n}\r\n","import * as OBC from 'openbim-components';\r\nimport {ModelLoadCallbackIF} from \"../EgMessagePackLoader/ModelLoadCallbackIF\";\r\nimport {FragmentsGroup} from \"bim-fragment\";\r\nimport {FragmentSource} from \"../openbim-container\";\r\nimport {IdMappingComponent} from \"../IdMappingComponent\";\r\nimport {FragmentClassifier, FragmentHider, FragmentIdMap} from \"openbim-components\";\r\nexport class IfcSpaceVisibility implements ModelLoadCallbackIF {\r\n\t\r\n\tprivate ifcSpaceVisibility: boolean = false;\r\n\tget IfcSpaceVisibility(): boolean {\r\n\t\treturn this.ifcSpaceVisibility;\r\n\t}\r\n\t\r\n\tprivate ifcVisibilityTool: VisibilityToolIF = new IfcVisibility(this.components);\r\n\tprivate mpkVisibilityTool: VisibilityToolIF = new MpkVisibility(this.components);\r\n\t\r\n\tprivate fragmentGroupIdToSource: Map = new Map();\r\n\r\n\tprivate fragmentManager = this.components.tools.get(OBC.FragmentManager);\r\n\r\n\tconstructor(private components: OBC.Components) {\r\n\t}\r\n\r\n\t// Do we support loading multiple models from differing sources?\r\n\r\n\tasync afterModelLoad(fragmentsGroup: FragmentsGroup, source: FragmentSource): Promise {\r\n\t\tif (source === FragmentSource.IFC) {\r\n\t\t\tawait this.ifcVisibilityTool.afterModelLoad(fragmentsGroup, source);\r\n\t\t} else if (source === FragmentSource.MPK) {\r\n\t\t\tawait this.mpkVisibilityTool.afterModelLoad(fragmentsGroup, source);\r\n\t\t}\r\n\r\n\t\tthis.fragmentGroupIdToSource.set(fragmentsGroup.id, source);\r\n\r\n\t\tthis.setIfcSpaceVisibility(this.ifcSpaceVisibility);\r\n }\r\n\r\n\tprivate ifcTypes = [\"IFCSPACE\"];\r\n\r\n\tsetIfcSpaceVisibility(shouldShowSpaces: boolean) {\r\n\t\t\r\n\t\tthis.fragmentManager.groups.forEach(group => {\r\n\t\t\tif (!group.visible)\r\n\t\t\t\treturn;\r\n\t\t\t\r\n\t\t\tconst source = this.fragmentGroupIdToSource.get(group.id);\r\n\t\t\tif (source === FragmentSource.IFC) {\r\n\t\t\t\tthis.ifcVisibilityTool.showOrHideIfcTypeForFragmentGroup(this.ifcTypes, group, shouldShowSpaces);\r\n\t\t\t}\r\n\t\t\telse if (source === FragmentSource.MPK) {\r\n\t\t\t\tthis.mpkVisibilityTool.showOrHideIfcTypeForFragmentGroup(this.ifcTypes, group, shouldShowSpaces);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.ifcSpaceVisibility = shouldShowSpaces;\r\n\t}\r\n}\r\n\r\nexport interface VisibilityToolIF extends ModelLoadCallbackIF {\r\n\tshowOrHideIfcTypeForFragmentGroup(ifcTypes: string[], group: FragmentsGroup, show: boolean): void;\r\n}\r\n\r\nexport class MpkVisibility implements VisibilityToolIF {\r\n\tprivate idMappingComponent: IdMappingComponent;\r\n\r\n\tconstructor(private components: OBC.Components) {\r\n\t\tthis.idMappingComponent = components.tools.get(IdMappingComponent);\r\n\t}\r\n\r\n\t// Do we support loading multiple models from differing sources?\r\n\r\n\t\r\n\tasync afterModelLoad(fragmentsGroup: FragmentsGroup, source: FragmentSource): Promise {\r\n\t\t\r\n\t}\r\n\r\n\tshowOrHideIfcTypeForFragmentGroup(ifcTypes: string[], group: FragmentsGroup, show: boolean): void {\r\n\t\tconst fragmentManager = this.components.tools.get(OBC.FragmentManager);\r\n\r\n\t\tconst props = group.getLocalProperties();\r\n\t\tif (!props)\r\n\t\t\treturn;\r\n\r\n\t\tlet itemIds: number[] = [];\r\n\r\n\t\tlet entries = Object.values(props);\r\n\t\tlet matches = entries.filter(i => ifcTypes.some(x => x.toUpperCase() == i[\"ifcType\"]?.toUpperCase()));\r\n\t\tfor (let match of matches) {\r\n\t\t\tlet globalId = match[\"globalId\"];\r\n\t\t\tif (globalId) {\r\n\t\t\t\t\r\n\t\t\t\tconst fragmentGroupMappings = this.idMappingComponent.getFromFragmentGroupId(group.id);\r\n\t\t\t\tif (!fragmentGroupMappings)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t\r\n\t\t\t\tlet id = fragmentGroupMappings.globalIdMapping.get(globalId);\r\n\t\t\t\tif (id)\r\n\t\t\t\t\titemIds.push(id);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst items = fragmentManager.groups.flatMap(i => i.items);\r\n\r\n\t\titems.forEach(item => {\r\n\t\t\titemIds.forEach(id => {\r\n\t\t\t\tif (item.ids.has(id))\r\n\t\t\t\t\titem.setVisibility(show, [id]);\r\n\t\t\t})\r\n\t\t});\r\n\r\n\t}\r\n}\r\n\r\nexport class IfcVisibility implements VisibilityToolIF {\r\n\tprivate classifier: FragmentClassifier;\r\n\r\n\tconstructor(private components: OBC.Components) {\r\n\t\tthis.classifier = new OBC.FragmentClassifier(components);\r\n\t}\r\n\r\n\t// Do we support loading multiple models from differing sources?\r\n\r\n\r\n\tprivate entities: { [p: string]: FragmentIdMap } | undefined;\r\n\r\n\tasync afterModelLoad(fragmentsGroup: FragmentsGroup, source: FragmentSource): Promise {\r\n\t\tif (source !== FragmentSource.IFC) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tawait this.classifier.dispose();\r\n\t\tthis.classifier.byEntity(fragmentsGroup);\r\n\t\t\r\n\t\tconst classification = this.classifier.get();\r\n\t\tconsole.log('IFC classification:', classification);\r\n\r\n\t\tthis.entities = classification.entities;\r\n\t}\r\n\r\n\tshowOrHideIfcTypeForFragmentGroup(ifcTypes: string[], group: FragmentsGroup, show: boolean): void {\r\n\t\tconst fragmentHider = this.components.tools.get(FragmentHider);\r\n\t\t\r\n\t\tconst entities = this.entities;\r\n\t\tif (entities) {\r\n\t\t\tfor (let ifcType of ifcTypes) {\r\n\t\t\t\tlet entity = entities[ifcType.toUpperCase()];\r\n\t\t\t\tif (entity) {\r\n\t\t\t\t\tconsole.log('IFC entity:', entity);\r\n\t\t\t\t\tfragmentHider.set(show, entity);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import * as OBC from \"openbim-components\";\r\nimport {ModeTool} from \"./ModeTool\";\r\nimport {Components} from \"openbim-components\";\r\n\r\nexport class AreaMeasureTool implements ModeTool {\r\n\r\n\tprivate areaMeasurement: OBC.AreaMeasurement;\r\n\r\n constructor(private components: Components) {\r\n\t\tthis.areaMeasurement = new OBC.AreaMeasurement(components);\r\n\t\tthis.areaMeasurement.enabled = false;\r\n\t}\r\n\r\n\tasync activate(): Promise {\r\n\t\tthis.areaMeasurement.enabled = true;\r\n\t}\r\n\r\n\tasync deactivate(): Promise {\r\n\t\tthis.areaMeasurement.enabled = false;\r\n\t\tawait this.areaMeasurement.deleteAll();\r\n\t}\r\n\r\n\tasync onDoubleClick(event: MouseEvent): Promise {\r\n\t}\r\n\t\r\n\tasync onMouseDown(event: MouseEvent): Promise {\r\n\t}\r\n\r\n\tasync onMouseUp(event: MouseEvent): Promise {\r\n\t}\r\n\t\r\n\tasync onClick(event: MouseEvent): Promise {\r\n\t\tif (event.button === 0) { // Left mouse button \r\n\t\t\tthis.areaMeasurement.create();\r\n\t\t\tconsole.log('AreaMeasureTool create');\r\n\t\t}\r\n\t\telse if (event.button === 2) { // Right mouse button\r\n\t\t\tthis.areaMeasurement.endCreation();\r\n\t\t\tconsole.log('AreaMeasureTool endCreation');\r\n\t\t}\r\n\t}\r\n}\r\n","import {ToolEnum, ViewerThreeDServiceIF} from \"app/services/ViewerThreeDServiceIF\";\r\nimport * as OBC from \"openbim-components\";\r\nimport {FragmentIdMap, SimpleCamera} from \"openbim-components\";\r\nimport {ModeToolHandler} from \"./Tools/ModeToolHandler\";\r\nimport {LengthMeasureTool} from \"./Tools/LengthMeasureTool\";\r\nimport {ObjectSelectionTool} from \"./Tools/ObjectSelectionTool\";\r\nimport {VisibilityTool} from \"./Tools/VisibilityTool\";\r\nimport {CropTool} from \"./Tools/CropTool\";\r\nimport {ModelLoadCallbackIF} from \"./EgMessagePackLoader/ModelLoadCallbackIF\";\r\nimport {IfcSpaceVisibility} from \"./Tools/IfcSpaceVisibility\";\r\nimport {AreaMeasureTool} from \"./Tools/AreaMeasureTool\";\r\nimport {ObjectIDsIF, RevitMap} from \"./openbim-container\";\r\nimport {FragmentsGroup} from \"bim-fragment\";\r\nimport {openbim_highlightOnIDs} from \"./openbim-highlighter\";\r\nimport {OpenBimHandles} from \"./OpenBimHandles\";\r\nimport {Box3, Sphere} from \"three\";\r\nimport {BoundingBoxUtility} from \"./BoundingBoxUtility\";\r\n\r\n/**\r\n * Facade class for viewer functionality.\r\n */\r\nexport class OpenBimViewerThreeDService implements ViewerThreeDServiceIF {\r\n\tprivate readonly objectSelectionTool: ObjectSelectionTool;\r\n\tprivate readonly lengthMeasureTool: LengthMeasureTool;\r\n\tprivate readonly areaMeasureTool: AreaMeasureTool;\r\n\tprivate readonly cropTool: CropTool;\r\n\t\r\n\tprivate readonly visibilityTool: VisibilityTool;\r\n\tprivate readonly ifcSpaceVisibility: IfcSpaceVisibility;\r\n\tprivate readonly boundingBoxUtility: BoundingBoxUtility;\r\n\t\r\n\tpublic readonly loadEventsSubscribers: ModelLoadCallbackIF[] = [];\r\n\r\n\tconstructor(private toolHandler: ModeToolHandler, private openBimHandles: OpenBimHandles, objectSelectionTool: ObjectSelectionTool) {\r\n\t\tconst components = openBimHandles.comp!;\r\n\t\tthis.objectSelectionTool = objectSelectionTool;\r\n\t\tthis.lengthMeasureTool = new LengthMeasureTool(components);\r\n\t\tthis.areaMeasureTool = new AreaMeasureTool(components);\r\n\t\tthis.cropTool = new CropTool(components);\r\n\r\n\t\tthis.visibilityTool = new VisibilityTool(components);\r\n\t\tthis.ifcSpaceVisibility = new IfcSpaceVisibility(components);\r\n\t\tthis.boundingBoxUtility = new BoundingBoxUtility(openBimHandles);\r\n\t\t\r\n\t\tthis.loadEventsSubscribers.push(this.visibilityTool);\r\n\t\tthis.loadEventsSubscribers.push(this.ifcSpaceVisibility);\r\n\t}\r\n\t\r\n\tasync changeSelectedTool(tool: ToolEnum) {\r\n\t\tconsole.log('OpenBimViewerThreeDService.changeSelectedTool', tool);\r\n\t\tswitch (tool) {\r\n\t\t\tcase ToolEnum.ObjectSelection:\r\n\t\t\t\tawait this.toolHandler.setTool(this.objectSelectionTool);\t// Object selection is always on\r\n\t\t\t\tbreak;\r\n\t\t\tcase ToolEnum.LengthMeasure:\r\n\t\t\t\tawait this.toolHandler.setTool(this.lengthMeasureTool);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ToolEnum.AreaMeasure:\r\n\t\t\t\tawait this.toolHandler.setTool(this.areaMeasureTool);\r\n\t\t\t\tbreak;\r\n\t\t\tcase ToolEnum.CropTool:\r\n\t\t\t\tawait this.toolHandler.setTool(this.cropTool);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tasync hideAllObjects() { \r\n\t\tawait this.visibilityTool.hideAll();\r\n\t}\r\n\tasync transluteAllObjects() {\r\n\t\tawait this.visibilityTool.transluteAll();\r\n\t\tthis.ifcSpaceVisibility.setIfcSpaceVisibility(this.ifcSpaceVisibility.IfcSpaceVisibility)\r\n\t}\r\n\tasync showAllObjects() {\r\n\t\tawait this.visibilityTool.showAll();\r\n\t\tthis.ifcSpaceVisibility.setIfcSpaceVisibility(this.ifcSpaceVisibility.IfcSpaceVisibility)\r\n\t}\r\n\tasync handleSpaces(shouldShowSpaces: boolean) { \r\n\t\tthis.ifcSpaceVisibility.setIfcSpaceVisibility(shouldShowSpaces);\r\n\t}\r\n\r\n\tasync selectObjects(objectIds: ObjectIDsIF): Promise {\r\n\t\tconsole.log('findObjectsToHandle, #express:', objectIds.objectIds.length,'#revit:', objectIds.revitObjectIds.length);\r\n\t\tthis.checkRevitStatus(objectIds);\r\n\t\tconst listOfObjectNRs: number[] = objectIds.objectIds;\r\n\t\tconst fragModel:FragmentsGroup = this.openBimHandles?.theModel!; //OpenbimContainer.theModel!; // let's party..\r\n\t\tconst fragmentMapToSelect_new:FragmentIdMap = fragModel.getFragmentMap(listOfObjectNRs);\r\n\r\n\t\t/* one way we could solve transitive selection in IFC for openBim,\r\n\t\twould be to compare the input list listOfObjectNRs,\r\n\t\twhich the actually occuring expressIDs in its output 'fragmentMapToSelect_new'.\r\n\t\tThose input IDs NOT occuring, are those we need to\r\n\t\tdo transitive selection for.\r\n\t\t Alternatively, we will probably make it BL/domain based (ie exploiting knowledge of the actual\r\n\t Revit entity inter-relationships, for e.g. CurtainWalls. )\r\n\t\t*/\r\n\r\n\r\n\t\tconst mapSize:number = Object.keys(fragmentMapToSelect_new).length;\r\n\t\tconsole.log('OpenBim_ViewerObjectInfoService.findObjectsToHandle', listOfObjectNRs,\r\n\t\t\t'sel-frag-map #:', mapSize);\r\n\t\t// FragmentsGroup.getFragmentMap and pass a set/array of expressIDs.\r\n\t\t//let fragmentMapToSelect_old:OBC.FragmentIdMap = {};\r\n\t\t//for (const expressId of listOfObjectNRs) { this.addElmToSelMap(expressId, fragmentMapToSelect_old, fragModel); }\r\n\r\n\t\tconst highlighter = this.openBimHandles!.highlighter!;\r\n\t\topenbim_highlightOnIDs(highlighter, fragmentMapToSelect_new);\r\n\t}\r\n\r\n\tcheckRevitStatus(objectIds: ObjectIDsIF) {\r\n\t\tconst revitMap:RevitMap = this.openBimHandles?.tmpRevitMap!;\r\n\r\n\t\tfor (let revitElmId of objectIds.revitObjectIds) {\r\n\t\t\tif (!revitElmId) { console.log('ignoring empty revitElmId:', revitElmId); continue; }\r\n\t\t\tif (!(revitElmId in revitMap)) { console.log('revitElmId not in map:', revitElmId); continue; }\r\n\t\t\tconst expressIDs:number[] = revitMap[revitElmId];\r\n\t\t\tif (expressIDs.length <= 1) { console.log('just a single expressID for revitElmId:', revitElmId, expressIDs); continue; }\r\n\t\t\tconsole.log('interesting - multiple expressIDs for revitElmId:', revitElmId, expressIDs);\r\n\t\t}\r\n\t}\r\n\r\n\tasync hideObjects(objectIds: ObjectIDsIF): Promise {\r\n\t\tconst idMap = this.openBimHandles?.theModel!.getFragmentMap(objectIds.objectIds);\r\n\t\tthis.openBimHandles?.comp?.tools.get(OBC.FragmentHider).set(false, idMap);\r\n\t}\r\n\t\r\n\tasync lookAtObjects(objectIds: ObjectIDsIF): Promise {\r\n\t\tawait this.selectObjects(objectIds);\r\n\t\t\r\n\t\tconst camera = this.openBimHandles.comp?.camera;\r\n\t\tif (!camera) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Only supports a single model per scene\r\n\t\tif (this.openBimHandles.mgr!.groups.length !== 1) {\r\n\t\t\tthrow new Error('Only a single model is supported for lookAtObjects');\r\n\t\t}\r\n\t\t\r\n\t\tconst fragmentIdToItemIdMap: FragmentIdMap = this.openBimHandles.mgr!.groups[0].getFragmentMap(objectIds.objectIds);\r\n\t\tconst boundingBox: Box3 = this.boundingBoxUtility.getBoundingBoxForItems(fragmentIdToItemIdMap);\r\n\r\n\t\t// Move the camera to the calculated position\r\n\t\tcamera.controls.fitToSphere(boundingBox!.getBoundingSphere(new Sphere()), true)\r\n\t\t\t.then(r => console.log('fitToBox:', r));\r\n\t}\r\n\r\n\tasync showObjects(objectIds: ObjectIDsIF): Promise {\r\n\t\tthrow new Error(\"Method not implemented.\");\r\n\t}\r\n\r\n\tasync transluteObjects(objectIds: ObjectIDsIF): Promise {\r\n\t\tthrow new Error(\"Method not implemented.\");\r\n\t}\r\n\r\n\tasync hideOthers(objectIds: ObjectIDsIF): Promise {\r\n\t\tconst idMap = this.openBimHandles?.theModel!.getFragmentMap(objectIds.objectIds);\r\n\t\tthis.openBimHandles?.comp?.tools.get(OBC.FragmentHider).isolate(idMap!);\r\n\t}\r\n\t\r\n\tasync transluteOthers(selectedObjectIds: ObjectIDsIF): Promise {\r\n\t\tawait this.showAllObjects();\r\n\t\tawait this.visibilityTool.transluteOthers(selectedObjectIds);\r\n\t}\r\n}\r\n\r\n","import {ModeTool} from \"./ModeTool\";\r\n\r\n/**\r\n * This class is responsible for handling the mode tools.\r\n * There are two kinds of tools. ModeTools and OneOffTools.\r\n * ModeTools are tools that are active until another tool is activated.\r\n * OneOffTools are tools that are active only for one event. These are implemented as functions elsewhere.\r\n */\r\nexport class ModeToolHandler {\r\n\tprivate activeTool: ModeTool;\r\n\t\r\n\tconstructor(defaultTool: ModeTool) {\r\n\t\tthis.activeTool = defaultTool;\r\n\t\tthis.activeTool.activate();\r\n\t}\r\n\t\r\n\tpublic async setTool(tool: ModeTool) {\r\n\t\tconsole.log('ModeToolHandler.setTool', tool)\r\n\t\tif (this.activeTool) {\r\n\t\t\tawait this.activeTool.deactivate();\r\n\t\t}\r\n\t\t\r\n\t\tthis.activeTool = tool;\r\n\t\tif (this.activeTool) {\r\n\t\t\tawait this.activeTool.activate();\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate lastClickTime: number = 0;\r\n\t\r\n\tpublic async onMouseDown(event: MouseEvent) {\r\n\t\tthis.lastClickTime = event.timeStamp;\r\n\t\t\r\n\t\tif (this.activeTool) {\r\n\t\t\tawait this.activeTool.onMouseDown(event);\r\n\t\t}\r\n\t}\r\n\t\r\n\tpublic async onMouseUp(event: MouseEvent) {\r\n\t\t// Check if the click was fast enough to be considered a click.\r\n\t\tif (event.timeStamp - this.lastClickTime < 160) {\r\n\t\t\tif (this.activeTool) {\r\n\t\t\t\tawait this.activeTool.onClick(event);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif (this.activeTool) {\r\n\t\t\tawait this.activeTool.onMouseUp(event);\r\n\t\t}\r\n\t}\r\n\t\r\n\tpublic async onDoubleClick(event: MouseEvent) {\r\n\t\tif (this.activeTool) {\r\n\t\t\tawait this.activeTool.onDoubleClick(event);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static setupToolEventsWithoutAurelia(container: HTMLElement, modeToolHandler: ModeToolHandler) {\r\n\t\tcontainer.addEventListener('mousedown', async (event:MouseEvent) => modeToolHandler.onMouseDown(event));\r\n\t\tcontainer.addEventListener( 'mouseup', async (event:MouseEvent) => modeToolHandler.onMouseUp(event));\r\n\t\tcontainer.addEventListener('dblclick', async (event:MouseEvent) => modeToolHandler.onDoubleClick(event));\r\n\t}\r\n}\r\n","\r\nimport * as OBC from \"openbim-components\";\r\nimport {EventAggregator} from \"aurelia-event-aggregator\";\r\nimport {Fragment, FragmentsGroup, IfcProperties} from \"bim-fragment\";\r\nimport {ModeTool} from \"./ModeTool\";\r\nimport {OpenBimHandles} from \"../OpenBimHandles\";\r\nimport {\r\n\tcollectIDsFromMap,\r\n\tdisableHighlighterOutline,\r\n\tHighlightResult, // why import it if we are not using it?\r\n\tObjPropertySet,\r\n\tselectionHighlightName\r\n} from \"../openbim-highlighter\";\r\nimport { openbimFlag_EG_OutlineEnabled } from \"../openbim-initcontainer\";\r\n\r\nexport class ObjectSelectionTool implements ModeTool {\r\n\r\n\tconstructor(private OB: OpenBimHandles, private highlighter: OBC.FragmentHighlighter, private eventAggregator: EventAggregator) {\r\n\t}\r\n\r\n\tasync activate(): Promise {\r\n\t\tif (this.highlighter)\r\n\t\t\tthis.highlighter.enabled = true;\r\n\t}\r\n\r\n\tasync deactivate(): Promise {\r\n\t\tif (this.highlighter)\r\n\t\t\tthis.highlighter.enabled = false;\r\n\r\n\t\t// experiment:\r\n\t\tif (!openbimFlag_EG_OutlineEnabled()) {\r\n\t\t\tdisableHighlighterOutline(this.highlighter);\r\n\t\t}\r\n\t\tthis.highlighter?.clear(selectionHighlightName);\r\n\t}\r\n\r\n\tasync onDoubleClick(event: MouseEvent): Promise {\r\n\t}\r\n\r\n\tasync onMouseDown(event: MouseEvent): Promise {\r\n\t}\r\n\r\n\tasync onMouseUp(event: MouseEvent): Promise {\r\n\t}\r\n\t\r\n\tasync onClick(event: MouseEvent): Promise {\r\n\t\tif (event.button === 0) { // Left mouse button \r\n\t\t\tawait ObjectSelectionTool.highlightOnClick(this.highlighter!, this.OB, this.eventAggregator);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate static async highlightOnClick(highlighter: OBC.FragmentHighlighter, OB: OpenBimHandles, aggr: EventAggregator): Promise {\r\n\t\tlet singleSelection = {value: false}; //true };\r\n\r\n\t\tconsole.log('hiliter has mats:', highlighter.highlightMats);\r\n\r\n\t\t// experiment:\r\n\t\tif (!openbimFlag_EG_OutlineEnabled()) {\r\n\t\t\tdisableHighlighterOutline(highlighter);\r\n\t\t}\r\n\r\n\t\tconst sel: { id: number; fragments: Fragment[] } | null = await highlighter.highlight(selectionHighlightName, singleSelection.value);\r\n\t\tconsole.log('sel result:', sel);\r\n\t\tconst realSel: OBC.FragmentIdMap = highlighter.selection[selectionHighlightName];\r\n\t\tconsole.log('realsel result:', realSel);\r\n\r\n\t\tif (!sel) {\r\n\t\t\tconsole.log('(null sel)');\r\n\t\t}\r\n\r\n\t\t/* We can find a revitTag by doing\r\n\t\t fragment.fragmentsGroup.[getLocalProperties[expressId]]/objPropertySet.Tag.value\r\n\t\t But we must do it for the proper/relevant expressIDs.\r\n\t\t So, we need to find fragmentGroups.\r\n\r\n\t\t We could do the work in remember_ModelInformation(),\r\n\t\t ie we pass that way when we get a new fragmentsGroup model.\r\n\t\t We should look at fragmentsGroup.objProperties.\r\n\t\t*/\r\n\r\n\t\tconst sel_expressId: number = Number(sel?.id);\r\n\t\tconst someFrag: Fragment | undefined = sel?.fragments[0];\r\n\t\tconst group: FragmentsGroup | undefined = someFrag?.group;\r\n\t\tconst props: IfcProperties | undefined = group?.getLocalProperties();\r\n\t\tconst objPropertySet: ObjPropertySet | undefined = props ? props[sel_expressId] : undefined; // https://standards.buildingsmart.org/IFC/RELEASE/IFC4_1/FINAL/HTML/schema/templates/property-sets-for-objects.htm\r\n\r\n\t\ttry {\r\n\t\t\tconst revitTag: string = objPropertySet?.Tag?.value ?? '(no Tag field)';\r\n\t\t\tconst ifcTypeNum: number = objPropertySet?.type;\r\n\t\t\tconst ifcGlobalId: string = objPropertySet?.GlobalId?.value;\r\n\t\t\tconst ifcName: string = objPropertySet?.Name?.value;\r\n\t\t\tconst inf = {sel_expressId, revitTag, ifcTypeNum, ifcGlobalId, ifcName};\r\n\t\t\t//console.table(inf);\r\n\t\t\tconsole.log(inf);\r\n\t\t\tthis.send_ElmsSelect_Event(aggr, realSel, OB, inf);\r\n\t\t} catch (s) {\r\n\t\t\tconsole.warn(s, objPropertySet);\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate static send_ElmsSelect_Event(\r\n\t\taggr: EventAggregator, // we need this one, so we can send messages.\r\n\t\trealSel: OBC.FragmentIdMap, // we need this one, to actually HAVE the current selection.\r\n\t\tOB: OpenBimHandles, // optional, not used, if-we-might-need-it.\r\n\t\tinf: { // other earlier hints for selection. Think of cases where we are not only using expressIDs, e.g. IfcGlobalId.\r\n\t\t\tsel_expressId: number,\r\n\t\t\trevitTag: string, //= objPropertySet?.Tag?.value ?? '(no Tag field)';\r\n\t\t\tifcTypeNum: number, //= objPropertySet.type;\r\n\t\t\tifcGlobalId: string, //= objPropertySet.GlobalId.value;\r\n\t\t\tifcName: string //= objPropertySet.Name.value;\r\n\t\t},\r\n\t) {\r\n\t\tconst asArray = collectIDsFromMap(realSel);\r\n\t\tconsole.log('expressIDs collected:', asArray);\r\n\t\taggr.publish('base-viewer-combined:select', { // for the benefit of pivot-grid-component, and PivotGridComponent.highlightMatchingRows().\r\n\t\t\tevent: 'no-event-for-you',\r\n\t\t\tobjectIds: asArray\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport class NoOpTool implements ModeTool {\r\n\tasync activate(): Promise {\r\n\t}\r\n\r\n\tasync deactivate(): Promise {\r\n\t}\r\n\r\n\tasync onDoubleClick(event: MouseEvent): Promise {\r\n\t}\r\n\r\n\tasync onMouseDown(event: MouseEvent): Promise {\r\n\t}\r\n\r\n\tasync onMouseUp(event: MouseEvent): Promise {\r\n\t}\r\n\t\r\n\tasync onClick(event: MouseEvent): Promise {\r\n\t}\r\n}\r\n"],"names":["OpenBimHandles","tmpRevitMap","LengthMeasureTool","constructor","components","this","dimensions","tools","get","snapDistance","enabled","activate","deactivate","deleteAll","onDoubleClick","event","onMouseDown","onMouseUp","onClick","button","create","cancelCreation","VisibilityTool","_translucentAll","_translucentPerFragment","materialManager","fragmentHider","translucentMaterial","MeshBasicMaterial","color","transparent","opacity","addMaterial","fragmentTransparencyStyler","FragmentTransparencyStyler","afterModelLoad","fragmentsGroup","source","meshes","Array","from","addMeshes","addOpacity","hideAll","resetOpacity","console","log","set","showAll","transluteAll","transluteOthers","selectedObjectIds","fragmentMap","groups","getFragmentMap","objectIds","setOpacityOfNonSelectedById","super","transparentFragments","transparentFragmentSuffix","add","uuid","hider","manager","setModelOpacity","fragmentId","list","mesh","material","forEach","needsUpdate","createTransparentFragments","setOpacityById","fragmentIdMap","setVisibility","clearOpacityById","disposeOpacity","fragment","transparentFragmentId","transparentFragment","fragments","parent","remove","removeFragment","dispose","disposeAllOpacities","Number","transparentMaterials","map","copyToTransparentMaterial","addFragment","renderOrder","frustumCulled","copyInstancedMeshColors","target","instanceColor","i","count","Color","getColorAt","setColorAt","CropTool","clipper","ctrlKey","delete","IfcSpaceVisibility","ifcSpaceVisibility","ifcVisibilityTool","IfcVisibility","mpkVisibilityTool","MpkVisibility","fragmentGroupIdToSource","Map","fragmentManager","ifcTypes","FragmentSource","IFC","MPK","id","setIfcSpaceVisibility","shouldShowSpaces","group","visible","showOrHideIfcTypeForFragmentGroup","idMappingComponent","IdMappingComponent","show","props","getLocalProperties","itemIds","matches","Object","values","filter","some","x","toUpperCase","match","globalId","fragmentGroupMappings","getFromFragmentGroupId","globalIdMapping","push","flatMap","items","item","ids","has","classifier","byEntity","classification","entities","ifcType","entity","AreaMeasureTool","areaMeasurement","endCreation","OpenBimViewerThreeDService","toolHandler","openBimHandles","objectSelectionTool","loadEventsSubscribers","comp","lengthMeasureTool","areaMeasureTool","cropTool","visibilityTool","boundingBoxUtility","BoundingBoxUtility","changeSelectedTool","tool","ObjectSelection","setTool","LengthMeasure","AreaMeasure","hideAllObjects","transluteAllObjects","showAllObjects","handleSpaces","selectObjects","length","revitObjectIds","checkRevitStatus","listOfObjectNRs","fragmentMapToSelect_new","theModel","mapSize","keys","highlighter","revitMap","revitElmId","expressIDs","hideObjects","idMap","lookAtObjects","camera","mgr","Error","fragmentIdToItemIdMap","boundingBox","getBoundingBoxForItems","controls","fitToSphere","getBoundingSphere","Sphere","then","r","showObjects","transluteObjects","hideOthers","isolate","ModeToolHandler","defaultTool","lastClickTime","activeTool","timeStamp","setupToolEventsWithoutAurelia","container","modeToolHandler","addEventListener","async","ObjectSelectionTool","OB","eventAggregator","clear","highlightOnClick","aggr","highlightMats","sel","highlight","realSel","selection","sel_expressId","someFrag","objPropertySet","undefined","revitTag","Tag","value","ifcTypeNum","type","inf","ifcGlobalId","GlobalId","ifcName","Name","send_ElmsSelect_Event","s","warn","asArray","publish"],"sourceRoot":""}