{"version":3,"file":"app-815fb763.a699ff263559c296.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/components/base-viewer-three-d/base-viewer-three-d.scss","webpack://client-app/./src/app/components/base-viewer-three-d/base-viewer-three-d.html","webpack://client-app/./src/app/components/base-viewer-three-d/Three_Sel.ts","webpack://client-app/./src/app/components/base-viewer-three-d/base-viewer-three-d.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".anim-div .takeoff-warning-msg,.anim-div .takeoff-information-msg{padding:5px;margin-top:2px;padding-left:20px;padding-right:20px;border-radius:5px;max-width:100%;text-align:center;white-space:nowrap}.anim-div .takeoff-warning-msg{background-color:#ffe100}.anim-div .takeoff-information-msg{background-color:#d3d3d3}.anim-div .takeoff-information-msg i{animation:spin-animation 1s infinite}.element-name-display{position:absolute;top:10px;left:50%;transform:translateX(-50%);padding:0 10px 0 10px;height:2.5em;line-height:2.5em;font-size:1.1em;text-align:center;vertical-align:middle;font-weight:700;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:rgba(255,255,255,.8);border-radius:10px}#container{height:100%}.viewerContainer3d{position:relative;height:100%;width:100%;background:linear-gradient(rgba(125, 188, 255, 0.2), rgba(255, 255, 255, 0))}.visible{visibility:visible;opacity:.9;transition:opacity .2s}.hidden{visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s}@keyframes spin-animation{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.visible,.hidden{overflow:hidden}.visible{visibility:visible;opacity:.9;transition:opacity .2s}.hidden{visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s}.hidden>div{margin-top:-10000px !important;transition:margin-top 0s .2s}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/components/base-viewer-three-d/base-viewer-three-d.scss\"],\"names\":[],\"mappings\":\"AAGI,kEACI,WAAA,CACA,cAAA,CACA,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,cAAA,CACA,iBAAA,CACA,kBAAA,CAGJ,+BACI,wBAAA,CAGJ,mCACI,wBAAA,CACA,qCACI,oCAAA,CAIZ,sBACE,iBAAA,CACA,QAAA,CACA,QAAA,CACA,0BAAA,CACA,qBAAA,CACA,YAAA,CACA,iBAAA,CACA,eAAA,CACA,iBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,+BAAA,CACA,kBAAA,CAIF,WAAA,WAAA,CAEA,mBACE,iBAAA,CACE,WAAA,CACA,UAAA,CACA,4EAAA,CAGJ,SACI,kBAAA,CACA,UAAA,CACA,sBAAA,CAGF,QACE,iBAAA,CACA,SAAA,CACA,wCAAA,CAGF,0BACD,GACC,sBAAA,CAED,KACC,wBAAA,CAAA,CAIF,iBAEE,eAAA,CAGF,SACE,kBAAA,CACA,UAAA,CACA,sBAAA,CAGF,QACE,iBAAA,CACA,SAAA,CACA,wCAAA,CAGF,YACE,8BAAA,CACA,4BAAA\",\"sourcesContent\":[\"@import \\\"src/resources/customized-styles/variables\\\";\\r\\n\\r\\n.anim-div {\\r\\n .takeoff-warning-msg, .takeoff-information-msg {\\r\\n padding: 5px;\\r\\n margin-top: 2px;\\r\\n padding-left: 20px;\\r\\n padding-right: 20px;\\r\\n border-radius: 5px;\\r\\n max-width: 100%;\\r\\n text-align: center;\\r\\n white-space:nowrap;\\r\\n }\\r\\n \\r\\n .takeoff-warning-msg {\\r\\n background-color: rgb(255, 225, 0);\\r\\n }\\r\\n \\r\\n .takeoff-information-msg {\\r\\n background-color: lightgray;\\r\\n i {\\r\\n animation: spin-animation 1.0s infinite;\\r\\n }\\r\\n }\\r\\n}\\r\\n.element-name-display {\\r\\n position:absolute;\\r\\n top: 10px;\\r\\n left: 50%;\\r\\n transform: translateX(-50%);\\r\\n padding: 0 10px 0 10px;\\r\\n height: 2.5em;\\r\\n line-height: 2.5em;\\r\\n font-size: 1.1em;\\r\\n text-align: center;\\r\\n vertical-align: middle;\\r\\n font-weight: 700;\\r\\n overflow: hidden;\\r\\n white-space: nowrap;\\r\\n text-overflow: ellipsis;\\r\\n background: rgb(255, 255, 255, 0.8);\\r\\n border-radius: 10px;\\r\\n \\r\\n}\\r\\n\\r\\n#container { height: 100%; } // should probably be governed HERE, which is the parent-level, instead.\\r\\n\\r\\n.viewerContainer3d {\\r\\n position: relative;\\r\\n height: 100%;\\r\\n width: 100%;\\r\\n background: linear-gradient(rgba(125, 188, 255, 0.2), rgba(255, 255, 255, 0));\\r\\n}\\r\\n\\r\\n.visible {\\r\\n visibility: visible;\\r\\n opacity: 0.9;\\r\\n transition: opacity .2s;\\r\\n }\\r\\n \\r\\n .hidden {\\r\\n visibility: hidden;\\r\\n opacity: 0;\\r\\n transition: visibility 0s .2s, opacity .2s;\\r\\n }\\r\\n\\r\\n @keyframes spin-animation {\\r\\n\\t0% {\\r\\n\\t\\ttransform: rotate(0deg);\\r\\n\\t}\\r\\n\\t100% {\\r\\n\\t\\ttransform: rotate(359deg);\\r\\n\\t}\\r\\n}\\r\\n\\r\\n.visible,\\r\\n.hidden {\\r\\n overflow: hidden;\\r\\n}\\r\\n\\r\\n.visible {\\r\\n visibility: visible;\\r\\n opacity: 0.9;\\r\\n transition: opacity .2s;\\r\\n}\\r\\n\\r\\n.hidden {\\r\\n visibility: hidden;\\r\\n opacity: 0;\\r\\n transition: visibility 0s .2s, opacity .2s;\\r\\n}\\r\\n\\r\\n.hidden > div { //This moves the content out of the screen(Kind of a hack.)\\r\\n margin-top: -10000px !important;\\r\\n transition: margin-top 0s .2s;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = \"\\r\\n\";","import { OpenBimHandles } from \"app/project/ifc-fun/OpenBimHandles\";\r\nimport {collectIDsFromMap, selectionHighlightName} from \"app/project/ifc-fun/openbim-highlighter\";\r\nimport * as OBC from \"openbim-components\"; \r\n\r\nexport declare let $: any;\r\n\r\nexport class Three_Sel {\r\n\tOB: OpenBimHandles | undefined;\r\n\r\n\t//hello() { console.log('Three_Sel says hello'); }\r\n\r\n\t/////////////////////////////////////////////////////////////////////\r\n\tgetSelectedObjectIDs(objectIDs: number[]) {\r\n\t\tif (this.OB) {\r\n\t\t\tthis.openBim_getObjectIDs(objectIDs);\r\n\t\t} else {\r\n\t\t\tthis.catenda_getObjectIDs(objectIDs);\r\n\t\t}\r\n\t}\r\n\tcatenda_getObjectIDs(objectIDs: number[]) {\r\n\t\t$('#viewerContainer3d').viewer('eachSelected', function (id: number) { objectIDs.push(id); });\r\n\t} // presumably this is not async?\r\n\r\n\topenBim_getObjectIDs(objectIDs: number[]) {\r\n\t\tconst realSel:OBC.FragmentIdMap = this.OB!.highlighter!.selection[selectionHighlightName];\r\n\t\tconst asArray = collectIDsFromMap(realSel);\r\n\t\t//return this.catenda_getObjectIDs(objectIDs);\r\n\t\tfor (let bob of asArray) {\r\n\t\t\tobjectIDs.push(bob); // what is the best way to do this in typescript.\r\n\t\t}\r\n\t\tconsole.log('treeSel.objectIDs, now:', objectIDs.length);\r\n\t}\r\n\t/////////////////////////////////////////////////////////\r\n\r\n\tdeselectAll() { this.OB ? this.openBim_deselectAll() : this.catenda_deselectAll(); }\r\n\tcatenda_deselectAll() {\t$('#viewerContainer3d').viewer('deselectAll'); }\r\n\topenBim_deselectAll() { this.OB!.highlighter!.clear(); }\r\n}\r\n","import { ViewerTokenDto } from \"app/models/viewer-dtos/Dtos/Bimsync/BimsyncDtos\";\r\nimport { ApiClient } from \"app/services/api-client\";\r\nimport { AppContextService } from \"app/services/app-context-service\";\r\nimport { BimViewerThreeDService } from \"app/services/bim-viewer-three-d-service\";\r\nimport { BimsyncClient } from \"app/services/bimsync-client\";\r\nimport { ContextMenuService } from \"app/services/context-menu-service\";\r\nimport { Catenda_ViewerObjectInfoService, ViewerObjectInfoServiceIF } from \"app/services/viewer-object-info-service/viewer-object-info-service\";\r\nimport {autoinject,bindable} from \"aurelia-framework\";\r\nimport {EventAggregator, Subscription} from \"aurelia-event-aggregator\";\r\nimport { FileAndRevisionDto, GetViewerResponse3d } from \"app/project/work-area/split-viewer-interfaces\";\r\nimport { ColorLegendService } from \"app/services/color-legend/color-legend-service\";\r\nimport { BimsyncSetupHandler } from \"app/services/bimsync-setup-handler\";\r\nimport { ViewerMethodNames } from \"app/services/viewer-object-info-service/viewer-method-names\";\r\nimport { OpenBim_ViewerObjectInfoService } from \"app/services/viewer-object-info-service/OB-viewer-object-info-service\";\r\nimport { OpenBimHandles } from \"app/project/ifc-fun/OpenBimHandles\";\r\nimport { Three_Sel } from \"./Three_Sel\";\r\n//import { Three_Sel } from \"app/project/quantity-takeoff/takeoff-viewer/takeoff-viewer\";\r\nimport {BimViewerThreeDServiceIF, ToolEnum} from \"../../services/BimViewerThreeDServiceIF\";\r\nimport {OpenBimViewerThreeDService} from \"../../project/ifc-fun/OpenBimViewerThreeDService\";\r\n\r\nexport declare let $: any;\r\ndeclare let bimsync: any;\r\n\r\n@autoinject\r\nexport class BaseViewerThreeD {\r\n\t@bindable threeSel:Three_Sel|undefined;\r\n\t@bindable initialOpenbimFlag:boolean = true; // used to INIT useOpenbimViewer.\r\n\r\n\t// (bool useOpenbimViewer styrer, om HTML for bv3d viser openbim-container, eller catenda-div.)\r\n\tpublic useOpenbimViewer:boolean = true; // only becomes correct at/after BV3d.BIND!, when we have an init value to transfer!\r\n\r\n\tpublic openBimHandles:OpenBimHandles = new OpenBimHandles();\r\n\r\n private spacesEnabled: boolean = false;\r\n private ifcSpaces: number[] = [];\r\n private subscriptions: Subscription[] = [];\r\n private viewerNotLoaded: boolean = false;\r\n private spacesLoaded: boolean = false;\r\n\tprivate spacesLoaded_inf:string = '?';\r\n private isModelLoaded: boolean = false;\r\n private lastClickedElementName: string | undefined;\r\n\r\n\tprivate loaded_fileAndRevisionId:FileAndRevisionDto|undefined; // (We remember the model we load)\r\n\r\n\t// NB, setIsOpenbimOrNot inits it in ctor:\r\n\t//public viewerObjectInfoService: ViewerObjectInfoServiceIF = undefined; //Catenda_ViewerObjectInfoService;\r\n\tpublic viewerObjectInfoService: ViewerObjectInfoServiceIF|undefined; // = undefined; //Catenda_ViewerObjectInfoService;\r\n\t// ONLY set from bind() onwards!\r\n\r\n\tinit_useOpenbimViewer(who:string) { \r\n\t\tconsole.log(`(${who}) will init useOpenbimViewer to:`, this.initialOpenbimFlag, ' from this.initialOpenbimFlag');\r\n\t\t//this.useOpenbimViewer = this.initialOpenbimFlag; \r\n\t\tthis.setIsOpenbimOrNot(this.initialOpenbimFlag,'ctor'); // this.viewerObjectInfoService = viewerObjectInfoService_CATENDA; // changed later by setIsOpenbimOrNot.\r\n\t}\r\n\r\n\tpublic get_baseViewerThreeDService(): BimViewerThreeDServiceIF|undefined {\r\n\t\tif (this.useOpenbimViewer) { // ? this.openbimViewerThreeDService :\r\n\t\t\treturn this.openBimHandles!.openbimViewerThreeDService;\r\n\t\t} else {\r\n\t\t\treturn this.catendaViewerThreeDService;\r\n\t\t}\r\n\t}\r\n\r\n constructor(private api : ApiClient, private bimsyncApi : BimsyncClient, public appContext:AppContextService, \r\n public contextMenuService: ContextMenuService,\r\n\r\n\t\tprivate catendaViewerThreeDService: BimViewerThreeDService,\r\n\t\t//private openbimViewerThreeDService: OpenBimViewerThreeDService,\r\n\r\n\t\tpublic viewerObjectInfoService_CATENDA: Catenda_ViewerObjectInfoService, \r\n public viewerObjectInfoService_OB: OpenBim_ViewerObjectInfoService, \r\n\t\tpublic events: EventAggregator,\r\n private colorLegendService: ColorLegendService, public bimsyncSetupHandler: BimsyncSetupHandler\r\n\t) { \r\n\t\t// JG: We do it this way, to init \r\n\t\t//this.setIsOpenbimOrNot(this.useOpenbimViewer,'ctor'); // this.viewerObjectInfoService = viewerObjectInfoService_CATENDA; // changed later by setIsOpenbimOrNot.\r\n\t\t// FIXME, reconcile this with BIND.\r\n\t\t//this.init_useOpenbimViewer('bv3d.ctor');\r\n\t\t\r\n\t\t//this.viewerObjectInfoService = viewerObjectInfoService_OB;\r\n\t\tthis.viewerObjectInfoService_OB.setOpenBimHandles(this.openBimHandles);\r\n\r\n\t}\r\n\r\n \r\n async bind(): Promise {\r\n\t\tconsole.log('bv3d.bind');\r\n\r\n\t\t// This inits useOpenBimViewer AND viewerObjectInfoService:\r\n\t\tthis.init_useOpenbimViewer('bv3d.bind'); //this.setIsOpenbimOrNot(this.useOpenbimViewer,'ctor'); \r\n\r\n\t\t//const fileAndRevisionId = await this.INIT_ConnectedModelKeys(); // maybe this is a better place to call it..\r\n\t\t//console.log('in bv3d.BIND, INIT_ConnectedModelKeys got:', fileAndRevisionId);\r\n\r\n this.subscriptions = [\r\n this.events.subscribe('3dViewer:ShowSpaces', (shouldShowSpaces: boolean) => { this.setup_CATENDA_ShouldShowSpaces(shouldShowSpaces) }),\r\n this.events.subscribe(\"project-selector:project-changed\", async () => this.reload()),\r\n\r\n\t\t\t// We want to hear that too..\r\n this.events.subscribe('base-viewer-combined:openBimModeToggled', (openBim:boolean) => { this.openBimModeToggled2(openBim)}),\r\n\r\n this.events.subscribe('3dViewer:TransluteAll', () => {\r\n\t\t\t\tif (!this.hasCatenda3d()) {\r\n\t\t\t\t\tconsole.warn(\"Ignoring TransluteAll, because no Catenda.\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t$('#viewerContainer3d').viewer('translucentAll');\r\n this.handle_CATENDA_Spaces();\r\n }),\r\n this.events.subscribe('3dViewer:HideAll', () => {\r\n\t\t\t\tif (!this.hasCatenda3d()) {\r\n\t\t\t\t\tconsole.warn(\"Ignoring HideAll, because no Catenda.\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n $('#viewerContainer3d').viewer('hideAll')\r\n this.handle_CATENDA_Spaces();\r\n }),\r\n this.events.subscribe('3dViewer:ShowAll', () => {\r\n\t\t\t\tif (!this.hasCatenda3d()) {\r\n\t\t\t\t\tconsole.warn(\"Ignoring ShowAll, because no Catenda.\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n $('#viewerContainer3d').viewer('showAll')\r\n this.handle_CATENDA_Spaces();\r\n }),\r\n this.events.subscribe('3dViewer:crop', async (direction: string[]) => {await this.cropModel(direction)}),\r\n this.events.subscribe('3dViewer:ChangeTool', async (tool: ToolEnum) => { await this.changeTool_Event(tool); }),\r\n this.events.subscribe('3dViewer:colorInstancesOfTypes', async (objectIds: number[]) => { await this.colorInstances(objectIds)}),\r\n this.events.subscribe('3dViewer:resetColors', async () => { this.resetColors()}),\r\n this.events.subscribe('viewer:enable-bindings-and-options', () => { this.Init_CATENDA_ViewerFirst_or_subsequent(); }),// Ensuring viewers are setup before bindings are handled. // was:setupViewerBindings_AND_LoadModel\r\n this.events.subscribe('viewer:highlight', (objectIds: number[]) => { this.highlightSelected(objectIds); }),\r\n this.events.subscribe('viewer:hide', (objectIds: number[]) => { this.hideObjects(objectIds); }),\r\n this.events.subscribe('viewer:hideOthers', (objectIds: number[]) => { this.hideOthers(objectIds); }),\r\n this.events.subscribe('viewer:translucent', (objectIds: number[]) => { this.makeTranslucent(objectIds); }),\r\n this.events.subscribe('viewer:isolate', (objectIds: number[]) => { this.isolateSelected(objectIds); }),\r\n this.events.subscribe('viewer:lookAt', (objectIds: number[]) => { this.lookAt(objectIds); }),\r\n ]\r\n }\r\n\r\n\t/////\r\n\torgId_bv3:string = '?';\r\n\tfileId_forBind:string = ''; // JG: These MUST init to empty, to avoid dependent components attempting to init/load based on them!\r\n\trevisionId_forBind:string = ''; // JG: These MUST init to empty, to avoid dependent components attempting to init/load based on them!\r\n\r\n async attached(): Promise {\r\n\t\tconsole.log('bv3d.attached, appCtx.prjId:', this.appContext.projectId);\r\n\t\tconst prj = this.appContext.getSelectedProject();\r\n\t\tif (prj) { this.orgId_bv3 = prj.ownerCompanyId; }\r\n\r\n\t\tconst fileAndRevisionId = await this.INIT_ConnectedModelKeys(); // maybe this is a better place to call it..\r\n\t\tconsole.log('in bv3d.attached, INIT_ConnectedModelKeys got:', fileAndRevisionId);\r\n\r\n\t\tif (this.useOpenbimViewer) {//-attached\r\n\t\t\tconsole.warn('sketch, init openbim in attached');\r\n\t\t\tthis.openbim_load_BlobModel_WithSpaces_AlmostNOOP(); \r\n\t\t} else {\r\n\t\t\tawait this.Init_CATENDA_ViewerFirst_or_subsequent();\r\n\t\t}\r\n }\r\n\r\n\r\n resetColors() {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring resetColors, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n $('#viewerContainer3d').viewer('resetColors');\r\n window.dispatchEvent(new Event('resize'));\r\n }\r\n\r\n async colorInstances(objectIds: number[]): Promise {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring colorInstances, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n $('#viewerContainer3d').viewer('color',this.colorLegendService.getRandomColor(), objectIds);\r\n }\r\n\r\n changeSelectedTool(toolNumber: number): void {\r\n if (toolNumber == 0) {\r\n $('#viewerContainer3d').viewer('disableMeasure');\r\n $('#viewerContainer3d').viewer('clearMeasure');\r\n return;\r\n }\r\n\r\n if (toolNumber == 1) {\r\n $('#viewerContainer3d').viewer('enableMeasure', {\r\n mode: 'dimension'\r\n });\r\n return;\r\n }\r\n if (toolNumber == 2) {\r\n $('#viewerContainer3d').viewer('enableMeasure', {\r\n mode: 'laser'\r\n });\r\n return;\r\n }\r\n }\r\n \r\n async cropModel(direction: string[]): Promise {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring cropModel, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n let selectedObjects :number[] = []\r\n await $('#viewerContainer3d').viewer('eachSelected', function(id: number) {\r\n selectedObjects.push(id)\r\n });\r\n\r\n $('#viewerContainer3d').viewer('section', selectedObjects, direction);\r\n }\r\n\r\n handle_CATENDA_Spaces(): void {\r\n if (!this.spacesEnabled) {\r\n $('#viewerContainer3d').viewer('hide',this.ifcSpaces);\r\n }\r\n }\r\n\r\n async reload(): Promise {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring reload, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n this.isModelLoaded = false;\r\n this.handle_CATENDA_ViewerCleanupModels();\r\n this.spacesEnabled = false;\r\n this.lastClickedElementName = undefined; // JG: I moved this up.\r\n\r\n\t\tlet empty_catendaTokenDTO:GetViewerResponse3d|undefined;\r\n await this.loadConnectedModel_Somehow(this.loaded_fileAndRevisionId!, empty_catendaTokenDTO);//in-reload\r\n }\r\n\r\n handle_CATENDA_ViewerCleanupModels() {\r\n $('#viewerContainer3d').viewer('modelInfo', function(modelInfos: any) {\r\n for (let modelInfo of modelInfos)\r\n $('#viewerContainer3d').viewer('unloadModel', modelInfo.id);\r\n });\r\n \r\n } //The worry here is starting a new model load, before this job is finished.\r\n\r\n setup_CATENDA_ShouldShowSpaces(shouldShowSpaces: boolean): void {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring setup_CATENDA_ShouldShowSpaces, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n this.spacesEnabled = shouldShowSpaces;\r\n if (shouldShowSpaces) {\r\n $('#viewerContainer3d').viewer('show', this.ifcSpaces)\r\n } else {\r\n $('#viewerContainer3d').viewer('hide', this.ifcSpaces)\r\n }\r\n $('#viewerContainer3d').viewer('deselectAll');\r\n }\r\n\r\n async unbind(): Promise {\r\n this.subscriptions.forEach(subscription => subscription.dispose());\r\n }\r\n\r\n\tasync getCatendaToken(fileAndRevisionId:FileAndRevisionDto):Promise {\r\n\t\tlet catendaTokenDTO: GetViewerResponse3d = \r\n\t\t await this.api.project(this.appContext.projectId)\r\n\t\t.get(`BimsyncViewer/GetViewer3d?aocProjectId=${this.appContext.projectId}&revisionId=${fileAndRevisionId.revisionId}`)\r\n\t\t.jsonResult();\r\n\t\tconsole.log('viewerToken:?', catendaTokenDTO);\r\n\t\treturn catendaTokenDTO;\r\n\t}\r\n\r\n\tasync INIT_ConnectedModelKeys():Promise {\r\n\t\tconsole.log('bv3d.INIT_ConnectedModelKeys, getting orgToken..');\r\n await this.bimsyncApi.setTokenAndProject(this.appContext.projectId);\r\n\t\tconsole.log('bv3d.INIT_ConnectedModelKeys, gotten orgToken..');\r\n\r\n let fileAndRevisionId:FileAndRevisionDto|undefined = await this.api.project(this.appContext.projectId)\r\n .get(`BimViewer/GetConnectedRevisionAndModel?aocProjectId=${this.appContext.projectId}`) //GetConnectedRevisionId\r\n .handleError('No model found', 'There is no connected model synchronized on this project.')\r\n .jsonResult();\r\n\t\t\t\r\n\t\tconsole.log('bv3d.INIT_ConnectedModelKeys, got:', fileAndRevisionId);\r\n\r\n\t\tthis.loaded_fileAndRevisionId = fileAndRevisionId;\r\n\t\t\r\n\t\tif (fileAndRevisionId==undefined) { // The abnormal case.\r\n\t\t\tconsole.warn('INIT_ConnectedModelKeys, setting revisionId_forBind to EMPTY string, as no fileAndRevisionId found.');\r\n\t\t\tthis.fileId_forBind = '';\r\n\t\t\tthis.revisionId_forBind = '';\r\n\t\t} else {\r\n\t\t\tthis.fileId_forBind = fileAndRevisionId.fileId; // set in INIT_ConnectedModelKeys\r\n\t\t\tconsole.log('bv3d, op-c, revId changed to:', fileAndRevisionId.revisionId);\r\n\t\t\tthis.revisionId_forBind = fileAndRevisionId.revisionId;\t\r\n\t\t}\r\n\r\n\r\n\t\treturn fileAndRevisionId;\r\n\t}\r\n\r\n\r\n\tasync openBimModeToggled2(openBim_fromCheckbox: boolean) {\r\n\t\tconsole.log('bv3d.openBimModeToggled2', openBim_fromCheckbox);\r\n\t\tthis.setIsOpenbimOrNot(openBim_fromCheckbox,'openBimModeToggled2'); //openBimModeToggled2\r\n console.log('openBimModeToggled2 calls second_LoadSomehow.');\r\n await this.loadConnectedModel_Somehow(this.loaded_fileAndRevisionId!, undefined);\r\n\t}\r\n\r\n\tsetIsOpenbimOrNot(isOpenBim:boolean, who:string):void { // UB:openBimModeToggled2 & init_loadRevisionModel_someHow \r\n\t\tconsole.log('setIsOpenbimOrNot?', isOpenBim, 'State:bv3d.useOpenbimViewer, who?',who);\r\n\t\tthis.useOpenbimViewer = isOpenBim; // turn on/off openBim.\r\n\t\t// VERY important we init this:\r\n\t\tthis.viewerObjectInfoService = isOpenBim ? this.viewerObjectInfoService_OB : this.viewerObjectInfoService_CATENDA;\t\t\r\n\t}\r\n\r\n\t// also called from setupViewerBindings_AND_LoadModel, which is triggered by by viewer:enable-bindings-and-options.\r\n async loadConnectedModel_Somehow(fileAndRevisionId:FileAndRevisionDto, catendaTokenDTO:GetViewerResponse3d|undefined) {\r\n\t\tconsole.log('XYQ second_LoadSomehow called with fileId', fileAndRevisionId.fileId, 'this.useOpenbimViewer?', this.useOpenbimViewer);\r\n\t\tif (!fileAndRevisionId?.revisionId) { \r\n\t\t\tconsole.log('second_Load_MODEL_Somehow aborts as empty rev-IDs:', fileAndRevisionId);\r\n\t\t\treturn; \r\n\t\t}\r\n\r\n\t\tthis.spacesLoaded = false; this.spacesLoaded_inf='1';// JG moved this around.loadRevisionModel_someHow\r\n\t\tconsole.log('SETTING_SPACES_LOADED-LRMS', this.spacesLoaded_inf);\r\n\r\n\t\tif (this.useOpenbimViewer) {//-loadConnectedModel_Somehow \r\n\t\t\tconsole.log('second_LoadSomehow calls openbim_load_ConnectedModel.');\r\n\t\t\tthis.openbim_load_BlobModel_WithSpaces_AlmostNOOP(); \r\n\t\t} else {\r\n //if (!catendaTokenDTO) { catendaTokenDTO = await this.getCatendaToken(fileAndRevisionId); }\r\n\t\t\t//await this.catenda_load_TokenModel_WithSpaces(catendaTokenDTO!);//loadConnectedModel_Somehow\r\n\t\t\tawait this.setup_CATENDA_ViewerBindings_AND_LoadModel(); // (this combines setup with catenda_load_TokenModel_WithSpaces)\r\n\t\t} \r\n }\r\n\r\n\topenbim_load_BlobModel_WithSpaces_AlmostNOOP() { // beware, this is almost a NOOP at this point - it is the assign to the bound revisionId, that triggers the OB-load.\r\n\t\tconsole.warn('openbim_load_BlobModel_WithSpaces');\r\n\r\n\t\tconsole.log('(nb, openbim_load_ConnectedModel doesnt yet do anything for spaces.)');\r\n\t\t//this.spacesLoaded = false;this.spacesLoaded_inf='2';//openbim_load_ConnectedModel\r\n\t\t//console.log('SETTING_SPACES_LOADED-OBLCM', this.spacesLoaded_inf);\t\t\r\n\r\n\t\tthis.spacesLoaded = true;this.spacesLoaded_inf='5'; // hack to hide warning. switchToOpenBimViewer_forRevision\r\n\t\tconsole.log('SETTING_SPACES_LOADED-STOBVFR', this.spacesLoaded_inf);\r\n\r\n\t\tconsole.log('openbim_load_BlobModel_WithSpaces publishes hide2dView for twoD_enabled')\r\n this.events.publish('base-viewer-combined:hide2d'); // for now, we don't want the 2d-view, when using openBim - because we haven't made the code for it yet.\r\n\r\n\t\t// hmm, we probably have to publish an event anyway, to tell openbim-container to act?\r\n\t\t//if (false) { // right now it auto-magic-random-loads-by-accident, so we don't do this yet..\r\n\t\t// let self = this; // hmm, hvorfor var den n'dv?\r\n\t\t//\tself.events.publish('base-viewer-combined:loadRevision',{fileAndRevisionId: fileAndRevisionId});\t\r\n\t\t//}\r\n\t}\r\n\r\n\tasync catenda_load_TokenModel_WithSpaces(catendaTokenDTO: GetViewerResponse3d) { // UB: loadConnectedModel_Somehow\r\n\t\t// (Hvis vi ser bort fra spaces), er den her faktisk straight 'just load/show the 3d model the token refers to'.)\r\n\t\tif (!this.hasCatenda_3dToken(catendaTokenDTO)) { \r\n\t\t\tconsole.warn('catenda_load_TokenModel_WithSpaces: no 3d-token, so we couldnt.')\r\n\t\t\tthis.spacesLoaded = true;this.spacesLoaded_inf='3';//catenda_load_TokenModel_WithSpaces\r\n\t\t\tconsole.log('SETTING_SPACES_LOADED-CLTMWS', this.spacesLoaded_inf);\r\n\t\t\tthis.viewerNotLoaded = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet url: string = (catendaTokenDTO.viewerTokenDto).url;\r\n\t\tconsole.log(\"3d VIEWERTOKEN \" , catendaTokenDTO);\r\n\t\tconsole.log(\"loadConnectedModel (D loadUrl)\");\r\n\r\n\t\tconst the_viewerContainer3d = $('#viewerContainer3d');\r\n\t\tif (!the_viewerContainer3d || the_viewerContainer3d.length == 0) {\r\n\t\t\tconsole.warn('catenda_load_TokenModel_WithSpaces: the_viewerContainer3d is empty:', the_viewerContainer3d);\r\n\t\t\t//return;\r\n\t\t} else {\r\n\t\t\tconsole.log('the_viewerContainer3d?', the_viewerContainer3d);\r\n\t\t\tconst namedMethod = the_viewerContainer3d.viewer;\r\n\t\t\tconsole.log('named method?', namedMethod);\r\n\t\t\tif (!namedMethod) {\r\n\t\t\t\tconsole.warn('catenda_load_TokenModel_WithSpaces: no method \"viewer\" on the_viewerContainer3d',namedMethod);\r\n\t\t\t} else {\r\n\t\t\t\tthe_viewerContainer3d.viewer('loadUrl', url);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst IFC_Spaces:number[] = await this.bimsyncApi.GetIfcSpacesForRevision(catendaTokenDTO.bimRevisionId);\r\n\t\tthis.ifcSpaces = IFC_Spaces;//catenda_load_TokenModel_WithSpaces\r\n\t\tthis.spacesLoaded = true;this.spacesLoaded_inf='4';\r\n\t\tconsole.log('SETTING_SPACES_LOADED-B-CLTMWS', this.spacesLoaded_inf);\r\n\t\tif (this.isModelLoaded) {\r\n\t\t\tthis.setup_CATENDA_ShouldShowSpaces(this.spacesEnabled);\r\n\t\t\tthis.setup_CATENDA_handlers_for_LookAtModel();\r\n\t\t}\r\n\t}\r\n\r\n\tstatic EMPTY_TOKEN:string = \"EMPTY_TOKEN_OPENBIM\";\r\n\r\n \thasCatenda_3dToken(dto: GetViewerResponse3d):boolean {\r\n\t\tif (dto == undefined) { return false; } // (for IsCatendaEnabled==false case.)\r\n\t\tif (!dto.viewerTokenDto) { return false; }\r\n\t\t\r\n\t\tconst token:string = dto.viewerTokenDto.token;\r\n\t\tconst noToken:boolean = (!token || token == BaseViewerThreeD.EMPTY_TOKEN);\r\n\t\treturn !noToken; \r\n\t}\r\n\r\n \r\n\tasync Init_CATENDA_ViewerFirst_or_subsequent():Promise { // UB: attached AND on event:'viewer:enable-bindings-and-options' // Triggered by CATENDA-onLoad-callback, which again is triggered by the call to BimsyncSetupHandler.loadViewer3d().\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring Init_CATENDA_ViewerFirst_or_subsequent, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n \t\tconst entireBimSyncApi_HasNotBeenInitYet:boolean = this.bimsyncSetupHandler.isBimsync_ENGINES_Setup == false;\r\n if (entireBimSyncApi_HasNotBeenInitYet) {\r\n await this.CATENDA_loadThreeDViewer_FirstTime(); // must only be done FIRST time. Will itself ultimately lead to 'setupViewerBindings' being called.\r\n } else {\r\n await this.setup_CATENDA_ViewerBindings_AND_LoadModel(); // must be done EACH time. (in attached)\r\n }\r\n\t}\r\n\r\n async CATENDA_loadThreeDViewer_FirstTime(): Promise {\r\n\t\tconsole.log('bv3d.loadThreeDViewer_FirstTime');\r\n try {\r\n this.bimsyncSetupHandler.loadViewer3d(); //BimsyncSetupHandler.loadViewer3d will trigger setupViewerBindings eventually.\r\n } catch(e) {\r\n //Can fail on bimsync, if Catenda API is down.\r\n console.warn(\"the 3D viewer could not be loaded.\");\r\n this.viewerNotLoaded = true;\r\n this.spacesLoaded = true;this.spacesLoaded_inf='6';//loadThreeDViewer_FirstTime, viewer-could-not-be-loaded\r\n\t\t\tconsole.log('SETTING_SPACES_LOADED-LTDVFT', this.spacesLoaded_inf);\r\n }\r\n //As the bimsync variable is global, this will not have to be reloaded \r\n //When switching between menu pages, but the bindings/options/viewer-ui\r\n //will have to be setup again.\r\n //And if nothing is setup, bimsync has to be intialized first, which\r\n //is why it is handled using an event.\r\n }\r\n\r\n\tIs_Catenda_Init:boolean = false;\r\n\t// also triggered - indirectly - by viewer:enable-bindings-and-options\r\n async setup_CATENDA_ViewerBindings_AND_LoadModel(): Promise { \r\n\t\tconsole.log('bv3D.setupViewerBindings');\r\n\t\tif (!this.Is_Catenda_Init) {\r\n\t\t\tthis.Is_Catenda_Init = true;\r\n\t\t\tthis.SETUP_CATENDA_handlers_for_3dviewer_MODEL_Loaded();\r\n\t\t\tthis.SETUP_CATENDA_handleSelect3d();\r\n\t\t\tthis.bimsyncSetupHandler.handleCATENDA_ViewerUISetupAndViewerOptions();\r\n\t\t}\r\n //await this.loadConnectedModel_Somehow(this.loaded_fileAndRevisionId!, empty_catendaTokenDTO);//in-setupViewerBindings_AND_LoadModel.\r\n\t\tlet catendaTokenDTO:GetViewerResponse3d|undefined = await this.getCatendaToken(this.loaded_fileAndRevisionId!); \r\n\t\tawait this.catenda_load_TokenModel_WithSpaces(catendaTokenDTO!);//setup_CATENDA_ViewerBindings_AND_LoadModel\r\n }\r\n\r\n SETUP_CATENDA_handlers_for_3dviewer_MODEL_Loaded(): void {\r\n\t\t// NB, ikke noget async i denne metode - paa yderste niveau - viewer.LOAD er selvf. stadig async!\r\n let self = this;\r\n console.log(\"(Binding viewer.error)\"); //Remember to delete\r\n $('#viewerContainer3d').bind('viewer.error', function(event: Event, modelId: string) {\r\n console.log(\"Viewer3D model error \", event);\r\n });\r\n \r\n console.log(\"(Binding viewer.load)\"); //Remember to delete\r\n $('#viewerContainer3d').bind('viewer.load', function(event: Event, modelId: string) {\r\n console.log(\"Viewer3D model loaded \", event);\r\n self.setup_CATENDA_handlers_for_LookAtModel();\r\n self.setup_CATENDA_ShouldShowSpaces(self.spacesEnabled);\r\n self.isModelLoaded = true;\r\n });\r\n console.log(\"Binding DONE\"); //Remember to delete\r\n }\r\n\r\n // todo, omdoeb alle CATENDA deps\r\n setup_CATENDA_handlers_for_LookAtModel(): void {\r\n let self = this;\r\n $('#viewerContainer3d').viewer('modelInfo', function(modelInfos: any) {\r\n\t\t\ttry {\r\n\t\t\t\tconst viewerContainer3d = $('#viewerContainer3d');\r\n\t\t\t\tconst lastModelInfo = modelInfos[modelInfos.length - 1];\r\n\t\t\t\tconst lastModel_bBox = lastModelInfo.boundingBox;\r\n\t\t\t\tviewerContainer3d.viewer('lookAtBoundingBox', lastModel_bBox);\r\n\t\t\t} catch (hmm) {\r\n\t\t\t\tconsole.warn('err lookAtBoundingBox', hmm);\r\n\t\t\t}\r\n });\r\n }\r\n\r\n SETUP_CATENDA_handleSelect3d(): void {\r\n let self = this;\r\n $('#viewerContainer3d').bind('viewer.select', async function(event: Event, selectedObjectIds: number[]) {\r\n self.events.publish('base-viewer-combined:select',{event: event, objectIds: selectedObjectIds});\r\n self.handleDisplayName(selectedObjectIds); \r\n });\r\n $('#viewerContainer3d').bind('viewer.doubleclick', async function(event: Event, selectedObjectId: number) { \r\n self.events.publish('base-viewer-combined:dbl-click',{event: event, objectId: selectedObjectId})\r\n\r\n });\r\n $('#viewerContainer3d').bind('viewer.contextmenu', async function(event: Event, objectId: number) { \r\n let selectedObjects : number[] = []\r\n await $('#viewerContainer3d').viewer('eachSelected', function(id: number) {\r\n selectedObjects.push(id)\r\n });\r\n if (selectedObjects.length > 0) {\r\n let actions: any[] = [\r\n { viewKey: \"button\", setup: { textKey: \"Show all\", actionKey: \"showAll\", service: {showAll: () => { self.showAll() }}}},\r\n { viewKey: \"button\", setup: { textKey: \"Hide\", actionKey: \"hide\", service: {hide: () => { self.hideObjects(selectedObjects) }}}},\r\n { viewKey: \"button\", setup: { textKey: \"Hide others\", actionKey: \"hideAllOthers\", service: {hideAllOthers: () => { self.hideOthers(selectedObjects) }}}},\r\n { viewKey: \"button\", setup: { textKey: \"Make translucent\", actionKey: \"translucent\", service: {translucent: () => { self.makeTranslucent(selectedObjects) }}}},\r\n { viewKey: \"button\", setup: { textKey: \"Isolate\", actionKey: \"isolate\", service: {isolate: () => { self.isolateSelected(selectedObjects) }}}},\r\n { viewKey: \"button\", setup: { textKey: \"Look at\", actionKey: \"lookAt\", service: {lookAt: () => { self.lookAt(selectedObjects) }}}}\r\n ]\r\n self.contextMenuService.open(event, actions);\r\n }\r\n });\r\n }\r\n\r\n async handleDisplayName(selectedObjectIds: number[]) {\r\n if (selectedObjectIds.length > 0) {\r\n let product: any = await this.bimsyncApi.GetProductInfoByObjectId(selectedObjectIds[0]);\r\n this.lastClickedElementName = product.attributes.Name.value;\r\n } else {\r\n this.lastClickedElementName = undefined;\r\n } \r\n\t}\r\n\r\n\t/* JG: All these 'viewerObjectInfoService.findObjectsToHandle' are really \r\n\t'do action X on 3dview for these itemIDs'.\r\n\r\n\tSo, we need to find the opposite; I wonder if that also goes through viewerObjectInfoService.\r\n\tIt seems it is set up in 'SETUP_handleSelect3d()',\r\n\twhich turns it into a ' self.events.publish('base-viewer-combined:select',{event: event, objectIds: selectedObjectIds});'\r\n\r\n\t*/\r\n private async hideObjects(selectedObjects: number[]): Promise {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring hideObjects, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n await this.viewerObjectInfoService!.findObjectsToHandle(selectedObjects,ViewerMethodNames.hide);\r\n }\r\n \r\n private hideOthers(selectedObjectIds: number[]): void {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring hideOthers, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n $('#viewerContainer3d').viewer('hideAll');\r\n this.viewerObjectInfoService!.findObjectsToHandle(selectedObjectIds,ViewerMethodNames.show);\r\n\r\n }\r\n private showAll(): void {\r\n $('#viewerContainer3d').viewer('showAll');\r\n if (!this.spacesEnabled) {\r\n $('#viewerContainer3d').viewer('hide', this.ifcSpaces);\r\n }\r\n }\r\n\r\n private makeTranslucent(selectedObjects: number[]): void {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring makeTranslucent, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n this.viewerObjectInfoService!.findObjectsToHandle(selectedObjects,ViewerMethodNames.translucent);\r\n }\r\n\r\n private isolateSelected(selectedObjectIds: number[]): void {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring isolateSelected, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n $('#viewerContainer3d').viewer('translucentAll');\r\n this.viewerObjectInfoService!.findObjectsToHandle(selectedObjectIds,ViewerMethodNames.select);\r\n if (!this.spacesEnabled) { // FIXME, catenda-only here:\r\n $('#viewerContainer3d').viewer('hide', this.ifcSpaces);\r\n }\r\n }\r\n\r\n private lookAt(selectedObjectIds: number[]): void {\r\n\t\tif (!this.hasCatenda3d()) {\r\n\t\t\tconsole.warn(\"Ignoring lookAt, because no Catenda.\");\r\n\t\t\treturn;\r\n\t\t}\r\n this.viewerObjectInfoService!.findObjectsToHandle(selectedObjectIds,ViewerMethodNames.lookAt);\r\n }\r\n\r\n private async highlightSelected(selectedObjectIds: number[]): Promise {\r\n\t\tconsole.log('BaseViewerThreeD.highlightSelected received', selectedObjectIds);\r\n await this.viewerObjectInfoService!.findObjectsToHandle(selectedObjectIds,ViewerMethodNames.highlight);\r\n }\r\n\r\n\tprivate async changeTool_Event(tool: ToolEnum) {\r\n\t\tconst threeD_svc = this.get_baseViewerThreeDService();\r\n\t\tif (threeD_svc) {\r\n\t\t\tthreeD_svc.changeSelectedTool(tool);\r\n\t\t} else {\r\n\t\t\tconsole.warn('could not handle changetool-event, because no 3d-service.', tool);\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate hasCatenda3d():boolean {\r\n\t\tconst catendaViewer = $('#viewerContainer3d');\r\n\t\tif (!catendaViewer || catendaViewer.length == 0) { return false; }\r\n\t\tconst hasFunc = catendaViewer.viewer;\r\n\t\tconst hasCatenda = !!hasFunc;\r\n\t\treturn hasCatenda;\r\n\t}\r\n}\r\n\r\n\r\n\r\n\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","Three_Sel","getSelectedObjectIDs","objectIDs","this","OB","openBim_getObjectIDs","catenda_getObjectIDs","$","viewer","realSel","highlighter","selection","asArray","bob","console","log","length","deselectAll","openBim_deselectAll","catenda_deselectAll","clear","BaseViewerThreeD","init_useOpenbimViewer","who","initialOpenbimFlag","setIsOpenbimOrNot","get_baseViewerThreeDService","useOpenbimViewer","openBimHandles","openbimViewerThreeDService","catendaViewerThreeDService","constructor","api","bimsyncApi","appContext","contextMenuService","viewerObjectInfoService_CATENDA","viewerObjectInfoService_OB","events","colorLegendService","bimsyncSetupHandler","spacesEnabled","ifcSpaces","subscriptions","viewerNotLoaded","spacesLoaded","spacesLoaded_inf","isModelLoaded","orgId_bv3","fileId_forBind","revisionId_forBind","Is_Catenda_Init","setOpenBimHandles","async","subscribe","shouldShowSpaces","setup_CATENDA_ShouldShowSpaces","reload","openBim","openBimModeToggled2","hasCatenda3d","handle_CATENDA_Spaces","warn","direction","cropModel","tool","changeTool_Event","objectIds","colorInstances","resetColors","Init_CATENDA_ViewerFirst_or_subsequent","highlightSelected","hideObjects","hideOthers","makeTranslucent","isolateSelected","lookAt","projectId","prj","getSelectedProject","ownerCompanyId","fileAndRevisionId","INIT_ConnectedModelKeys","openbim_load_BlobModel_WithSpaces_AlmostNOOP","window","dispatchEvent","Event","getRandomColor","changeSelectedTool","toolNumber","mode","selectedObjects","handle_CATENDA_ViewerCleanupModels","lastClickedElementName","undefined","loadConnectedModel_Somehow","loaded_fileAndRevisionId","empty_catendaTokenDTO","modelInfos","modelInfo","forEach","subscription","dispose","catendaTokenDTO","project","get","revisionId","jsonResult","setTokenAndProject","handleError","fileId","openBim_fromCheckbox","isOpenBim","viewerObjectInfoService","setup_CATENDA_ViewerBindings_AND_LoadModel","publish","hasCatenda_3dToken","url","viewerTokenDto","the_viewerContainer3d","namedMethod","IFC_Spaces","GetIfcSpacesForRevision","bimRevisionId","setup_CATENDA_handlers_for_LookAtModel","dto","token","EMPTY_TOKEN","isBimsync_ENGINES_Setup","CATENDA_loadThreeDViewer_FirstTime","loadViewer3d","e","SETUP_CATENDA_handlers_for_3dviewer_MODEL_Loaded","SETUP_CATENDA_handleSelect3d","handleCATENDA_ViewerUISetupAndViewerOptions","getCatendaToken","catenda_load_TokenModel_WithSpaces","self","bind","event","modelId","viewerContainer3d","lastModel_bBox","boundingBox","hmm","selectedObjectIds","handleDisplayName","selectedObjectId","objectId","actions","viewKey","setup","textKey","actionKey","service","showAll","hide","hideAllOthers","translucent","isolate","open","product","GetProductInfoByObjectId","attributes","Name","value","findObjectsToHandle","threeD_svc","catendaViewer","bindable","autoinject","B"],"sourceRoot":""}