{"version":3,"file":"app-57065e2d.a667a03d4817562c.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/project/work-area/bim-viewer-three-d/bim-viewer-three-d.scss","webpack://client-app/./src/app/project/work-area/bim-viewer-three-d/bim-viewer-three-d.html","webpack://client-app/./src/app/project/work-area/bim-viewer-three-d/bim-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, \"#viewerContainer3d{width:100%;height:100%;position:relative;background:linear-gradient(rgba(125, 188, 255, 0.2), rgba(255, 255, 255, 0))}#viewerContainer3d canvas{border-top-left-radius:8px;border-top-right-radius:8px}.user-message{position:absolute;top:0;margin-top:2px;left:50%;transform:translateX(-50%)}.user-message .anim-div .warning-msg,.user-message .anim-div .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}.user-message .anim-div .warning-msg{background-color:#ffe100}.user-message .anim-div .information-msg{background-color:#d3d3d3}.user-message .anim-div .information-msg i{animation:spin-animation 1s infinite}@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/project/work-area/bim-viewer-three-d/bim-viewer-three-d.scss\"],\"names\":[],\"mappings\":\"AAAA,mBACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,4EAAA,CAEA,0BACC,0BAAA,CACA,2BAAA,CAIF,cACC,iBAAA,CACA,KAAA,CACA,cAAA,CACA,QAAA,CACA,0BAAA,CAEC,8EACC,WAAA,CACA,cAAA,CACA,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,cAAA,CACA,iBAAA,CACA,kBAAA,CAGD,qCACC,wBAAA,CAGD,yCACC,wBAAA,CACA,2CACC,oCAAA,CAMJ,0BACC,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\":[\"#viewerContainer3d {\\r\\n\\twidth: 100%;\\r\\n\\theight: 100%;\\r\\n\\tposition: relative;\\r\\n\\tbackground: linear-gradient(rgba(125, 188, 255, 0.2), rgba(255, 255, 255, 0));\\r\\n\\t\\r\\n\\tcanvas {\\r\\n\\t\\tborder-top-left-radius: 8px;\\r\\n\\t\\tborder-top-right-radius: 8px;\\r\\n\\t}\\r\\n}\\r\\n\\r\\n.user-message {\\r\\n\\tposition: absolute;\\r\\n\\ttop: 0;\\r\\n\\tmargin-top: 2px;\\r\\n\\tleft:50%;\\r\\n\\ttransform: translateX(-50%);\\t\\r\\n\\t.anim-div {\\r\\n\\t\\t.warning-msg, .information-msg {\\r\\n\\t\\t\\tpadding: 5px;\\r\\n\\t\\t\\tmargin-top: 2px;\\r\\n\\t\\t\\tpadding-left: 20px;\\r\\n\\t\\t\\tpadding-right: 20px;\\r\\n\\t\\t\\tborder-radius: 5px;\\r\\n\\t\\t\\tmax-width: 100%;\\r\\n\\t\\t\\ttext-align: center;\\r\\n\\t\\t\\twhite-space:nowrap;\\r\\n\\t\\t}\\r\\n\\t\\t\\r\\n\\t\\t.warning-msg {\\r\\n\\t\\t\\tbackground-color: rgb(255, 225, 0);\\r\\n\\t\\t}\\r\\n\\t\\t\\r\\n\\t\\t.information-msg {\\r\\n\\t\\t\\tbackground-color: lightgray;\\r\\n\\t\\t\\ti {\\r\\n\\t\\t\\t\\tanimation: spin-animation 1.0s infinite;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t}\\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}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = \"\\r\\n\\t\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t The connected model was not part of the last synchronization.\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t 0 ? 'visible' : 'hidden'}\\\">\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t One or more models are still having data loaded.\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\r\\n\\r\\n\";","import {autoinject, bindable} from \"aurelia-framework\";\r\nimport {ApiClient} from \"../../../services/api-client\";\r\nimport {BimsyncClient} from \"../../../services/bimsync-client\";\r\nimport {EventAggregator, Subscription} from \"aurelia-event-aggregator\";\r\nimport { AppContextService } from \"app/services/app-context-service\";\r\nimport {ViewerTokenDto} from \"../../../models/viewer-dtos/Dtos/Bimsync/BimsyncDtos\";\r\nimport { GetAllObjectIdsResponse, RevisionInformation3d, TurnOnRevision3dResponse } from \"../split-viewer-interfaces\";\r\nimport { BimViewerFileDtoSplitView, BimViewerModelAndAllRevisions, BimViewerModelAndRevision, BimViewerRevisionDtoSplitView } from \"app/models/viewer-dtos/Dtos/bimviewer-dtos\";\r\nimport { ObjectListManager } from \"app/services/object-list/object-list-manager\";\r\nimport { ContextMenuService } from \"app/services/context-menu-service\";\r\nimport { ModalService } from \"app/services/modal-service\";\r\nimport { BimViewerThreeDService } from \"app/services/bim-viewer-three-d-service\";\r\nimport { SyncStatusDto } from \"app/models/tender/sync-status-dto\";\r\nimport { InstanceColorData, InstanceColorDataCollection } from \"app/models/color-legend-dto\";\r\nimport Color from \"color\";\r\nimport { DialogCloseResult } from \"aurelia-dialog\";\r\nimport { Catenda_ViewerObjectInfoService } from \"app/services/viewer-object-info-service/viewer-object-info-service\";\r\nimport { ViewerMethodNames } from \"app/services/viewer-object-info-service/viewer-method-names\";\r\n//import { AddSourceToFilter } from \"app/components/add-source-to-filter/add-source-to-filter\";\r\nimport { BimsyncSetupHandler } from \"app/services/bimsync-setup-handler\";\r\nimport { EntityIdFinderService } from \"app/services/entity-id-finder-service\";\r\nimport {ToolEnum} from \"../../../services/BimViewerThreeDServiceIF\";\r\n\r\ndeclare let $: any;\r\n\r\n@autoinject\r\nexport class BimViewerThreeD {\r\n public $viewer3d: any;\r\n private loadedRevisions: Map = new Map(); //Key revision, ModelInfo\r\n @bindable public viewerVisible: boolean = true;\r\n @bindable public projectId : string = \"\";\r\n public static shouldBreakPartGridCall: boolean;\r\n private isNewestPluginRevisionActive: boolean = false;\r\n \r\n public syncStatus?: SyncStatusDto;\r\n private subscriptions: Subscription[] = [];\r\n\r\n private loadingModels: string[] = []; //Used for displaying a loading icon\r\n\r\n public globalRejectionListener: Subscription | undefined;\r\n\r\n\r\n constructor(private api : ApiClient, private bimsyncApi : BimsyncClient, private eventAggregator : EventAggregator,\r\n public appContext:AppContextService, public contextMenuService: ContextMenuService, public modal: ModalService,\r\n public bimViewerThreeDService: BimViewerThreeDService, public viewerObjectInfoService: Catenda_ViewerObjectInfoService,\r\n public bimsyncSetupHandler: BimsyncSetupHandler, private entityIdFinderService: EntityIdFinderService) {\r\n }\r\n\r\n async bind(params: any): Promise {\r\n console.log(\"3d-viewer-bind\");\r\n\t\tthis.bimViewerThreeDService.spacesEnabled = false;\r\n //if (this.loadedRevisions == undefined) { this.loadedRevisions = new Map(); }\r\n this.viewerVisible = params.isViewerVisible;\r\n \r\n this.syncStatus = await this.api.project(this.appContext.projectId).get(`Project/GetSyncStatus`).jsonResult();\r\n }\r\n async cropModel(direction: string[]): Promise {\r\n let selectedObjects :number[] = []\r\n await $('#viewerContainer3d').viewer('eachSelected', function(id: number) {\r\n selectedObjects.push(id)\r\n });\r\n $('#viewerContainer3d').viewer('section', selectedObjects, direction);\r\n }\r\n\r\n async projectIdChanged(): Promise {\r\n await this.fullReload();\r\n }\r\n\r\n async attached(): Promise {\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"3d-viewer-attached\"); }\r\n this.setupSubscriptions();\r\n await this.bimsyncApi.setTokenAndProject(this.projectId);\r\n this.loadViewer();\r\n \r\n this.eventAggregator.publish('WorkAreaContainer:SetupViewer');\r\n\t}\r\n \r\n setupSubscriptions(): void {\r\n let self = this;\r\n this.subscriptions = [\r\n this.eventAggregator.subscribe('3dViewer:TurnOn3dRevision', async (parameter: BimViewerModelAndRevision) => {\r\n\r\n\t\t\t\tconsole.log('(BVTD) the event 3dViewer:TurnOn3dRevision calls our turnOnRevision3d.');\r\n if ((await self.turnOnRevision3d(parameter.model, parameter.revision)).success) {\r\n if (parameter.isNewestPluginRevision == true) {\r\n self.setIsNewestPlugin(parameter.isNewestPluginRevision);\r\n }\r\n if (parameter.revision.objectsIdNotDoneLoading == false) {\r\n self.eventAggregator.publish('Revision:Revision3FinishedLoading', {model: parameter.model, revisionId: parameter.revision.id} )\r\n } else {\r\n self.eventAggregator.publish('Revision:RevisionTurnedOn', {model: parameter.model, revision: parameter.revision, is2d: false});\r\n }\r\n self.eventAggregator.publish('ModelRevision:HandleStateChange');\r\n }\r\n }),\r\n this.eventAggregator.subscribe('3dViewer:TurnOff3dRevision', async (parameter: BimViewerModelAndRevision) => {\r\n await self.turnOffRevision3d(parameter.revision);\r\n if (parameter.isNewestPluginRevision) {\r\n self.setIsNewestPlugin(!parameter.isNewestPluginRevision);\r\n }\r\n self.eventAggregator.publish('Revision:RevisionTurnedOff', {model: parameter.model, revision: parameter.revision, is2d: false}); \r\n }),\r\n this.eventAggregator.subscribe('3dViewer:TurnOffMultiple3dRevision', async (parameter: BimViewerModelAndAllRevisions) => {\r\n for (let revision of parameter.revisions) {\r\n await self.turnOffRevision3d(revision);\r\n if (parameter.isNewestPluginRevision) {\r\n self.setIsNewestPlugin(!parameter.isNewestPluginRevision);\r\n }\r\n self.eventAggregator.publish('Revision:RevisionTurnedOff', {model: parameter.model, revision: revision, is2d: false});\r\n }\r\n }),\r\n this.eventAggregator.subscribe('3dViewer:highlight-selected-items', async (objectListMgr: ObjectListManager) => { await self.highlightSelectedObjects(objectListMgr)}),\r\n this.eventAggregator.subscribe('3dViewer:focus-selected-items', async (objectListMgr: ObjectListManager) => { await self.lookAtSelectedObjects(objectListMgr)}),\r\n this.eventAggregator.subscribe('3dViewer:isolate-selected-items', (objectListMgr: ObjectListManager) => {self.isolateSelectedObjects(objectListMgr)}),\r\n\t\t\tthis.eventAggregator.subscribe('3dViewer:isolate-items', (objectIds: number[]) => self.bimViewerThreeDService.transluteObjects(objectIds) ),\r\n\t\t\tthis.eventAggregator.subscribe('3dViewer:hide-items', (objectIds: number[]) => self.bimViewerThreeDService.hideObjects(objectIds) ),\r\n\t\t\tthis.eventAggregator.subscribe('3dViewer:show-items', (objectIds: number[]) => self.bimViewerThreeDService.showObjects(objectIds) ),\r\n this.eventAggregator.subscribe('3dViewer:ShowSpaces', (shouldShowSpaces: boolean) => {\r\n if (self.loadedRevisions) {\r\n self.bimViewerThreeDService.handleSpaces(self.loadedRevisions, shouldShowSpaces)\r\n } \r\n }),\r\n this.eventAggregator.subscribe('3dViewer:ChangeTool', (tool: ToolEnum) => { /*self.bimViewerThreeDService.changeSelectedTool(tool) */}), // Already done by base-viewer\r\n this.eventAggregator.subscribe('3dViewer:ShowAll', () => { \r\n if (self.loadedRevisions) {\r\n self.bimViewerThreeDService.showAllObjects(self.loadedRevisions) \r\n }\r\n }),\r\n this.eventAggregator.subscribe('3dViewer:TransluteAll', () => { \r\n if (self.loadedRevisions) {\r\n self.bimViewerThreeDService.transluteAllObjects(self.loadedRevisions) \r\n }\r\n }),\r\n this.eventAggregator.subscribe('3dViewer:HideAll', () => { \r\n if (self.loadedRevisions) {\r\n self.bimViewerThreeDService.hideAllObjects(self.loadedRevisions) \r\n }\r\n }),\r\n this.eventAggregator.subscribe('3dViewer:removeRevisions', (revisionIds: string[]) => {self.removeRevisionIdListFromLoadedRevisions(revisionIds)}),\r\n this.eventAggregator.subscribe('3dViewer:color-instances', (instanceColorDataCollection: InstanceColorDataCollection) => { self.colorInstances(instanceColorDataCollection)}),\r\n this.eventAggregator.subscribe('3dViewer:reset-colors', () => {self.resetColors()}),\r\n this.eventAggregator.subscribe('3dViewer:crop', async (direction: string[]) => {await self.cropModel(direction)}),\r\n this.eventAggregator.subscribe('3dViewer:hide-other-items', async (objectListMgr: ObjectListManager) => {await self.hideAllOtherObjects(objectListMgr)}),\r\n this.eventAggregator.subscribe('3dViewer:select-all-instances', async (objectListMgr: ObjectListManager) => {await self.highlightSimilarElements(objectListMgr)}),\r\n this.eventAggregator.subscribe('viewer:enable-bindings-and-options', () => {\r\n //Ensuring viewers are setup before bindings are handled.\r\n self.setupViewerBindings();\r\n })\r\n ]; \r\n }\r\n\r\n async fullReload(): Promise {\r\n this.eventAggregator.publish('viewer-settings:reload');\r\n this.bimViewerThreeDService.reload();\r\n await this.bimsyncApi.setTokenAndProject(this.projectId);\r\n \r\n this.handleViewerCleanupModels();\r\n this.loadedRevisions?.clear();\r\n this.isNewestPluginRevisionActive = false;\r\n this.loadingModels = [];\r\n this.syncStatus = await this.api.project(this.appContext.projectId).get(`Project/GetSyncStatus`).jsonResult();\r\n }\r\n\r\n handleViewerCleanupModels() {\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 unbind(): void {\r\n if (BimsyncSetupHandler.LogInf) { console.log('3d-viewer-unbind'); }\r\n this.subscriptions.forEach((subscription: Subscription) => subscription.dispose());\r\n this.disposeRejectionListener();\r\n BimsyncClient.abortObjectFetching = true;\r\n }\r\n\r\n async isPluginActive(): Promise {\r\n if (!this.isNewestPluginRevisionActive || !this.viewerVisible) {\r\n this.showAlert();\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n setIsNewestPlugin(isNewestPlugin: boolean): void {\r\n this.isNewestPluginRevisionActive = isNewestPlugin;\r\n }\r\n\r\n colorInstances(colorData: InstanceColorDataCollection): void {\r\n if (!this.viewerVisible) {\r\n this.showAlert();\r\n return;\r\n }\r\n\t\tlet colorMap = colorData.colorMap;\r\n\t\tconsole.log('Coloring instances...');\r\n\t\tcolorData.instances.forEach((instance: InstanceColorData) => {\r\n\t\t\tlet color: Color | undefined = colorMap.get(instance.value);\r\n if (color) {\r\n $('#viewerContainer3d').viewer('color', color.hex() ?? '#FFFFFF', instance.entityLabel);\r\n }\r\n\t\t})\r\n\t\tconsole.log('Coloring done!');\r\n\t}\r\n\r\n\tresetColors(): void {\r\n\t\t$('#viewerContainer3d').viewer('resetColors');\r\n\t\twindow.dispatchEvent(new Event('resize'));\r\n\t}\r\n\r\n async lookAtSelectedObjects(objectListMgr: ObjectListManager): Promise {\r\n if (!(await this.isPluginActive())) {\r\n return;\r\n }\r\n let listOfObjects: number[] = await this.entityIdFinderService.getSelectedObjectsAsEntityIds(objectListMgr, this.bimViewerThreeDService);\r\n this.viewerObjectInfoService.findObjectsToHandle(listOfObjects, ViewerMethodNames.lookAt);\r\n }\r\n\r\n async isolateSelectedObjects(objectListMgr: ObjectListManager): Promise {\r\n if (!(await this.isPluginActive())) {\r\n return;\r\n }\r\n let listOfObjects: number[] = await this.entityIdFinderService.getSelectedObjectsAsEntityIds(objectListMgr, this.bimViewerThreeDService);\r\n if (this.loadedRevisions) {\r\n this.bimViewerThreeDService.transluteAllObjects(this.loadedRevisions);\r\n }\r\n this.viewerObjectInfoService.findObjectsToHandle(listOfObjects, ViewerMethodNames.select);\r\n }\r\n\r\n async highlightSelectedObjects(objectListMgr : ObjectListManager): Promise {\r\n if (!(await this.isPluginActive())) {\r\n return;\r\n }\r\n let listOfObjects: number[] = await this.entityIdFinderService.getSelectedObjectsAsEntityIds(objectListMgr, this.bimViewerThreeDService);\r\n this.viewerObjectInfoService.findObjectsToHandle(listOfObjects, ViewerMethodNames.highlight)\r\n }\r\n\r\n async hideAllOtherObjects(objectListMgr: ObjectListManager) {\r\n if (!(await this.isPluginActive())) {\r\n return;\r\n }\r\n let selectedObjects: number[] = await this.entityIdFinderService.getSelectedObjectsAsEntityIds(objectListMgr, this.bimViewerThreeDService);\r\n if (this.loadedRevisions) {\r\n this.bimViewerThreeDService.hideAllOtherObjects(this.loadedRevisions, selectedObjects);\r\n }\r\n }\r\n\r\n async highlightSimilarElements(objectListMgr: ObjectListManager) {\r\n if (!(await this.isPluginActive())) {\r\n return;\r\n }\r\n let selectedObjects: number[] = await this.entityIdFinderService.getAllSimilarInstancesAsEntityIds(objectListMgr, this.bimViewerThreeDService);\r\n if (this.loadedRevisions) {\r\n this.viewerObjectInfoService.findObjectsToHandle(selectedObjects, ViewerMethodNames.highlight);\r\n }\r\n }\r\n\r\n showAlert(): void {\r\n if ($('#panel-container').find(\".alert-missing-model\").length == 0) {\r\n $('#panel-container').append(''+\r\n ' Please enable the newest revision of the connected model to highlight instances or types.'+\r\n ''+\r\n '\t×'+\r\n ''+\r\n '')\r\n }\r\n }\r\n\r\n getViewer3d(): void {return $(\"#viewerContainer3d\");}\r\n\r\n getViewer2d(): void {return $(\"#viewerContainer2d\");}\r\n\r\n loadViewer(): void { //Loads cantenda's viewer.\r\n if (this.bimsyncSetupHandler.isBimsync_ENGINES_Setup == false) {\r\n this.setup3dViewerWithOptions();\r\n } else { \r\n this.setupViewerBindings();\r\n }\r\n }\r\n setupViewerBindings(): void {\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 this.handle3dviewerLoaded();\r\n this.handleSelect3d();\r\n this.bimsyncSetupHandler.handleCATENDA_ViewerUISetupAndViewerOptions();\r\n }\r\n\r\n setup3dViewerWithOptions(): void {\r\n BimViewerThreeD.shouldBreakPartGridCall = false;\r\n this.bimsyncSetupHandler.loadViewer3d();\r\n }\r\n\r\n handle3dviewerLoaded(): void {\r\n this.eventAggregator.publish('WorkAreaContainer:viewers-ready-to-load'); //Ensures that the viewer is loaded before models are being loaded into it.\r\n let self = this;\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"binding viewer events\"); }\r\n $('#viewerContainer3d').bind('viewer.error', function(event: Event, modelId: string) {\r\n console.log(\"Viewer3D model error \", modelId);\r\n self.triggerLoading(false);\r\n self.disposeRejectionListener();\r\n });\r\n \r\n $('#viewerContainer3d').bind('viewer.load', function(event: Event, modelId: string) {\r\n self.handleLookAtModel();\r\n self.handleSpaces();\r\n if (BimsyncSetupHandler.LogInf) { console.log(\"Model finished loading\", event); }\r\n self.triggerLoading(false);\r\n self.eventAggregator.publish(\"color-legend:color-instances\");\t// Colors if color legend is listening\r\n self.disposeRejectionListener();\r\n });\r\n }\r\n triggerLoading(isLoading: boolean) {\r\n this.eventAggregator.publish(\"is-loading\", isLoading);\r\n }\r\n\r\n handleSelect3d(): void { \r\n let self: BimViewerThreeD = this;\r\n $('#viewerContainer3d').bind('viewer.select', async function(event: Event, selectedObjectIds: number[]) {\r\n selectedObjectIds = selectedObjectIds.map(Number) //Hack to convert the \"string-type\" numbers from Catenda to actual \"number-type\" numbers.\r\n console.log(selectedObjectIds);\r\n $('#viewerContainer2d').viewer2d(ViewerMethodNames.unselect);\r\n $('#viewerContainer2d').viewer2d(ViewerMethodNames.select, selectedObjectIds);\r\n if ((self.isNewestPluginRevisionActive)) {\r\n self.highlightPartGrid(selectedObjectIds);\r\n }\r\n });\r\n $('#viewerContainer3d').bind('viewer.doubleclick', async function(event: Event, selectedObjectIds: number[]) { \r\n BimViewerThreeD.shouldBreakPartGridCall = true;\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 self.openContextMenu(event, selectedObjects);\r\n }\r\n });\r\n }\r\n\r\n openContextMenu(event: Event, objectIds: number[]): void {\r\n let actions = [];\r\n actions.push({ viewKey: \"button\", setup: { textKey: \"Show all\", actionKey: \"showAll\", service: {showAll: () => { \r\n if (this.loadedRevisions) {\r\n this.bimViewerThreeDService.showAllObjects(this.loadedRevisions) \r\n }\r\n }}}});\r\n actions.push({ viewKey: \"button\", setup: { textKey: \"Hide\", actionKey: \"hide\", service: {hide: () => { this.bimViewerThreeDService.hideObjects(objectIds) }}}});\r\n actions.push({ viewKey: \"button\", setup: { textKey: \"Hide others\", actionKey: \"hideAllOthers\", service: {hideAllOthers: () => { \r\n if (this.loadedRevisions) {\r\n this.bimViewerThreeDService.hideAllOtherObjects(this.loadedRevisions, objectIds) \r\n }\r\n }}}});\r\n actions.push({ viewKey: \"button\", setup: { textKey: \"Make translucent\", actionKey: \"translucent\", service: {translucent: () => { this.bimViewerThreeDService.transluteObjects(objectIds) }}}});\r\n actions.push({ viewKey: \"button\", setup: { textKey: \"Isolate\", actionKey: \"isolate\", service: {isolate: () => { \r\n if (this.loadedRevisions) {\r\n this.bimViewerThreeDService.makeAllOtherObjectsTranslucent(this.loadedRevisions, objectIds) \r\n }\r\n }}}});\r\n actions.push({ viewKey: \"button\", setup: { textKey: \"Look at\", actionKey: \"lookAt\", service: {lookAt: () => { this.bimViewerThreeDService.lookAt(objectIds) }}}});\r\n // if ((this.isNewestPluginRevisionActive)) {\r\n // actions.push({ viewKey: \"button\", setup: { textKey: \"Show parent in grid\", actionKey: \"highlightParents\", service: {highlightParents: async () => { \r\n // let parents: number[] = [];\r\n // for (let id of objectIds) {\r\n // let relation = await this.bimsyncApi.getRelationByObjectId(id);\r\n // parents.push(relation.parent.objectId);\r\n // }\r\n // this.highlightPartGrid(parents) \r\n // }}}});\r\n // }\r\n \r\n this.contextMenuService.open(event, actions);\r\n }\r\n\r\n async highlightPartGrid(objectIds: number[]): Promise {\r\n if(objectIds.length == 0 ) {\r\n this.eventAggregator.publish('BP:highlight-selected-items', {objectIds: []});\r\n return;\r\n }\r\n this.eventAggregator.publish('BP:highlight-selected-items', {objectIds: objectIds});\r\n }\r\n\r\n\r\n\tpublic useCatenda:boolean = true;\r\n\r\n async loadUrl_forRevision(revision: BimViewerRevisionDtoSplitView, model: BimViewerFileDtoSplitView): Promise {\r\n\t\tif (this.useCatenda) {\r\n\t\t\treturn await this.loadUrl_forRevision_Catenda(revision,model); // in loadUrl_forRevision.\r\n\t\t} else {\r\n\t\t\tthrow 'wont happen'; //return await this.loadUrl_forRevision_OpenBim(revision,model);\r\n\t\t}\r\n\t}\r\n\r\n async loadUrl_forRevision_OpenBim(revision: BimViewerRevisionDtoSplitView, model: BimViewerFileDtoSplitView): Promise {\r\n\t\tconsole.log('here, we really ought to tell openbim to load that thing..');\r\n\t\treturn true;\r\n\t}\r\n async loadUrl_forRevision_Catenda(revision: BimViewerRevisionDtoSplitView, model: BimViewerFileDtoSplitView): Promise {\r\n\t\tconsole.log('bim-viewer-three-d.ts loadUrl');\r\n\r\n\t\t/* (Hvis vi koerer catenda, skal vi bruge en viewer-token for model paa\r\n\t\t dette tidspunkt, for at kunne vise/tilgaa en model.)\r\n\t\t */\r\n\r\n let self = this;\r\n let success: boolean = false;\r\n let url3d_fromToken: string = \"\";\r\n\r\n\t\t// FIXME, there should be an interface-dto struct for this response!\r\n let response_withToken = await this.api.project(this.projectId)\r\n .get(`BimsyncViewer/GetViewer3d?aocProjectId=${this.projectId}&revisionId=${revision.id}`)\r\n .jsonResult();\r\n\r\n console.log(\"(bim-viewer-three-d.ts loadUrl) RESPONSE \" , response_withToken);\r\n\r\n if (response_withToken == undefined) {\r\n success = false;\r\n return success;\r\n }\r\n\r\n if (!response_withToken.isSynced) {\r\n\t\t\tconsole.log('(loadUrl_forRevision_Catenda: undoing because !response.isSynced)');\r\n this.undoRevision(revision.id, model, response_withToken, revision);//!synced\r\n } else {\r\n //Used for avoiding adding multiple of the same model. \r\n //Which could occour making multiple clicks on a model to load.\r\n if (this.loadingModels.includes(revision.id)) {\r\n success = false;\r\n return success;\r\n } else {\r\n\t\t\t\tthis.loadingModels.push(revision.id);\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\r\n if (BimsyncSetupHandler.LogInf2) { console.log(\"\\n\\n loadUrl, Amount of Loading models \" , this.loadingModels); }\r\n this.removeRevisionFromLoadedRevisions(revision.id);\r\n\r\n this.eventAggregator.publish('ModelRevision:ModelReady', {model: model, revisionId: revision.id});\r\n\r\n url3d_fromToken = (response_withToken.viewerTokenDto).url;\r\n let bimId: string = response_withToken.bimRevisionId;\r\n let receivedRevisionId: string = response_withToken.revisionId;\r\n\r\n this.bimsyncApi.GetAllObjectIdsForRevision(bimId, receivedRevisionId, model, (revision.revision == model.currentRevision && model.pluginUpload))\r\n .then(async function(allObjIDs: GetAllObjectIdsResponse | undefined): Promise {\r\n await self.handleFinishedGettingObjectIds(allObjIDs, response_withToken.fileBimId); // in loadUrl_forRevision_Catenda.\r\n });\r\n }\r\n\r\n if (success == true || url3d_fromToken != \"\") {\r\n success = this.customloadUrl(url3d_fromToken, revision);\r\n if (success) {\r\n console.log(\"beginning load icon from 3d.\")\r\n this.triggerLoading(true); // activating a 'busy-waiting' UI state/mode.\r\n } else {\r\n\t\t\t\tconsole.log('(loadUrl_forRevision_Catenda: undoing because !success)');\r\n this.undoRevision(revision.id, model, response_withToken, revision);//!success\r\n }\r\n } \r\n return success;\r\n }\r\n\r\n customloadUrl(url3d: string,revision: BimViewerRevisionDtoSplitView): boolean {\r\n try {\r\n let container3d_ = $('#viewerContainer3d');\r\n\r\n let container3d:HTMLElement = container3d_[0];\r\n let viewer:any = container3d_.viewer; // will be a 'function jQueryInterface(t)' on runtime, if all goes well.\r\n\t\t\t//console.log('$ is:', $); \r\n\t\t\t//console.log('jq is:', jQuery);\r\n\t\t\t//let a:number = jQuery;\r\n\t\t\t\r\n if (BimsyncSetupHandler.LogInf2) { console.log(\"container elm:\" , container3d); }\r\n if (BimsyncSetupHandler.LogInf2) { console.log(\"viewer IF\" , viewer); }\r\n \r\n this.setupRejectionListener(revision);\r\n container3d_.viewer('loadUrl', url3d);\r\n return true;\r\n } catch(e) {\r\n console.trace(\"ERROR\", e);\r\n return false;\r\n }\r\n }\r\n\r\n setupRejectionListener(revision: BimViewerRevisionDtoSplitView): void {\r\n //Used for catching catenda internal unhandled promises.\r\n console.log(\"Setting up \\'onunhandledrejection\\' subscription\")\r\n this.globalRejectionListener = this.eventAggregator.subscribe('onunhandledrejection', (event: PromiseRejectionEvent) => {\r\n this.handleUnHandledRejectionEvent(event, revision);\r\n });\r\n }\r\n\r\n handleUnHandledRejectionEvent(event: PromiseRejectionEvent, revision: BimViewerRevisionDtoSplitView): void {\r\n //Catenda's PromiseRejectionEvent event.reason tends to be undefined.\r\n console.warn(\"PromiseRejectionEvent \" , event.type);\r\n let userMessage: string = `The viewer could not load revision #${revision.revision} '${revision.name}'. Please use another revision, or contact Ajour Support.`;\r\n this.modal.OpenMessage('Error loading revision', userMessage);\r\n this.triggerLoading(false);\r\n this.disposeRejectionListener();\r\n }\r\n\r\n disposeRejectionListener():void {\r\n console.log(\"Disposing \\'onunhandledrejection\\' subscription\")\r\n //Should be called after a model has been loaded (viewer.load/viewer.error),\r\n //And on unbind\r\n if (this.globalRejectionListener != undefined) {\r\n this.globalRejectionListener.dispose();\r\n }\r\n\r\n }\r\n\r\n undoRevision(revisionId: string, model: BimViewerFileDtoSplitView, json: any, rev: BimViewerRevisionDtoSplitView): void {\r\n this.removeRevisionFromLoadedRevisions(revisionId);\r\n this.eventAggregator.publish('ModelRevision:ModelNotReady', {model: model, revisionId: revisionId});\r\n\r\n this.modal.OpenMessage(\r\n\t\t\t\"Processing file.\", \r\n\t\t\t`The requested file is ${json.syncProgress}% done processing. \\n (${model.created}, cr:${model.currentRevision}, rev-when:${rev.created}, rev-nr:${rev.revision}, name:${rev.fileName} )`\r\n\t\t);\r\n }\r\n\r\n async handleFinishedGettingObjectIds(allObjectIds: GetAllObjectIdsResponse | undefined, fileBimId: string): Promise { // UB: loadUrl_forRevision_Catenda.\r\n\t\r\n\t\t// JG: I think this REMOVES our 'loadingModel instance', signifying that we have now completed the 'loading' phase:\r\n this.loadingModels = this.loadingModels.filter((revisionId: string) => {\r\n return allObjectIds?.revisionId != revisionId;\r\n });\r\n\r\n if (BimsyncSetupHandler.LogInf2) { console.log(\"handleFinishedGettingObjectIds, Amount of Loading models \" , this.loadingModels); }\r\n\r\n if (allObjectIds == undefined) { return; }\r\n\r\n let shouldUndoModelLoading: boolean = false;\r\n if (allObjectIds.somethingWentWrong) {\r\n shouldUndoModelLoading = await this.modal.OpenConfirm(\"Error fetching objects\", \"Do you want to unload the model? Not unloading will result in working with in-complete data.\").whenClosed((answer: DialogCloseResult) => {\r\n this.triggerLoading(false);\r\n if (!answer.wasCancelled) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n if (!shouldUndoModelLoading) {\r\n this.setupModelInformation(allObjectIds); // in handleFinishedGettingObjectIds. \r\n this.handleSpaces();\r\n this.eventAggregator.publish('Revision:Revision3FinishedLoading', {model: allObjectIds.model, revisionId: allObjectIds.revisionId} )\r\n } else {\r\n this.eventAggregator.publish('ModelRevision:UndoLoadModel', allObjectIds.model);\r\n $('#viewerContainer3d').viewer('unloadModel', fileBimId.replaceAll('-',''));\r\n }\r\n }\r\n\r\n setupModelInformation(allObjectIds: GetAllObjectIdsResponse): void { // UB: handleFinishedGettingObjectIds.\r\n let revisionInfo3d = new RevisionInformation3d(); // in setupModelInformation.\r\n $('#viewerContainer3d').viewer('boundingBox', allObjectIds.otherObjectIdsList, function(boundingBox: any) {\r\n revisionInfo3d.boundingBox = boundingBox;\r\n });\r\n revisionInfo3d.otherObjectIdsList = allObjectIds.otherObjectIdsList;\r\n revisionInfo3d.spaceIds = allObjectIds.spaceObjectIds;\r\n revisionInfo3d.revisionBimId = allObjectIds.bimRevisionId;\r\n revisionInfo3d.isModelShowing = true;\r\n this.loadedRevisions?.set( allObjectIds.revisionId, revisionInfo3d);\r\n }\r\n\r\n async turnOffRevisions(revisionsToToggleOff: BimViewerRevisionDtoSplitView[]): Promise {\r\n for (let revision of revisionsToToggleOff) {\r\n await this.turnOffRevision3d(revision);\r\n }\r\n }\r\n\r\n async turnOffRevision3d(revision: BimViewerRevisionDtoSplitView): Promise {\r\n if(this.loadedRevisions?.has(revision.id)) {\r\n if(this.loadedRevisions?.get(revision.id)?.isModelShowing) {\r\n this.bimViewerThreeDService.turnOffRevision(this.loadedRevisions, revision);\r\n let currentRevision: RevisionInformation3d | undefined = this.loadedRevisions?.get(revision.id);\r\n if (currentRevision) {\r\n currentRevision.isModelShowing = false;\r\n }\r\n }\r\n }\r\n }\r\n \r\n async turnOnRevision3d(model: BimViewerFileDtoSplitView, revision: BimViewerRevisionDtoSplitView): Promise {\t\r\n let hasModelBeenLoaded = this.loadedRevisions.has(revision.id); \r\n let success = hasModelBeenLoaded;\r\n if (hasModelBeenLoaded) {\r\n\t\t\tlet currentRevision: RevisionInformation3d = this.loadedRevisions.get(revision.id)!;\r\n if (currentRevision.isModelShowing != true) {\r\n this.bimViewerThreeDService.turnOnRevision(this.loadedRevisions, revision, this.shouldLookAtModel());\r\n\t\t\t\tcurrentRevision.isModelShowing = true;\r\n }\r\n } else { // (!hasModelBeenLoaded) \r\n\t\t\tconsole.log('turnOnRevision3d calls BV3D.loadUrl');\r\n success = await this.loadUrl_forRevision(revision, model); // in turnOnRevision3d.\r\n\t\t\t/* The chain for turnOnRevision3d is:\r\n\t\t\tturnOnRevision3d -> loadUrl_forRevision -> loadUrl_forRevision_Catenda -> handleFinishedGettingObjectIds -> setupModelInformation (which registers 'allObjIDs'). \r\n\t\t\t (earlier, GetAllObjectIdsForRevision is also used.)\r\n\t\t\t */\r\n }\r\n return new TurnOnRevision3dResponse(hasModelBeenLoaded, success);\r\n }\r\n\r\n removeRevisionFromLoadedRevisions(revisionId: string): void {\r\n this.loadedRevisions?.delete(revisionId);\r\n }\r\n\r\n removeRevisionIdListFromLoadedRevisions(revisions: string[]): void {\r\n for (let revision of revisions) {\r\n this.loadedRevisions?.delete(revision);\r\n }\r\n }\r\n\r\n shouldLookAtModel(): boolean {\r\n let shouldLookAt: boolean = true;\r\n this.loadedRevisions?.forEach( (revision: RevisionInformation3d) => {\r\n if (revision.isModelShowing == true) {\r\n shouldLookAt = false;\r\n return;\r\n }\r\n });\r\n return shouldLookAt;\r\n }\r\n\r\n handleLookAtModel(): void { \r\n let self = this;\r\n //Making sure lookAtBounding are being called both after getallobjectids and viewer.load as it is not known which of these trigger last\r\n $('#viewerContainer3d').viewer('modelInfo', function(modelInfos: any) {\r\n console.log(\"modelinfos \" , modelInfos)\r\n console.log(\"loadedRevisions \" , self.loadedRevisions)\r\n if (self.shouldLookAtModel() || modelInfos.length == 1) { //modelInfos.length == 1 is needed in edge case where the loadedRevisions do not yet contain the model but it has already finished loading.\r\n if (!modelInfos[modelInfos.length - 1]) {\r\n return;\r\n }\r\n console.log('trying to lookAT ', modelInfos)\r\n $('#viewerContainer3d').viewer('lookAtBoundingBox', modelInfos[modelInfos.length - 1].boundingBox);\r\n }\r\n });\r\n }\r\n\r\n handleSpaces(): void {\r\n if (!this.bimViewerThreeDService.spacesEnabled && this.loadedRevisions) {\r\n //Making sure spaces are hidden it is called both after getallobjectids and viewer.load as it is not known which of these trigger last.\r\n this.bimViewerThreeDService.handleSpaces(this.loadedRevisions, false);\r\n }\r\n } \r\n}\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","BimViewerThreeD","constructor","api","bimsyncApi","eventAggregator","appContext","contextMenuService","modal","bimViewerThreeDService","viewerObjectInfoService","bimsyncSetupHandler","entityIdFinderService","loadedRevisions","Map","viewerVisible","projectId","isNewestPluginRevisionActive","subscriptions","loadingModels","useCatenda","async","params","console","log","this","spacesEnabled","isViewerVisible","syncStatus","project","get","jsonResult","direction","selectedObjects","$","viewer","fullReload","B","setupSubscriptions","setTokenAndProject","loadViewer","publish","self","subscribe","parameter","turnOnRevision3d","model","revision","success","isNewestPluginRevision","setIsNewestPlugin","objectsIdNotDoneLoading","revisionId","is2d","turnOffRevision3d","revisions","objectListMgr","highlightSelectedObjects","lookAtSelectedObjects","isolateSelectedObjects","objectIds","transluteObjects","hideObjects","showObjects","shouldShowSpaces","handleSpaces","tool","showAllObjects","transluteAllObjects","hideAllObjects","revisionIds","removeRevisionIdListFromLoadedRevisions","instanceColorDataCollection","colorInstances","resetColors","cropModel","hideAllOtherObjects","highlightSimilarElements","setupViewerBindings","reload","handleViewerCleanupModels","clear","modelInfos","modelInfo","unbind","forEach","subscription","dispose","disposeRejectionListener","showAlert","isNewestPlugin","colorData","colorMap","instances","instance","color","value","hex","entityLabel","window","dispatchEvent","Event","isPluginActive","listOfObjects","getSelectedObjectsAsEntityIds","findObjectsToHandle","getAllSimilarInstancesAsEntityIds","find","length","append","getViewer3d","getViewer2d","isBimsync_ENGINES_Setup","setup3dViewerWithOptions","handle3dviewerLoaded","handleSelect3d","handleCATENDA_ViewerUISetupAndViewerOptions","shouldBreakPartGridCall","loadViewer3d","bind","event","modelId","triggerLoading","handleLookAtModel","isLoading","selectedObjectIds","map","Number","viewer2d","highlightPartGrid","objectId","openContextMenu","actions","viewKey","setup","textKey","actionKey","service","showAll","hide","hideAllOthers","translucent","isolate","makeAllOtherObjectsTranslucent","lookAt","open","loadUrl_forRevision_Catenda","url3d_fromToken","response_withToken","undefined","isSynced","includes","removeRevisionFromLoadedRevisions","viewerTokenDto","url","bimId","bimRevisionId","receivedRevisionId","GetAllObjectIdsForRevision","currentRevision","pluginUpload","then","allObjIDs","handleFinishedGettingObjectIds","fileBimId","undoRevision","customloadUrl","url3d","container3d_","container3d","setupRejectionListener","e","trace","globalRejectionListener","handleUnHandledRejectionEvent","warn","type","userMessage","name","OpenMessage","json","rev","syncProgress","created","fileName","allObjectIds","filter","shouldUndoModelLoading","somethingWentWrong","OpenConfirm","whenClosed","answer","wasCancelled","replaceAll","setupModelInformation","revisionInfo3d","otherObjectIdsList","boundingBox","spaceIds","spaceObjectIds","revisionBimId","isModelShowing","set","revisionsToToggleOff","has","turnOffRevision","hasModelBeenLoaded","turnOnRevision","shouldLookAtModel","loadUrl_forRevision","delete","shouldLookAt","bindable","autoinject"],"sourceRoot":""}