architwin 1.16.2 → 1.16.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/architwin.js CHANGED
@@ -1 +1 @@
1
- var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P((function(resolve){resolve(value)}))}return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};import axios from"axios";import{planeType,planeFactory,planeImageFactory,planeVideoFactory,planePdfFactory,setHudState,gltfType,gltfFactory,boxType,boxFactory,textType,textFactory,css3DType,css3DFactory,planeTypeImage,planeTypeVideo,planeTypePdf,sweepPuckType,puckBackgroundFactory,viewpointType,viewpointFactory,tubeLineType,tubeLineFactory,verticeType,verticeFactory,bufferGeometryType,bufferGeometry,fbxType,fbxFactory,pathPointType,pathPointFactory,pathLineType,pathLineFactory}from"./loaders";import{meterToMillimeter,generateUUID,formatMatterportUrl,initBundleVersion,isEqual,useHexToRgb,getAssetUrl,isVec3Equal,isQuatEqual}from"./utils";import{initToolbarUI,themeManager,toggleActionBarButtons,setActiveActionBtn}from"./atwinui";import{SPACE_EVENTS,MAP_OPTIONS}from"./types";import*as JSZip from"jszip";import*as JSZipUtils from"jszip-utils";import*as superviz from"./superviz";import*as minimap from"./minimap";import"../static/sidebar.css";import*as socketIo from"./socketio";import"../static/map.css";import"../static/media_screen.css";import*as _tag from"./tag";import*as _zoomMeeting from"./meeting/meetingSidebar";import*as _participant from"./participant";import{getTagColorCodeID}from"./tag";import{createMeetingTemplate,joinMeetingTemplate}from"./meeting/templates";import{syncParticipantsLocation}from"./participant";import{ActionHistory}from"./actionHistory";import log from"loglevel";import*as meet from"./zoom";import ShortUniqueId from"short-unique-id";import{setPreferredLanguage,tagFormMode}from"./atwinui/components/toolbar";import{getDrawingMode,getIsDrawing,getIsEditWindow,toggleUndoRedoButtons}from"./atwinui/components/toolbar/spacePartition/roomFormPane";import{Notyf}from"notyf";import"notyf/notyf.min.css";import{setBasepoint,setBasepointObjectPayload,setCoordinateSystem,setMeasurementUnit,setRotationUnit,setScaleFactor,setTempCoordinateSystem,setTempMeasurementUnit,setTempRotationUnit,setTempScaleFactor,getCoordinateSystem}from"./atwinui/components/toolbar/actionSettingsPane";import{setSelectedMap}from"./atwinui/components/toolbar/generalSettingsMenuPane";import{convertYupToZup,convertZupToYup,getRelativePosition,getOriginalWorldPosition}from"./worldConversion";import{renderRemoteSpaceViewing}from"./atwinui/components/toolbar/viewingRemoteSpace";import{renderPreviewModal,togglePreviewModal,closePreviewModal,setPreviewModalAction,activePreviewModal}from"./atwinui/components/toolbar";import{PipeForm}from"./atwinui/components/toolbar/pipeFormPane";import{ActionPathHistory}from"./actionPathHistory";import{_screenShareSession,removeScreenShareSessionData}from"./atwinui/components/toolbar/screenSharePane";import{clearTagVisibilityStorage}from"./atwinui/components/toolbar/tagListPane";import{renderTagPaneContent}from"./atwinui/events";import{clearActivePane}from"./atwinui/events";const uid=new ShortUniqueId({dictionary:"number"});const rsid=new ShortUniqueId({length:10});const transformHistory=new ActionHistory;const pathHistory=new ActionPathHistory;const partitionHistory=new ActionPathHistory;const _config={mp:{urlParams:["help","play","nt","qs","brand","dh","tour","gt","hr","mls","mt","tagNav","pin","portal","f","fp","lang","kb","lp","st","title","tourcta","wts","ts","hl","vr","nozoom","search","wh"]},meet:{meetingKey:""},zoom:{SDKKey:"",SDKSecret:""}};let _apiURL="http://localhost:5173/api";let _appKey;const urlParams=_config.mp.urlParams;let _iframe={};let _isBasicDevApi=true;let _api;let _mediaApi;let _spaceId="";let _space=null;let _mpConfig={};let _atwin=null;let _tags=[];let _tagCategories=undefined;let _userAssignedTagCategories=undefined;let _tagMessageRecepients=[];let _selectedTagUuid=undefined;let _tagMessages=[];let _objects=[];let _meetingParticipants=[];let tags=[];let sweeps=[];let _allSlideShow=[];let _slideShowImage=[];let _currentSlideShowID=0;let _currentSlideIndex=0;let _currentSlideShow=null;var _timer=null;let _videos=[];let _currentViewMode="";let _3DXObjects=[];let _unrenderedObjects=[];let _transformControlNode;let _inputControlComponent;let selectedObject;let _previousTimeStamp=0;let _renderDistance=3;let _autoDetectNearbyObj=false;let _viewMode="public";let _transformMode="translate";let _transformComponent;let previousObjTransform={object_position:{x:0,y:0,z:0},object_rotation:{_x:0,_y:0,_z:0},object_scale:{x:0,y:0,z:0}};let currentObjTransform={object_position:{x:0,y:0,z:0},object_rotation:{_x:0,_y:0,_z:0},object_scale:{x:0,y:0,z:0}};let _previousAction;let actionHistory=[];let _currentSweep=null;let _currentCameraPose;let _currentCameraZoom;let _sweeps=[];let _currentFloor;let _atwinFloors=[];let _atwinLabels=[];let _isInitialLoad=true;let _hasRegisteredLoaders=false;let _sceneObject;let _assetLibrary=[];let _objectMarker;let _pointerSubscription;let _pointerCoord;let _userId;let _generatedObjectIds=[];let _textDimensions={top:{node:null,component:null},bottom:{node:null,component:null},left:{node:null,component:null},right:{node:null,component:null}};let _textDimensionIds=[];let state={isLoading:false,loaded:false,error:"",data:null};let domMousePosition;let _customEventTypes=["GO_BACK"];let spaceEventQueue={events:[]};let _inSpaceMediaScreenId;let _avatarModel;let _mediaScreenHUDs=[];let isFitScreenOccupied=false;let isCdnMapDataAvailable=true;let isCustomSweepPuckSet=false;let _atwinConnections={};let _atwinSceneObjects={};let _atwinShowcaseElements={};let _atwinShowcaseWindows={};let _onMouseClickInstance;let _clickEventInstance;let _continousClickMode=false;let _modelDetails;let _currentRoom;let _currentCoordinateSystem="";let _spaceMetaData;const supportedMediaTypes=["WMV","MOV","MP4","JPG","PNG","JPEG","image","video","FRAME","PDF","PDF"];const supportedModelTypes=["GLB","GLTF","FBX"];const supportedFileTypes=["ZIP","PDF",...supportedMediaTypes,...supportedModelTypes];const tagColors=["c44f47","e15141","FF0000","e992a7","92508e","6040b0","2b667b","0000FF","52b9d1","00FF00","FFA500","6cd283","d1db59","f5cd46","f4af42","ee712e","adb8c2","667c89"];const cursorMarker="CURSORMARKER";let _visualize=true,_editPolygonMode=false,_drawPolygonMode=false,_tubeCounter=1;let visualize=true,_activeVertex,editMode=false,drawMode=false,_thisVertexNode,_thisVertexComponent,_thisVerticesNode,_thisVertexPath=new Array,_currentPolygon,_currentPipe,_polygonShapePath,_polygonDrawingModePath,_pipeShapePath,_polygonWallDataPath,_polygonDataPath,_polygonWallHeightPath,_polygonFloorLevelPath,_verticeComponentsCollection=[],_vertexConnectiveComponentCollection=[],_vertexConnectiveNodeCollection=[],_polygonFloorOffset=.1,_floorBaseHeight,_offsetedBaseHeight=_floorBaseHeight?_floorBaseHeight+_polygonFloorOffset:undefined,_wallBaseHeight;let _intersectionData,_tubes,_verticeEmitPath,_verticeEditEmitPath;let _navigationInputNode;let _navigationComponent;let _isNavigationComponentCreated=false;let _isVerticeClickSpyCreated=false;let _is3DClickSpyCreated=false;let _currentPathfindingTubeline;let _tubeLinePath;let _pathLineOptions;let _pathConfig={lineType:tubeLineType,verticeType:verticeType,lineTypeComponentConfig:{renderPolygonOnAdd:true,drawingMode:"floor"}};let _partitionNodes=undefined;let isCtrlPressed=false,isAltPressed=false,isShiftPressed=false,lastKeyPressed=null;let _tagDataCollection;let notyf=new Notyf({position:{x:"left",y:"bottom"},duration:4500,types:[{type:"info",background:"blue",icon:'<span class="mdi mdi-information-outline"></span>'}]});let _currentSpace;let _tagIotCategoryTypes=[];let _tagIotDevices=[];let _iotTagIcons={alert:"",normal:""};let _spaceUsers;let _screenSharingHostUser;let _screenSharingParticipantUsers;let _pipeCategories=[];let _selectedPipeCategory=undefined;let _pipes=[];let _selectedPipe=undefined;let _isDrawPipe=false;let _floorGroundLevelY=0;const pipeForm=new PipeForm;function initAtwinApi(apiKey="",contentType="multipart/form-data"){const api=axios.create({baseURL:_apiURL,headers:{"Access-Control-Allow-Origin":"*","Content-Type":"multipart/form-data",Authorization:apiKey}});_api=api}function connectSpace(url,auth,config,callbacks=undefined){return __awaiter(this,void 0,void 0,(function*(){log.info("connectSpace(): ",url);if(!config.multispace){log.info("multispace is false");try{yield disconnectSpace()}catch(e){log.error("The space is already disconnected")}}log.info("__config",config);_mpConfig=config;if(auth){if("apiURL"in auth){log.info("'apiURL' in auth");const lastString=auth.apiURL.slice(-1);if(lastString!=="/"){auth.apiURL+="/"}_apiURL=auth.apiURL}log.info("_apiURL",_apiURL);initAtwinApi(auth.apiKey)}if("appKey"in config){log.info("'appKey' in config");_appKey=config.appKey}if("lang"in config){log.info("'lang' in config: ",config.lang);setPreferredLanguage()}if("debug"in config){const logLevels=["trace","warn","error","info","silent"];if(config.debug.logLevel&&logLevels.includes(config.debug.logLevel.toLowerCase())){log.setLevel(config.debug.logLevel.toLowerCase())}else{log.setDefaultLevel(log.levels.ERROR)}}else{log.setDefaultLevel(log.levels.ERROR)}if("appConfigKeys"in config&&"embedlyKey"in config.appConfigKeys&&!config.bundlePath){if(config.appConfigKeys.embedlyKey){window.localStorage.setItem("embedlyKey",config.appConfigKeys.embedlyKey)}}if("appConfigKeys"in config){if(config.appConfigKeys.meetSdkKey){log.info("meetConfig sdkKey found");_config.zoom.SDKKey=config.appConfigKeys.meetSdkKey}if(config.appConfigKeys.meetSecretKey){log.info("meetConfig secretKey found");_config.zoom.SDKSecret=config.appConfigKeys.meetSecretKey}}_mediaApi=axios;if(config.viewMode==="interactive"){_viewMode="interactive"}const showcase=document.getElementById(config.iframeId);_iframe=showcase;if(url.includes("https://my.matterport.com/show/")){log.info("URL IS MATTERPORT");yield loadDefaultMpSpace(url,config,showcase,callbacks)}else{log.info("URL IS REV-KITTEN");yield loadAtwinSpace(url,auth,config,showcase)}}))}function getAtwinSdk(iframeId){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(!sdk){log.error("AtwinSdk is undefined");return null}return sdk}function isToolbarFeatureEnabled(key){log.info("isToolbarFeatureEnabled()");if(!key){log.error("key is undefined");return}if(!_mpConfig.toolbarConfig){return false}if(!_mpConfig.toolbarConfig.menuItems){return false}if(_mpConfig.toolbarConfig.menuItems[key]==undefined){return false}return _mpConfig.toolbarConfig.menuItems[key]}function loadDefaultMpSpace(url,config,showcase,callbacks=undefined){return __awaiter(this,void 0,void 0,(function*(){log.info("loadDefaultMpSpace(url: string, showcase: HTMLIFrameElement)",url,showcase);_isBasicDevApi=false;const formattedMPUrl=formatMatterportUrl(url);const iframeSrc=getIframeSrc(config,formattedMPUrl);log.info("__iframeSrc",iframeSrc);showcase.src=iframeSrc;_atwinShowcaseElements[showcase.id]=showcase;_atwinShowcaseWindows[showcase.id]=_atwinShowcaseElements[showcase.id].contentWindow;_atwinShowcaseElements[showcase.id].addEventListener("load",(()=>__awaiter(this,void 0,void 0,(function*(){log.info('iframe.addEventListener("load")');log.info("showcaseWindow",_atwinShowcaseWindows[showcase.id]);try{_atwin=yield _atwinShowcaseWindows[showcase.id].MP_SDK.connect(_atwinShowcaseWindows[showcase.id]);_atwinConnections[showcase.id]=_atwin;log.info("Hello Bundle SDK",_atwin);_atwinConnections[showcase.id].App.state.subscribe((appState=>__awaiter(this,void 0,void 0,(function*(){var _a;log.info("appState",appState);if(appState.phase===_atwinConnections[showcase.id].App.Phase.LOADING){log.info("App is loading...");registerCustomSpaceEvent("MEETING_CLOSED");if(callbacks&&callbacks.onLoad){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using LOADING_PHASE event type to trigger callbacks");log.info("Attempting to execute callback in LOADING state");yield callbacks.onLoad()}catch(error){log.error("Failed to execute callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.LOADING_PHASE)}else if(appState.phase===_atwinConnections[showcase.id].App.Phase.STARTING){log.info("App is starting...");yield get3DObjects(_spaceId);if("showOriginalTags"in config&&!config.showOriginalTags){yield disposeTags()}if(callbacks&&callbacks.onStart){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using STARTING_PHASE event type to trigger callbacks");log.info("Attempting to execute callback in STARTING state");yield callbacks.onStart()}catch(error){log.error("Failed to execute callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.STARTING_PHASE)}else if(appState.phase===_atwinConnections[showcase.id].App.Phase.PLAYING){log.info("App is playing iframe... ",showcase.id);log.info(`iframe ${showcase.id} spaceEventQueue `,spaceEventQueue.events);if("showOriginalTags"in config&&!config.showOriginalTags){yield disposeTags(showcase.id)}yield get3DObjects(_spaceId);yield getSweeps(showcase.id);_sceneObject=yield createSceneObject(showcase.id);_atwinSceneObjects[showcase.id]=_sceneObject;const[sceneObj]=yield _atwinConnections[showcase.id].Scene.createObjects(1);_tubes=sceneObj;yield setLighting(showcase.id);yield registerCustomLoaders(showcase.id);yield handleParamValuesInSpaceUrl(url);createNavigationControlComponent();if(isToolbarFeatureEnabled("roomCreation")||isToolbarFeatureEnabled("pipe")){createVerticeClickSpy();setupKeybindingEventListeners(showcase)}initCustomMinimapSettings();let pointerTexturePath="";if("bundlePath"in config){pointerTexturePath="https://cdn.jsdelivr.net/npm/architwin@latest/static/objective.png"}else{pointerTexturePath="../static/objective.png"}try{yield _atwinConnections[showcase.id].Asset.registerTexture("targetPointer",pointerTexturePath)}catch(error){log.error("targetPointer texture error ",error)}create3dMarker();create3DClickSpy();yield initBundleVersion(_mpConfig);try{_atwinConnections[showcase.id].Camera.pose.subscribe((function(pose){return __awaiter(this,void 0,void 0,(function*(){_currentCameraPose=pose;dispatchSpaceEvent(SPACE_EVENTS.CURRENT_CAMERA_POSE,_currentCameraPose);const hasElapsed=hasTimeElapsed(300);if(hasElapsed){log.info("_unrenderedObjects "+_unrenderedObjects.length);yield renderOnDemand()}if(hasTimeElapsed(1e3)&&_autoDetectNearbyObj){getNearbyObjects({type:"ALL",distance:2})}if(_mpConfig.mapConfig&&_mpConfig.mapConfig.showDirection){minimap.showDirection()}}))}))}catch(error){log.error("_atwin.Camera.pose.subscribe error ",error)}try{_atwinConnections[showcase.id].Camera.zoom.subscribe((function(zoom){return __awaiter(this,void 0,void 0,(function*(){_currentCameraZoom=zoom;dispatchSpaceEvent(SPACE_EVENTS.CURRENT_CAMERA_ZOOM,_currentCameraZoom)}))}))}catch(error){log.error("_atwin.Camera.zoom.subscribe error ",error)}try{_atwinConnections[showcase.id].Floor.current.subscribe((currentFloor=>__awaiter(this,void 0,void 0,(function*(){if(currentFloor.sequence===-1){log.info("Currently viewing all floors")}else if(currentFloor.sequence===undefined){if(currentFloor.id===undefined){log.info("Current viewing an unplaced unaligned sweep")}else{log.info("Currently transitioning between floors")}}else{_currentFloor=currentFloor;yield getFloorGroundLevel(currentFloor.id);log.info("Currently on floor",currentFloor.id);log.info("Current floor's sequence index",currentFloor.sequence);log.info("Current floor's name",currentFloor.name)}}))))}catch(error){log.error("_atwin.Floor.current.subscribe error ",error)}try{_atwinConnections[showcase.id].Sweep.current.subscribe((function(currentSweep){return __awaiter(this,void 0,void 0,(function*(){log.info("===currentSweep",currentSweep);if(currentSweep.id===""){log.info("Not currently stationed at a sweep position")}else{log.info("Else trigger in Sweep subscribe");_currentSweep=Object.assign({},currentSweep);videoAutoPlay();if(superviz.isMeetingInitialized){yield minimap.locateAvatar()}if(_mpConfig.mapConfig&&_mpConfig.mapConfig.showDirection){minimap.showDirection()}dispatchSpaceEvent(SPACE_EVENTS.ON_MOVE_SWEEP,_currentSweep)}}))}))}catch(error){log.error(" _atwin.Sweep.current.subscribe error ",error)}if(_mpConfig.sweepPuckConfig&&_mpConfig.sweepPuckConfig.color){yield _atwinConnections[showcase.id].Camera.pose.waitUntil((pose=>pose.position!==undefined));console.log("_currentCameraPose.position ",_currentCameraPose.position)}try{_atwinConnections[showcase.id].Sweep.data.subscribe({onAdded:function(index,item,_collection){if(_mpConfig.sweepPuckConfig&&_mpConfig.sweepPuckConfig.color){if(item.alignmentType==="aligned"){const sweepPuck=_sceneObject.addNode();const options={visible:true};if(Array.isArray(_mpConfig.sweepPuckConfig.color)){const color=_mpConfig.sweepPuckConfig.color.find((c=>c.sweepId===item.id));if(color){options.backgroundColor=color.backgroundColor;console.log("Matching id found for color")}}else{options.backgroundColor=_mpConfig.sweepPuckConfig.color}sweepPuck.addComponent(sweepPuckType,options);const offsetY=_currentCameraPose.position.y<0?Math.abs(_currentCameraPose.position.y)+.9:_currentCameraPose.position.y+.9;log.info("offsetY ",offsetY);sweepPuck.position.set(item.position.x,item.position.y-offsetY,item.position.z);sweepPuck.start()}}}})}catch(error){log.error("_atwin.Sweep.data.subscribe error",error)}try{_atwinConnections[showcase.id].Room.current.subscribe((room=>{log.info("Current room ",room.rooms[0]);_currentRoom=room.rooms[0];dispatchSpaceEvent(SPACE_EVENTS.ROOM_CHANGED,room.rooms[0])}))}catch(error){log.error("_atwin.Room.current.subscribe error",error)}_atwinConnections[showcase.id].Mode.current.subscribe((mode=>{_currentViewMode=mode;if(mode=="mode.floorplan"){if(_transformComponent){_transformComponent.inputs.size=.01}if(isToolbarFeatureEnabled("roomCreation")){log.info("_verticeComponentsCollection ",_verticeComponentsCollection);toggleVerticeRingVisibility(true)}}else{if(_transformComponent){_transformComponent.inputs.size=1}if(isToolbarFeatureEnabled("roomCreation")){if(_verticeComponentsCollection&&_verticeComponentsCollection.length>0){toggleVerticeRingVisibility()}}}}));_atwinConnections[showcase.id].Pointer.intersection.subscribe((function(intersection){domMousePosition=intersection.position;_intersectionData=intersection;if(drawMode&&_thisVertexNode!==undefined){if(_visualize===true&&_intersectionData.object==="intersectedobject.model"){let tempPath=[..._thisVertexPath];tempPath.push(Object.assign({},_intersectionData.position));_activeVertex.inputs.collider=false;_activeVertex.inputs.path=tempPath}}}));_atwinConnections[showcase.id].Tag.data.subscribe({onAdded(index,item,collection){console.log("Tag added to the collection",index,item,collection)},onRemoved(index,item,collection){console.log("Tag removed from the collection",index,item,collection)},onUpdated(index,item,collection){console.log("Tag media updated in place in the collection",index,item,collection)},onCollectionUpdated(collection){console.log("The full collection of Tags looks like",collection);_tagDataCollection=collection}});if(callbacks&&callbacks.onPlay){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using PLAYING_PHASE event type to trigger callbacks");log.info("Attempting to execute callback in PLAYING state");yield callbacks.onPlay()}catch(error){log.error("Failed to execute callback. Skipping to next phase",error)}}try{_atwinConnections[showcase.id].Pointer.intersection.subscribe((intersectionData=>{dispatchSpaceEvent(SPACE_EVENTS.POINTER_INTERSECTION_DATA,intersectionData)}))}catch(error){log.error("_atwin.Pointer.intersection.subscribe error",error)}dispatchSpaceEvent(SPACE_EVENTS.PLAYING_PHASE,_atwinConnections[showcase.id]);if(config.mapConfig&&"mapId"in config.mapConfig){try{yield minimap.setMap(_atwinConnections[showcase.id],_appKey,_mpConfig.mapConfig.mapId)}catch(error){isCdnMapDataAvailable=false;log.error("Matterport map CDN unavailable",error)}}if(config.mapConfig&&((_a=config.mapConfig)===null||_a===void 0?void 0:_a.enableCustomMap)){try{minimap.setMpSDK(_atwinConnections[showcase.id]);minimap.setCustomMap(_atwinConnections[showcase.id])}catch(error){log.error("Error setCustomMap",error)}}try{_modelDetails=yield _atwinConnections[showcase.id].Model.getDetails()}catch(error){log.error(error)}try{subscribeSpaceEvent(SPACE_EVENTS.ROOM_CHANGED,(room=>{if(room){const viewpoints=_3DXObjects.filter((obj=>obj.object.object_data.object_type==="VIEWPOINT"));if(viewpoints&&viewpoints.length>0){viewpoints.forEach((vp=>{let minRoomLength;Object.values(room.size).forEach((val=>{if(minRoomLength){if(minRoomLength>val){minRoomLength=val-1}}else{minRoomLength=val-1}}));log.info("Max line length ",minRoomLength);setViewpointLineLength(minRoomLength,vp.object.id)}))}}}))}catch(error){log.error(error)}if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.active){log.info("Displaying toolbar");const spaceObjects=_3DXObjects.map((obj=>obj.object));initToolbarUI({objects:spaceObjects});themeManager(_mpConfig.toolbarConfig.themeConfig)}}if(isToolbarFeatureEnabled("bim")){initBimSettings()}}))));return _atwinConnections[showcase.id]}catch(e){log.error(e)}}))));return _atwinConnections[showcase.id]}))}function loadAtwinSpace(url,auth,config,showcase,callbacks=undefined){var _a;return __awaiter(this,void 0,void 0,(function*(){log.info("loadAtwinSpace(url: string, auth: { apiKey: string; user: IUser },config: IMPConfig, showcase: HTMLIFrameElement)");const spaceId=getSpaceId(url);log.info("spaceId",spaceId);_spaceId=spaceId;if(!spaceId){log.error("spaceId is undefined");return}if(_isInitialLoad){const authUser=yield loginUser(auth.user);if(authUser){_userId=authUser.id}else{log.error("Custom error: authUser is undefined",authUser);return}}const space=yield getSpace(spaceId);if(!space){log.error("space is undefined");return}setSpace(space);const atwinFloors=yield getAtwinFloors(spaceId);if(!atwinFloors){log.error("atwinFloors is undefined");return}setAtwinFloors(atwinFloors);const atwinLabels=yield getAtwinLabels();if(!atwinLabels){log.error("atwinLabels is undefined");return}setAtwinLabels(atwinLabels);const iframeSrc=getIframeSrc(config,space.space_url);log.info("__iframeSrc",iframeSrc);showcase.src=iframeSrc;const tags=yield getTags(space);if(!tags){log.info("tags is undefined");return}setTags(tags);if(_isInitialLoad){(_a=showcase.contentWindow)===null||_a===void 0?void 0:_a.location.reload()}_isInitialLoad=false;const showcaseWindow=showcase.contentWindow;showcase.addEventListener("load",(()=>__awaiter(this,void 0,void 0,(function*(){log.info('iframe.addEventListener("load")');log.info("showcaseWindow",showcaseWindow);if(showcaseWindow.MP_SDK){try{_atwin=yield showcaseWindow.MP_SDK.connect(showcaseWindow);log.info("Hello Bundle SDK",_atwin);onShowcaseConnect(callbacks,url)}catch(e){log.error(e)}}else{log.info("No showcaseWindow.MP_SDK found")}}))))}))}function onShowcaseConnect(callbacks=undefined,url){return __awaiter(this,void 0,void 0,(function*(){log.info("onShowcaseConnect()");try{const modelData=yield _atwin.Model.getData();log.info("Model sid:"+modelData.sid);_atwin.App.state.subscribe((appState=>__awaiter(this,void 0,void 0,(function*(){log.info("appState",appState);if(appState.phase===_atwin.App.Phase.LOADING){log.info("App is loading...");registerCustomSpaceEvent("MEETING_CLOSED");yield get3DObjects(_spaceId);if(callbacks&&callbacks.onLoad){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using LOADING_PHASE event type to trigger callbacks");log.info("Invoking onLoad callback");yield callbacks.onLoad()}catch(error){log.error("Error in invoking onLoad callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.LOADING_PHASE)}else if(appState.phase===_atwin.App.Phase.STARTING){log.info("App is starting...");yield disposeTags();yield get3DObjects(_spaceId);if(callbacks&&callbacks.onStart){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using STARTING_PHASE event type to trigger callbacks");log.info("Invoking onStart callback");yield callbacks.onStart()}catch(error){log.error("Error in invoking onStart callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.STARTING_PHASE)}else if(appState.phase===_atwin.App.Phase.PLAYING){log.info("App is playing...");try{yield showTags(_tags)}catch(error){log.error(error)}yield getSweeps();_sceneObject=yield createSceneObject();yield setLighting();yield registerCustomLoaders();yield handleParamValuesInSpaceUrl(url);let pointerTexturePath="";if("bundlePath"in _mpConfig){pointerTexturePath="../../node_modules/architwin/static/objective.png"}else{pointerTexturePath="../static/objective.png"}yield _atwin.Asset.registerTexture("targetPointer",pointerTexturePath);create3dMarker();_atwin.Floor.current.subscribe((currentFloor=>__awaiter(this,void 0,void 0,(function*(){if(currentFloor.sequence===-1){log.info("Currently viewing all floors")}else if(currentFloor.sequence===undefined){if(currentFloor.id===undefined){log.info("Current viewing an unplaced unaligned sweep")}else{log.info("Currently transitioning between floors")}}else{_currentFloor=currentFloor;yield getFloorGroundLevel(currentFloor.id);log.info("Currently on floor",currentFloor.id);log.info("Current floor's sequence index",currentFloor.sequence);log.info("Current floor's name",currentFloor.name)}}))));_atwin.Sweep.current.subscribe((function(currentSweep){return __awaiter(this,void 0,void 0,(function*(){log.info("===currentSweep",currentSweep);if(currentSweep.sid===""){log.info("Not currently stationed at a sweep position");if(socketIo.isInitializeSocketIo&&minimap.isMinimapNavigation===false){syncParticipantsLocation(domMousePosition,_currentCameraPose.rotation)}}else{log.info("====Sweep subscription triggered");_currentSweep=currentSweep;if(socketIo.isInitializeSocketIo){syncParticipantsLocation(currentSweep.position,_currentCameraPose.rotation)}videoAutoPlay();if(superviz.isMeetingInitialized){yield minimap.locateAvatar()}if(_mpConfig.mapConfig&&_mpConfig.mapConfig.showDirection){minimap.showDirection()}}}))}));_atwin.Camera.pose.subscribe((function(pose){return __awaiter(this,void 0,void 0,(function*(){_currentCameraPose=pose;const hasElapsed=hasTimeElapsed(300);if(hasElapsed){log.info("_unrenderedObjects "+_unrenderedObjects.length);yield renderOnDemand()}if(hasTimeElapsed(1e3)&&_autoDetectNearbyObj){getNearbyObjects({type:"ALL",distance:2})}if(_mpConfig.mapConfig&&_mpConfig.mapConfig.showDirection){minimap.showDirection()}}))}));_atwin.Mode.current.subscribe((mode=>{_currentViewMode=mode}));if(_mpConfig.mapConfig&&"mapId"in _mpConfig.mapConfig){try{yield minimap.setMap(_atwin,_appKey,_mpConfig.mapConfig.mapId)}catch(error){log.error("Fatal error while loading minimap",error)}}if(callbacks&&callbacks.onPlay){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using PLAYING_PHASE event type to trigger callbacks");log.info("Invoking onPlay callback");yield callbacks.onPlay()}catch(error){log.error("Error in invoking onPlay callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.PLAYING_PHASE);try{_modelDetails=yield _atwin.Model.getDetails()}catch(error){log.error(error)}if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.active){log.info("Displaying toolbar");const spaceObjects=_3DXObjects.map((obj=>obj.object));initToolbarUI({objects:spaceObjects});themeManager(_mpConfig.toolbarConfig.themeConfig)}}}))))}catch(e){log.error(e)}}))}function getAtwinFloors(showcase_id){return __awaiter(this,void 0,void 0,(function*(){log.info("getAtwinFloors(showcase_id: string)",showcase_id);try{const response=yield _api.get(`/v1/floors/showcase-id/${showcase_id}`);log.info("response",response);if(response.status===200){if(response.data&&response.data.data){return response.data.data}log.error("Error in getting atwin floors")}else{log.error("Error in getAtwinFloors()"+response)}}catch(error){log.error(error)}return null}))}function setAtwinFloors(floors){log.info("setAtwinFloors()",floors);_atwinFloors=floors}function getFloors(){return _atwinFloors}function getAtwinLabels(){return __awaiter(this,void 0,void 0,(function*(){log.info("getAtwinLabels()");try{const response=yield _api.get(`/v1/labels.json`);log.info("response",response);if(response.status===200){if(response.data&&response.data.data){return response.data.data}log.error("Error in getting atwin labels")}else{log.error("Error in getAtwinLabels()"+response)}}catch(error){log.error(error)}return null}))}function setAtwinLabels(labels){log.info("setAtwinLabels()",labels);_atwinLabels=labels}function getLabels(){return _atwinLabels}function hasTimeElapsed(maxTime){const currentTimestamp=Date.now();const differenceInMilliseconds=(currentTimestamp-_previousTimeStamp)%1e3;_previousTimeStamp=currentTimestamp;if(differenceInMilliseconds>=maxTime){return true}else{return false}}function getNearbyUnrenderedObjects(payload){let toBeRendered=[];const currentPose={x:_currentCameraPose.position.x,y:_currentCameraPose.position.y,z:_currentCameraPose.position.z};toBeRendered=_unrenderedObjects.filter((obj=>{const obj_pos={x:obj.object_position.x,y:obj.object_position.y,z:obj.object_position.z};const distance=calculateDistance(currentPose,obj_pos);return distance<payload.distance}));const filtered=_unrenderedObjects.filter((obj=>toBeRendered.indexOf(obj)===-1));_unrenderedObjects=filtered;log.info("render toBeRendered "+toBeRendered.length);return toBeRendered}function getNearbyObjects(payload){if(payload.type===undefined||payload.type===""){payload.type="ALL"}if(payload.distance===undefined){payload.distance=2}const pos1={x:_currentCameraPose.position.x,y:_currentCameraPose.position.y,z:_currentCameraPose.position.z};let three_d=[];let videos=[];let slideshows=[];if(payload.type==="ALL"||"3DX"){three_d=_3DXObjects.filter((obj=>{const pos2={x:obj.node.position.x,y:obj.node.position.y,z:obj.node.position.z};const distance=calculateDistance(pos1,pos2);log.info("3DX Distance: "+distance);return distance<payload.distance}))}if(payload.type==="ALL"||"VIDEO"){videos=_videos.filter((vid=>{const pos2={x:vid.node.position.x,y:vid.node.position.y,z:vid.node.position.z};const distance=calculateDistance(pos1,pos2);log.info("Video Distance: "+distance);return distance<payload.distance}))}if(payload.type==="ALL"||"SLIDESHOW"){slideshows=_allSlideShow.filter((slide=>{const pos2={x:slide.node.position.x,y:slide.node.position.y,z:slide.node.position.z};const distance=calculateDistance(pos1,pos2);log.info("Slideshow Distance: "+distance);return distance<payload.distance}))}log.info("nearby3DXObjects "+three_d.length);log.info("nearbyVideos "+videos.length);log.info("nearbySlideshows "+slideshows.length);return{x3d:three_d,videos:videos,slideshows:slideshows}}function setRenderDistance(distance){if(!Number.isInteger(distance)){log.error("Render distance argument is not a valid number");return}_renderDistance=distance}function createSceneObject(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;const[sceneObject]=yield sdk.Scene.createObjects(1);return sceneObject}))}function show3DObjects(object,options=null){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){let sceneObj;if(options&&options.iframeId&&_atwinSceneObjects[options.iframeId]){sceneObj=_atwinSceneObjects[options.iframeId]}else{sceneObj=_sceneObject}const modelNode=sceneObj.addNode();if(options==null){options={url:(_a=object.object_data)===null||_a===void 0?void 0:_a.amazon_uri,type:object.object_data.object_type}}else{options.url=(_b=object.object_data)===null||_b===void 0?void 0:_b.amazon_uri,options.type=object.object_data.object_type}if(object.media_viewer_id&&object.media_viewer_id!==null){options.mediaViewerId=object.media_viewer_id}const component=modelNode.addComponent(getComponentLoader(object.object_data),options);log.info("component",component);if(!component.inputs){log.error("component.inputs is undefined");return}const objTransformation={object_position:typeof object.object_position!=="string"?object.object_position:JSON.parse(object.object_position),object_rotation:object.object_rotation,object_scale:object.object_scale};setObjectTransformation(modelNode,objTransformation);let type;if(object.object_data.object_type=="image"||object.object_data.object_type=="video"){type="FRAME"}else{type=object.object_data.object_type}modelNode.start();log.info("show3dobject object.id",object.id);const newObject={object:object,component:component,node:modelNode,type:type};if(options&&options.iframeId)newObject.iframeId=options.iframeId;_3DXObjects.push(newObject);log.info("objectType",object.object_data.object_type);if(supportedMediaTypes[9]===object.object_data.object_type){log.info(`${object.object_data.object_type} matches with ${supportedMediaTypes[9]}`)}else{log.info(`${object.object_data.object_type} does not match with ${supportedMediaTypes[9]}`)}log.info("_viewMode",_viewMode);log.info("object_type",object.object_data.object_type);if(_viewMode==="interactive"&&object.object_data.object_type=="GLB"){const eventPath=_sceneObject.addEmitPath(component,"gltfevents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent));_sceneObject.addInputPath(component,"animationState",`animationState_${object.id}`)}else if(_viewMode==="interactive"&&object.object_data.object_type=="BOX"){const eventPath=_sceneObject.addEmitPath(component,"boxEvents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent));_sceneObject.addInputPath(component,"basePosition",`basePosition_${object.id}`);_sceneObject.addInputPath(component,"localPosition",`localPosition_${object.id}`)}else if(_viewMode==="interactive"&&supportedMediaTypes.includes(object.object_data.object_type)){log.info("Adding emit path for plane event");if(!options.hudMode&&options.fitToScreen==undefined&&object.showcase_object_name!==cursorMarker){const emitPath=_sceneObject.addEmitPath(component,"planeEvents");_sceneObject.spyOnEvent(new EmitSpy(emitPath,modelNode,component,object,dispatchSpaceEvent))}_sceneObject.addInputPath(component,"url",`url_${object.id}`);_sceneObject.addInputPath(component,"type",`type_${object.id}`);_sceneObject.addInputPath(component,"visible",`visible_${object.id}`);_sceneObject.addInputPath(component,"isFirstLoad",`isFirstLoad_${object.id}`);_sceneObject.addInputPath(component,"fitToScreen",`fitToScreen_${object.id}`)}else if(_viewMode==="interactive"&&object.object_data.object_type=="MARKUP"){const eventPath=_sceneObject.addEmitPath(component,"css3devents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent));_sceneObject.addInputPath(component,"title",`title_${object.id}`);_sceneObject.addInputPath(component,"text",`text_${object.id}`);_sceneObject.addInputPath(component,"textColor",`textColor_${object.id}`);_sceneObject.addInputPath(component,"backgroundColor",`backgroundColor_${object.id}`)}else if(_viewMode==="interactive"&&object.object_data.object_type=="HUD"){const eventPath=_sceneObject.addEmitPath(component,"hudevents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent));_sceneObject.addInputPath(component,"url",`url_${object.id}`);_sceneObject.addInputPath(component,"mediaType",`mediaType_${object.id}`);_sceneObject.addInputPath(component,"dockWidth",`dockWidth_${object.id}`);_sceneObject.addInputPath(component,"dockHeight",`dockHeight_${object.id}`);_sceneObject.addInputPath(component,"dockPosX",`dockPosX_${object.id}`);_sceneObject.addInputPath(component,"dockPosY",`dockPosY_${object.id}`);_sceneObject.addInputPath(component,"dockPosZ",`dockPosZ_${object.id}`)}else if(object.object_data.object_type=="VIEWPOINT"){_sceneObject.addInputPath(component,"maxLineLength",`maxLineLength_${object.id}`)}else if(_viewMode==="interactive"&&object.object_data.object_type=="FBX"){const eventPath=_sceneObject.addEmitPath(component,"fbxevents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent))}}))}function setAnimationState(action,modelId){const actions=["play","stop"];let animationStatePath;if(actions.includes(action)){if(modelId){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`animationState_${modelId}`){animationStatePath=path}}animationStatePath.set(action);return}log.error("id of object is undefined");return}log.error("Argument for action is not valid");return}function show3dText(object,options=null,direction="top"){const modelNode=_sceneObject.addNode();const text=options.text;options={text:text,fontSize:.09,background:false,centered:true,height:.001,curveSegments:12,bevelEnabled:false,bevelThickness:10,bevelSize:8,bevelOffset:0,bevelSegments:5};const component=modelNode.addComponent(getComponentLoader(object.object_data),options);if(!component.inputs){log.error("component.inputs is undefined");return}const rotation={x:currentObjTransform.object_rotation._x,y:currentObjTransform.object_rotation._y,z:currentObjTransform.object_rotation._z};setTextDimensionPosition(modelNode,component,direction,currentObjTransform.object_position,rotation);modelNode.start();_textDimensionIds.push(modelNode.id);_sceneObject.addInputPath(component,"visible",`visible_${modelNode.id}`);if(direction=="left"){_sceneObject.addInputPath(component,"text",`textDepth_${modelNode.id}`)}else if(direction=="right"){_sceneObject.addInputPath(component,"text",`textHeight_${modelNode.id}`)}else if(direction=="bottom"){_sceneObject.addInputPath(component,"text",`textBottom_${modelNode.id}`)}return{node:modelNode,component:component}}function showObjectDimensions(selected){log.info("Selected object",selectedObject);const textObj=selected.object;textObj.object_data.object_type="TEXT";const THREE=selected.component.context.three;const objectModel=selected.component.mesh;const boundingBox=(new THREE.Box3).setFromObject(objectModel);const width=boundingBox.max.x-boundingBox.min.x;const depth=boundingBox.max.y-boundingBox.min.y;const height=boundingBox.max.z-boundingBox.min.z;_textDimensions.top=show3dText(textObj,{text:selected.object.object_data.name},"top");_textDimensions.bottom=show3dText(textObj,{text:`W: ${meterToMillimeter(width)}mm`},"bottom");_textDimensions.left=show3dText(textObj,{text:`D: ${meterToMillimeter(depth)}mm`},"left");_textDimensions.right=show3dText(textObj,{text:`H: ${meterToMillimeter(height)}mm`},"right");log.info("Selected object",selectedObject)}function hideObjectDimensions(){let visiblePath;if(!_textDimensions.top){log.error("_textDeminsion is undefined");return}_textDimensionIds.forEach((index=>{for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`visible_${_textDimensionIds[index]}`){visiblePath=path}}visiblePath.set(false)}))}function setTextDimensionLabel(node,size){let textPath;for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`textDepth_${node.id}`){textPath=path;textPath.set(`D: ${meterToMillimeter(size.z)}mm`)}if(desc.id===`textHeight_${node.id}`){textPath=path;textPath.set(`H: ${meterToMillimeter(size.y)}mm`)}if(desc.id===`textBottom_${node.id}`){textPath=path;textPath.set(`W: ${meterToMillimeter(size.x)}mm`)}}}function setTextDimensionPosition(node,component,direction,position,rotation){log.info("setTextDimensionPosition()");const THREE=selectedObject.component.context.three;const objectModel=selectedObject.component.mesh;const boundingBox=(new THREE.Box3).setFromObject(objectModel);const width=boundingBox.max.x-boundingBox.min.x;const depth=boundingBox.max.y-boundingBox.min.y;const height=boundingBox.max.z-boundingBox.min.z;let newPosition;if(direction==="top"){newPosition={x:position.x-rotation.y,y:position.y+height/2,z:position.z-depth+rotation.z}}else if(direction==="bottom"){newPosition={x:position.x,y:position.y-height/2,z:position.z-depth/3}}else if(direction==="left"){newPosition={x:position.x-width/1.3,y:position.y-height/2,z:position.z-depth+rotation.y}}else if(direction==="right"){newPosition={x:position.x+width/1.3-rotation.y,y:position.y,z:position.z-depth}}const objTransformation={object_position:{x:newPosition.x,y:newPosition.y,z:newPosition.z},object_rotation:rotation,object_scale:{x:.001,y:.001,z:.001}};setTextDimensionLabel(node,{x:width,y:depth,z:height});setObjectTransformation(node,objTransformation)}function setUnrenderedObjects(payload){log.info("setUnrenderedObjects()");if(payload){for(let i=0;i<payload.length;i++){if(payload[i].object_data){_unrenderedObjects.push(payload[i])}else{log.warn(`Element #${i} in your array has no object_data set. Skipping element to avoid errors`)}}log.info(`Setting ${payload.length} objects`);return}log.error("Error in setUnrenderedObjects: Payload is undefined");return}function renderOnDemand(){return __awaiter(this,void 0,void 0,(function*(){if(_unrenderedObjects.length!==0){log.info("renderOnDemand()");registerCustomLoaders();const objects=getNearbyUnrenderedObjects({type:"",distance:_renderDistance});objects.forEach((obj=>__awaiter(this,void 0,void 0,(function*(){var _a,_b,_c,_d;if(((_a=obj.object_data)===null||_a===void 0?void 0:_a.object_type)==="FBX"||((_b=obj.object_data)===null||_b===void 0?void 0:_b.object_type)==="GLB"||supportedMediaTypes.includes(obj.object_data.object_type)){yield show3DObjects(obj)}else if(((_c=obj.object_data)===null||_c===void 0?void 0:_c.object_type)==="MP4"){yield showVideoObjects(obj)}else if(((_d=obj.object_data)===null||_d===void 0?void 0:_d.object_type)==="ZIP"){yield showSlideScreenModel(obj)}}))))}}))}function getIframeSrc(config,url){log.info("getIframeSrc()",config,url);const modelId=url.split("?m=")[1];if(!modelId){log.error("modelId is undefined");return""}let src=``;if("bundlePath"in config){const lastString=config.bundlePath.slice(-1);if(lastString!=="/"){config.bundlePath+="/"}src+=`${config.bundlePath}showcase.html?m=${modelId}&applicationKey=${_appKey}&newtags=1`}else{if(config.prod===undefined||config.prod===null){config.prod=true}if(config.prod){src+=`/node_modules/architwin/bundle/showcase.html?m=${modelId}&applicationKey=${_appKey}&newtags=1`}else{src+=`architwin/bundle/showcase.html?m=${modelId}&applicationKey=${_appKey}&newtags=1`}}for(let param of urlParams){if(config[param]!=undefined){src+=`&${param}=${config[param]}`}}log.info("__src",src);return src}function loginUser(user){return __awaiter(this,void 0,void 0,(function*(){log.info("loginUser(user)",user);try{const response=yield _api.post("/cas/tickets?email="+user.email+"&password="+user.password);log.info("=== response",response);if(response.status===200){log.info("Response data",response.data.data);if(!response.data||!response.data.data||!response.data.data.auth||!response.data.data.auth.user){return null}return response.data.data.auth.user}else{return null}}catch(error){log.info("Custom error "+error);return null}}))}function getSpace(spaceId){return __awaiter(this,void 0,void 0,(function*(){log.info("getShowcase(spaceId: string)",spaceId);try{const response=yield _api.get(`/v1/showcases/id/${spaceId}`);log.info("response",response);if(response.status===200){if(response.data&&response.data.data&&response.data.data.length>0){return response.data.data[0]}log.error("Error in getting space")}else{log.error("Error in fetchShowcase()"+response)}}catch(error){log.error(error)}return null}))}function getSpaceId(url){log.info("getSpaceId()",url);const urlArray=url.split(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/);const path=urlArray[5];const spaceId=path.split("/")[3];log.info("urlArray",urlArray);log.info("path",path);if(!spaceId){log.error("spaceId is undefined");return}return spaceId}function setSpace(space){log.info("setSpace(space: ISpace)",space);_space=space}function get3DObjects(showcase_id){return __awaiter(this,void 0,void 0,(function*(){let apiEndpoint="";if(_unrenderedObjects.length!==0){log.info("Passed unrenderedObjects",_unrenderedObjects);const threed_objects=_unrenderedObjects.map((showcase=>{if(showcase.object_position){showcase.object_position=typeof showcase.object_position==="string"?JSON.parse(showcase.object_position):showcase.object_position}if(showcase.object_rotation){showcase.object_rotation=typeof showcase.object_rotation==="string"?JSON.parse(showcase.object_rotation):showcase.object_rotation}if(showcase.object_scale){showcase.object_scale=typeof showcase.object_scale==="string"?JSON.parse(showcase.object_scale):showcase.object_scale}return showcase}));_unrenderedObjects=threed_objects;return threed_objects}if(showcase_id&&apiEndpoint===""){try{const id=parseInt(showcase_id);log.info("showcase_id "+id);const response=yield _api.get(`/v1/showcase-objects/showcase-id/${id}`);const showcase_objects=response.data.data;const object_ids=showcase_objects.map((obj=>obj.object_id));try{const response=yield _api.get(`/v1/objects`);log.info("Finished getting objects");const object_data=response.data.data.filter((obj=>object_ids.includes(obj.id)));_assetLibrary=object_data;log.info("object_data length "+object_data.length);const objectDataMap=object_data.reduce(((map,obj)=>{map[obj.id]=obj;return map}),{});const threed_objects=showcase_objects.map((showcase=>{const target=objectDataMap[showcase.object_id];if(target){showcase.object_data=target}if(showcase.object_position){showcase.object_position=typeof showcase.object_position==="string"?JSON.parse(showcase.object_position):showcase.object_position}if(showcase.object_rotation){showcase.object_rotation=typeof showcase.object_rotation==="string"?JSON.parse(showcase.object_rotation):showcase.object_rotation}if(showcase.object_scale){showcase.object_scale=typeof showcase.object_scale==="string"?JSON.parse(showcase.object_scale):showcase.object_scale}return showcase}));_unrenderedObjects=threed_objects;return threed_objects}catch(error){log.error("threed_objects "+error)}}catch(error){log.error("get3DObjectsByShowcaseId "+error)}}else if(showcase_id&&apiEndpoint!==""){const lastString=apiEndpoint.slice(-1);if(lastString!=="/"){apiEndpoint+="/"}if(apiEndpoint==="/v1/space_objects/space_uuid/"){log.info("Fetching from Azusa API",apiEndpoint);try{const response=yield _api.get(`${apiEndpoint}${showcase_id}`);if(response.data.status==="success"){log.error("Request succeess ",response.data);const returnedSpaceObjects=response.data;const spaceObjects=returnedSpaceObjects.data.map((obj=>{obj.space_objects.object_position=typeof obj.space_objects.object_position==="string"?JSON.parse(obj.space_objects.object_position):obj.space_objects.object_position;obj.space_objects.object_rotation=typeof obj.space_objects.object_rotation==="string"?JSON.parse(obj.space_objects.object_rotation):obj.space_objects.object_rotation;obj.space_objects.object_scale=typeof obj.space_objects.object_scale==="string"?JSON.parse(obj.space_objects.object_scale):obj.space_objects.object_scale;obj.space_objects.object_data=obj.objects;return obj.space_objects}));log.info("Space objects # ",spaceObjects.length);_unrenderedObjects=spaceObjects;return spaceObjects}else{log.error("Request failed ",response.data)}}catch(error){log.error("Failed to fetch from Azusa API",error)}}log.info("apiUrl does not match space_objects api url",apiEndpoint);return[]}return[]}))}function getCurrentSweep(){return _currentSweep}function getCurrentCameraPose(){return _currentCameraPose}function getCurrentCameraZoom(){return _currentCameraZoom}function getCameraPosition(){return _currentCameraPose.position}function getCurrentSweepPosition(){return _currentSweep.position}function getCurrentFloor(){return _currentFloor}function getSweeps(iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("Getting Sweeps in Space");const sdk=iframeId?_atwinConnections[iframeId]:_atwin;sdk.Sweep.data.subscribe({onCollectionUpdated:function(collection){log.info("Sweeps In Space",Object.assign({},collection));if(!collection){log.info("No Sweeps in loaded Space")}const _sw=Object.values(collection);_sweeps=_sw.map((item=>Object.assign({},item)));dispatchSpaceEvent(SPACE_EVENTS.SWEEP_COLLECTION_UPDATED,Object.values(collection))}});return sweeps}))}function getAllSweeps(){return sweeps}function moveToSweep(sweepId,rotation,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("moveToSweep()",sweepId);let sdk;if(iframeId){sdk=_atwinConnections[iframeId]}const transition=sdk?sdk.Sweep.Transition.FLY:_atwin.Sweep.Transition.FLY;const transitionTime=2e3;log.info("Sweep Move",sweepId,_currentSweep.id);if(rotation){if(sdk){sdk.Sweep.moveTo(sweepId,{rotation:rotation,transition:transition,transitionTime:transitionTime}).then((function(nextMode){dispatchSpaceEvent(SPACE_EVENTS.ARRIVED_ON_SWEEP,nextMode)}))}else{_atwin.Sweep.moveTo(sweepId,{rotation:rotation,transition:transition,transitionTime:transitionTime}).then((function(nextMode){dispatchSpaceEvent(SPACE_EVENTS.ARRIVED_ON_SWEEP,nextMode)}))}return}if(sdk){if(sweepId!==_currentSweep.id){sdk.Sweep.moveTo(sweepId,{transition:transition,transitionTime:transitionTime}).then((function(nextMode){dispatchSpaceEvent(SPACE_EVENTS.ARRIVED_ON_SWEEP,nextMode)}))}}else{_atwin.Sweep.moveTo(sweepId,{transition:transition,transitionTime:transitionTime}).then((function(nextMode){dispatchSpaceEvent(SPACE_EVENTS.ARRIVED_ON_SWEEP,nextMode)}))}}))}function getNearbySweeps(sweepId){return __awaiter(this,void 0,void 0,(function*(){if(sweepId){const nearby=yield sweeps.find((item=>item.id==sweepId)).neighbors;log.info("Nearby Sweeps",nearby);return nearby}else{log.info("No Nearby Sweeps")}}))}function disableSweeps(sweeps,iframeId){return __awaiter(this,void 0,void 0,(function*(){let sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sdk){console.log("@____SDK LOADED:",iframeId,sdk);if(sweeps.length){const sweepId=Object.values(sweeps).map((sweep=>sweep.id));sdk.Sweep.disable(...sweepId);return}sdk.Sweep.data.subscribe({onCollectionUpdated:function(collection){const sweepId=Object.values(collection).map((sweep=>sweep.id));sdk.Sweep.disable(...sweepId)}})}}))}function enableSweeps(sweeps,iframeId){return __awaiter(this,void 0,void 0,(function*(){let sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sdk){console.log("@____SDK LOADED:",iframeId,sdk);if(sweeps.length){const sweepId=Object.values(sweeps).map((sweep=>sweep.id));sdk.Sweep.enable(...sweepId);return}sdk.Sweep.data.subscribe({onCollectionUpdated:function(collection){const sweepId=Object.values(collection).map((sweep=>sweep.id));sdk.Sweep.enable(...sweepId)}})}}))}function enableSweep(sweepIds,iframeId){return __awaiter(this,void 0,void 0,(function*(){let sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sweepIds&&sweepIds.length>0){yield sdk.Sweep.enable(...sweepIds);return}const sweep=getCurrentSweep();yield sdk.Sweep.enable(...[sweep.uuid]);return}))}function disableSweep(sweepIds,iframeId){return __awaiter(this,void 0,void 0,(function*(){let sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sweepIds&&sweepIds.length>0){yield sdk.Sweep.disable(...sweepIds);return}const sweep=getCurrentSweep();yield sdk.Sweep.disable(...[sweep.uuid]);return}))}function getComponentLoader(object){log.info("getComponentLoader()",object);if(object){let index=object.object_type;const imageTypes=["PNG","JPG","JPEG","GIF","IMAGE"];const videoTypes=["MP4","MOV","WMV","FLV","AVI","VIDEO"];const pdfFile=["PDF"];log.info("__object.object_type",object.object_type);if(imageTypes.includes(object.object_type.toUpperCase())){log.info("====Loader planeType IMAGE");return planeTypeImage}if(videoTypes.includes(object.object_type.toUpperCase())){log.info("====Loader planeType VIDEO");return planeTypeVideo}if(pdfFile.includes(object.object_type.toUpperCase())){log.info("====Loader planeType PDF");return planeTypePdf}let component={FBX:fbxType,GLB:gltfType,MP4:"liveVideo",ZIP:"slideScreenModel",BOX:boxType,TEXT:textType,MARKUP:css3DType,PDF:planeType,VIEWPOINT:viewpointType,POLYGON:bufferGeometryType,PATHLINE:pathLineType,PATHLINEPOINT:pathPointType};log.info("__component",component);log.info("__index",index);log.info("__component",component);log.info("__index",index);log.info("====Loader",component[index]);return component[index]||""}return""}function setSelectedObject(data,node,component,type){log.info("setSelectedObject()",data);selectedObject={object:data,component:component,node:node,type:type};if(selectedObject.type=="POLYGON"){_currentPolygon=selectedObject}if(selectedObject.type=="PATHLINE"){_currentPipe=selectedObject}const previousCoords={object_position:selectedObject.node.obj3D.position,object_rotation:selectedObject.node.obj3D.rotation,object_scale:selectedObject.node.obj3D.scale};_previousAction=JSON.stringify(previousCoords);actionHistory.push(_previousAction);log.info("Previous transform "+JSON.stringify(previousObjTransform));log.info("setSelectedObject()")}function get3DXObjects(filters){if(filters){let filteredObjects=[];if(filters.type)filteredObjects=_3DXObjects.filter((obj=>obj.type==filters.type));if(filters.object_type)filteredObjects=_3DXObjects.filter((obj=>obj.object.object_data.object_type==filters.object_type));if(filters.iframeId)filteredObjects=_3DXObjects.filter((obj=>obj.iframeId==filters.iframeId));if(filters.showcase_object_name)filteredObjects=_3DXObjects.filter((obj=>obj.object.showcase_object_name==filters.showcase_object_name));return filteredObjects}return _3DXObjects.filter((obj=>obj.object.showcase_object_name!==cursorMarker))}function set3DXObjects(objects){_3DXObjects=objects}function clear3DXObjects(filters){if(filters){let filteredObjects=[];if(filters.type)filteredObjects=_3DXObjects.filter((obj=>obj.type!=filters.type));if(filters.object_type)filteredObjects=_3DXObjects.filter((obj=>obj.object.object_data.object_type!=filters.object_type));if(filters.iframeId)filteredObjects=_3DXObjects.filter((obj=>obj.iframeId!=filters.iframeId));_3DXObjects=filteredObjects;return}_3DXObjects=[];return}function clearSelectedObject(){log.info("clearSelectedObject()");if(selectedObject&&selectedObject.type=="POLYGON"){_currentPolygon=undefined}selectedObject=undefined}function setLighting(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sceneObj=iframeId?_atwinSceneObjects[iframeId]:_sceneObject;log.info("setLighting()");const lights=sceneObj.addNode();lights.addComponent("mp.directionalLight",{intensity:.6,color:{r:1,g:1,b:1}});lights.addComponent("mp.ambientLight",{intensity:.6,color:{r:1,g:1,b:1}});lights.start()}))}function removeTransformControls(){if(!_transformControlNode){log.warn("_transformControlNode is undefined");return}_transformControlNode.stop();if(!_inputControlComponent){log.warn("!_inputControlComponent is undefined");return}_inputControlComponent.cancel();log.info("removeTransformControls()")}function setTransformControls(selectedObject,mode="translate"){log.info("Object to be transformed "+selectedObject.object.object_data.name);removeTransformControls();const transformNode=_sceneObject.addNode();const transformComponent=transformNode.addComponent("mp.transformControls");_transformControlNode=transformNode;const inputComponent=transformNode.addComponent("mp.input",{eventsEnabled:true,userNavigationEnabled:true});_transformComponent=transformComponent;if(_currentViewMode&&_currentViewMode=="mode.floorplan"){_transformComponent.inputs.size=.01}else{_transformComponent.inputs.size=1}if(selectedObject.object.object_data.object_type=="GLB"){const eventPath=_sceneObject.addEmitPath(selectedObject.component,"gltfevents");_inputControlComponent=inputComponent.spyOnEvent(new DragSpy(eventPath,selectedObject.node,selectedObject.component,selectedObject.object,dispatchSpaceEvent))}else if(selectedObject.object.object_data.object_type=="BOX"){const eventPath=_sceneObject.addEmitPath(selectedObject.component,"boxEvents");_inputControlComponent=inputComponent.spyOnEvent(new DragSpy(eventPath,selectedObject.node,selectedObject.component,selectedObject.object,dispatchSpaceEvent))}else if(supportedMediaTypes.includes(selectedObject.object.object_data.object_type)){const eventPath=_sceneObject.addEmitPath(selectedObject.component,"planeEvents");_inputControlComponent=inputComponent.spyOnEvent(new DragSpy(eventPath,selectedObject.node,selectedObject.component,selectedObject.object,dispatchSpaceEvent))}else if(selectedObject.object.object_data.object_type=="FBX"){const eventPath=_sceneObject.addEmitPath(selectedObject.component,"fbxevents");_inputControlComponent=inputComponent.spyOnEvent(new DragSpy(eventPath,selectedObject.node,selectedObject.component,selectedObject.object,dispatchSpaceEvent))}transformNode.start();transformComponent.inputs.selection=selectedObject.node;transformComponent.inputs.mode=mode}function setTransformMode(mode){return __awaiter(this,void 0,void 0,(function*(){if(mode=="translate"){_transformMode="translate"}else if(mode=="rotate"){_transformMode="rotate"}else if(mode=="scale"){_transformMode="scale"}else{log.error("Transform mode not supported or incorrect")}_transformComponent.inputs.mode=_transformMode}))}function revertTransform(action="undo",useNewHistory=true){if(!selectedObject){log.error("selectedObject is undefined.");return}if(useNewHistory){let transform;if(action==="undo"){const res=transformHistory.undo(selectedObject.object.id);transform=res.action;log.info("actionHistory undo ",res);if(transform!==null){setObjectTransformation(selectedObject.node,transform,true)}return res.canUndo}else{const res=transformHistory.redo(selectedObject.object.id);transform=res.action;log.info("actionHistory redo ",res);if(transform!==null){setObjectTransformation(selectedObject.node,transform,true)}return res.canRedo}}else{if(!currentObjTransform){log.error("currentObjTransform is undefined");return}if(actionHistory.length<=0){log.error("actionHistory is empty");return}let targetIndex;let nextIndex;const index=actionHistory.indexOf(JSON.stringify(currentObjTransform));log.info(`Action is ${action} and index is ${index}`);if(action==="undo"){if(index-1>=0){targetIndex=index-1;nextIndex=targetIndex-1}else{return false}}else if(action==="redo"){if(index+1<=actionHistory.length){targetIndex=index+1;nextIndex=targetIndex+1}else{return false}}else{log.error("Incorrect function argument for revertTransform");return false}previousObjTransform=JSON.parse(_previousAction);if(!actionHistory[targetIndex]){log.error("actionHistory is either empty or undefined");return}const objectTransform=JSON.parse(actionHistory[targetIndex]);setObjectTransformation(selectedObject.node,objectTransform,true);log.info("Action history length "+actionHistory.length);log.info("Current history position "+index);log.info("Target history position "+targetIndex);currentObjTransform=JSON.parse(actionHistory[targetIndex]);if(action=="undo"&&nextIndex>=0){return false}else if(action=="redo"&&nextIndex<=actionHistory.length){return false}else{return true}}}function clearActionHistory(){log.info("clearActionHistory()");actionHistory=[];transformHistory.clearHistory()}function convertToEuler(coords){const eulerX=Math.atan2(coords._x,coords._x);const eulerY=Math.atan2(-coords._x,Math.sqrt(coords._y*coords._y+coords._z*coords._z));const eulerZ=Math.atan2(coords._x,coords._x);const degreesX=eulerX*(180/Math.PI);const degreesY=eulerY*(180/Math.PI);const degreesZ=eulerZ*(180/Math.PI);const eulerCoords={x:degreesX,y:degreesY,z:degreesZ};log.info("Euler coords "+JSON.stringify(eulerCoords));return eulerCoords}function setObjectTransformation(node,transform,reverting=false){log.info("caroline setObject trans",transform);log.info("setObjectTransformation");node.obj3D.scale.set(transform.object_scale.x,transform.object_scale.y,transform.object_scale.z);node.position.set(transform.object_position.x,transform.object_position.y,transform.object_position.z);if(reverting){node.obj3D.rotation.set(transform.object_rotation._x,transform.object_rotation._y,transform.object_rotation._z)}else{node.obj3D.rotation.set(transform.object_rotation.x,transform.object_rotation.y,transform.object_rotation.z)}}function calculateDistance(pos1,pos2){const dx=pos2.x-pos1.x;const dy=pos2.y-pos1.y;const dz=pos2.z-pos1.z;return Math.sqrt(dx*dx+dy*dy+dz*dz)}function showVideoObjects(object,action="loading"){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){const liveStreamNode=_sceneObject.addNode();var liveStreamComponent=liveStreamNode.addComponent(getComponentLoader(object.object_data),{url:(_a=object.object_data)===null||_a===void 0?void 0:_a.amazon_uri});liveStreamNode.position.set(object.object_position.x,object.object_position.y,object.object_position.z);liveStreamNode.obj3D.rotation.set(object.object_rotation.x,object.object_rotation.y,object.object_rotation.z);liveStreamNode.scale.set(object.object_scale.x,object.object_scale.y,object.object_scale.z);if(liveStreamComponent.outputs.loadingState!="Error"){liveStreamNode.start()}liveStreamComponent.inputs.src=(_b=object.object_data)===null||_b===void 0?void 0:_b.amazon_uri;if(action==="adding"){log.info("Saving object...");object.id=Number.parseInt(uid.rnd());_generatedObjectIds.push(object.id)}_videos.push({object:object,component:liveStreamComponent,node:liveStreamNode,collider:liveStreamComponent.outputs,type:"VIDEO"})}))}function playVideo(videoId){let videoObject=_videos.find((object=>object.object.id==videoId));if(videoObject){videoObject.component.video.play()}else{log.error("Unable to find video object using that id")}}function pauseVideo(videoId){let videoObject=_videos.find((object=>object.object.id==videoId));if(videoObject){videoObject.component.video.pause()}else{log.error("Unable to find video object using that id")}}function videoAutoPlay(){function nearestVideo(videoObject){return __awaiter(this,void 0,void 0,(function*(){let videoPosition=videoObject.object.object_position;let cameraPosition=getCurrentSweepPosition();const camPos={x:cameraPosition.x,y:cameraPosition.y,z:cameraPosition.z};const videoPos={x:videoPosition.x,y:videoPosition.y,z:videoPosition.z};const THREE=videoObject.component.context.three;const v3camPos=new THREE.Vector3(cameraPosition.x,cameraPosition.y,cameraPosition.z);const v3videoPos=new THREE.Vector3(videoPosition.x,videoPosition.y,videoPosition.z);const computedDistance=v3camPos.distanceTo(v3videoPos);try{if(videoObject.object.autoplay&&videoObject.object.autoplay_distance&&computedDistance<videoObject.object.autoplay_distance){setVideoPlayback("play",videoObject.component.video)}else{setVideoPlayback("pause",videoObject.component.video)}}catch(e){log.error("Unable to play or stop video")}}))}_videos.forEach((videoObject=>nearestVideo(videoObject)))}function createVideoComponent(){function videoRenderer(){this.inputs={visible:true,userNavigationEnabled:true,eventsEnabled:true,colliderEnabled:true,src:null};this.outputs={texture:null,video:null,aspect:720/480};this.onInit=function(){this.video;this.texture};this.events={"INTERACTION.CLICK":true};this.onEvent=function(eventType,eventData){return __awaiter(this,void 0,void 0,(function*(){if(eventType=="INTERACTION.CLICK"&&_viewMode==="interactive"){let video=_videos.filter((l=>{var _a,_b,_c;return((_b=(_a=l.collider)===null||_a===void 0?void 0:_a.collider)===null||_b===void 0?void 0:_b.uuid)===((_c=eventData.collider)===null||_c===void 0?void 0:_c.uuid)}))[0];log.info("Video object "+JSON.stringify(video.object));const selectedObj={object:video.object,node:video.node,component:video.component};setSelectedObject(video.object,video.node,video.component,"VIDEO");setTransformControls(selectedObj)}}))};this.onInputsUpdated=function(previous){this.releaseTexture();const THREE=this.context.three;if(!this.inputs.src){this.video.src="";return}if(this.inputs.src instanceof HTMLVideoElement){this.video=this.inputs.src}else{this.video=this.createVideoElement();if(typeof this.inputs.src==="string"){this.video.src=this.inputs.src}else{this.video.srcObject=this.inputs.src}this.video.load()}this.texture=new THREE.VideoTexture(this.video);this.texture.minFilter=THREE.LinearFilter;this.texture.magFilter=THREE.LinearFilter;this.texture.format=THREE.RGBFormat;var geometry=new THREE.PlaneGeometry(1,1);geometry.scale(1,480/720,1);geometry.translate(0,.33,0);this.material=new THREE.MeshBasicMaterial({map:this.texture,side:THREE.DoubleSide});var mesh=new THREE.Mesh(geometry,this.material);this.outputs.objectRoot=mesh;this.outputs.collider=mesh;mesh.visible=this.inputs.visible;this.outputs.texture=this.texture;this.outputs.video=this.video};this.releaseTexture=function(){if(this.texture){this.outputs.texture=null;this.texture.dispose()}};this.createVideoElement=function(){const video=document.createElement("video");video.setAttribute("id","htmlLivestreamVideo");video.crossOrigin="anonymous";video.setAttribute("height","480");video.setAttribute("width","720");video.setAttribute("webkit-playsinline","webkit-playsinline");video.setAttribute("controls","controls");video.muted=false;video.loop=true;video.volume=1;return video};this.onTick=function(tickDelta){};this.onDestroy=function(){this.material.dispose()};this.spyOnEvent=function(payload){log.info("payload",payload)}}function makeVideoRender(){return new videoRenderer}_atwin.Scene.register("liveVideo",makeVideoRender)}function createSlideScreenModel(iframeId){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;function SlideScreenModelRenderer(){this.inputs={src:null,userNavigationEnabled:true,eventsEnabled:true,colliderEnabled:true,visible:true};this.outputs={texture:null,t_image:null};this.onInit=function(){this.texture;this.t_image;this.material;this.mesh};this.events={"INTERACTION.CLICK":true};this.onEvent=function(eventType,eventData){return __awaiter(this,void 0,void 0,(function*(){log.info("onEventSlideShow",eventType,eventData);if(eventType=="INTERACTION.CLICK"){if(_allSlideShow.length>0){let slideshow=_allSlideShow.filter((l=>{var _a,_b,_c;return((_b=(_a=l.collider)===null||_a===void 0?void 0:_a.collider)===null||_b===void 0?void 0:_b.uuid)==((_c=eventData.collider)===null||_c===void 0?void 0:_c.uuid)}))[0];log.info("Slideshow object "+JSON.stringify(slideshow.object));if(_viewMode==="interactive"){const selectedObj={object:slideshow.object,node:slideshow.node,component:slideshow.component,type:"ZIP"};setSelectedObject(slideshow.object,slideshow.node,slideshow.component,"ZIP");setTransformControls(selectedObj)}log.info("slideShow eventData",slideshow);if(slideshow!=null){log.info("slideShow eventData",slideshow);var mousePosition=yield getMousePosition(iframeId);var planePosition=slideshow.node.obj3D.position;log.info("MOUSE POSITION",mousePosition);log.info("PLANE POSITION",planePosition);if(slideshow.object.object_data.object_type=="ZIP"){if(slideshow.object.id!=_currentSlideShowID){_currentSlideIndex=_slideShowImage.find((elem=>elem.id===slideshow.object.id)).idx;log.info("CURRENT INDEX",_currentSlideIndex);_currentSlideShow=_slideShowImage.find((elem=>elem.id===slideshow.object.id)).images;log.info("CURRENT SLIDE",_currentSlideShow)}if(slideshow.object.id==_currentSlideShowID){log.info("ChangeImage",slideshow,_currentSlideShowID);if(planePosition.x<mousePosition.x){log.info("LEFT SIDE");clearInterval(_timer);this.inputs.src=imageStream("prev")}else if(planePosition.y<mousePosition.y){log.info("RIGHT SIDE");clearInterval(_timer);this.inputs.src=imageStream("next")}else if(planePosition.y>mousePosition.y){log.info("AUTOPLAY");_timer=setInterval((()=>{_currentSlideIndex=(_currentSlideIndex+1)%_currentSlideShow.length;log.info("CURRENT INDEX",_currentSlideIndex);this.inputs.src=imageStream("next")}),2e3)}}else{_currentSlideShowID=slideshow.object.id}}}}}}))};this.onInputsUpdated=function(previous){this.releaseTexture();const three=this.context.three;this.t_image=document.createElement("IMG");this.t_image.src=this.inputs.src;this.t_image.setAttribute("width","auto");this.t_image.setAttribute("height","auto");this.t_image.crossOrigin="anonymous";const planeGeo=new three.PlaneGeometry(1.5,1.5);planeGeo.translate(0,.33,0);if(previous.src!=this.inputs.src){this.texture=(new three.TextureLoader).load(this.t_image.src,((tex=this.texture)=>{tex.minFilter=three.LinearFilter;tex.magFilter=three.LinearFilter;tex.format=three.RGBAFormat;tex.needsUpdate=true;tex.onUpdate=this.textureUpdated;this.material=new three.MeshBasicMaterial({map:this.texture,side:three.DoubleSide,transparent:true,alphaTest:.5});this.mesh=new three.Mesh(planeGeo,this.material);this.mesh.scale.set(1,this.texture.image.height/this.texture.image.width,1);this.outputs.objectRoot=this.mesh;this.outputs.collider=this.mesh;this.outputs.texture=this.texture;this.outputs.t_image=this.t_image}))}if(this.mesh!=null){this.mesh.visible=this.inputs.visible}};this.textureUpdated=function(params){log.info("Update Callback",params)};this.releaseTexture=function(){if(this.texture){this.outputs.texture=null}};this.onTick=function(tickDelta){};this.onDestroy=function(){this.material.dispose();this.texture.dispose()}}function makeSlideScreenModelRenderer(){return new SlideScreenModelRenderer}sdk.Scene.register("slideScreenModel",makeSlideScreenModelRenderer)}function registerCustomLoaders(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(_hasRegisteredLoaders===false||_mpConfig.multispace){log.info("registerCustomLoaders()");createVideoComponent();createSlideScreenModel();yield sdk.Scene.registerComponents([{factory:planeFactory(sdk),name:planeType},{factory:gltfFactory(sdk),name:gltfType},{factory:boxFactory(sdk),name:boxType},{factory:textFactory(sdk),name:textType},{factory:css3DFactory(sdk),name:css3DType},{factory:planeImageFactory,name:planeTypeImage},{factory:planeVideoFactory,name:planeTypeVideo},{factory:planePdfFactory,name:planeTypePdf},{factory:puckBackgroundFactory,name:sweepPuckType},{factory:viewpointFactory,name:viewpointType},{factory:tubeLineFactory(sdk),name:tubeLineType},{factory:verticeFactory(sdk),name:verticeType},{factory:bufferGeometry(sdk),name:bufferGeometryType},{factory:fbxFactory(sdk),name:fbxType},{factory:pathLineFactory(sdk),name:pathLineType},{factory:pathPointFactory(sdk),name:pathPointType}]);_hasRegisteredLoaders=true}}))}function showSlideScreenModel(object,action="loading"){return __awaiter(this,void 0,void 0,(function*(){const modelNode=_sceneObject.addNode();const component=modelNode.addComponent("slideScreenModel");log.info("COMPONENT",component);const objTransformation={object_position:object.object_position,object_rotation:object.object_rotation,object_scale:object.object_scale};setObjectTransformation(modelNode,objTransformation);if(action==="adding"){log.info("Saving object...");object.id=Number.parseInt(uid.rnd());_generatedObjectIds.push(object.id)}modelNode.start();yield addImageToSlideShow(object.object_data,component,object.id);log.info("SLIDE OUTPUT",component.outputs);if(action==="adding"){log.info("Saving object...");const id=yield addShowcaseObject(object);if(id){log.info("Saved object",id);object.id}}var slideShow={collider:component.outputs,object:object,node:modelNode,component:component,type:"ZIP"};_allSlideShow.push(slideShow);log.info("ALL SLIDESHOW",_allSlideShow)}))}function addImageToSlideShow(data,component,objectID){return __awaiter(this,void 0,void 0,(function*(){var dataList=[];yield new JSZip.external.Promise((function(resolve,reject){JSZipUtils.getBinaryContent(data.amazon_uri,(function(err,data){if(err){log.info("getBI error",err);reject(err)}else{log.info("getBI success",data);resolve(data)}}))})).then((function(data){log.info("data from getBI",data);return JSZip.loadAsync(data)})).then((data=>{log.info("data from loadAsync",data);for(let key in data.files){if(key.includes("__MACOSX"))continue;if(key.includes(".DS_Store"))continue;if(data.files[key].dir)continue;let base=data.file(data.files[key].name).async("base64");base.then((res=>{dataList.push({name:data.files[key].name,path:`data:image/png;base64,${res}`});if(dataList.length==1){component.inputs.src=`data:image/png;base64,${res}`}}))}_slideShowImage.push({id:objectID,images:dataList,idx:0,playID:null,play:false,comp:component})}))}))}function getMousePosition(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;return new Promise((resolve=>{const pointer=sdk.Pointer.intersection.subscribe((function(intersection){pointer.cancel();resolve(intersection.position)}))}))}))}function getDomMousePosition(event){domMousePosition.x=event.clientX/window.innerWidth*2-1;domMousePosition.y=-(event.clientY/window.innerHeight)*2+1}function imageStream(direction){let diff=direction==="prev"?-1:1;let length=_currentSlideShow.length;let index=_currentSlideIndex+diff;if(index===-1){index=length-1}if(index===length){index=0}_currentSlideIndex=index;_slideShowImage.find((elem=>elem.id===_currentSlideShowID)).idx=index;return _currentSlideShow[_currentSlideIndex].path}function cameraRotate(x,y,speed,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_START);dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_START);yield sdk.Camera.rotate(x,y,{speed:speed}).then((()=>{dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"success"});log.info("camera rotate success.",x,y);dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"success"})})).catch((error=>{dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"failed",error:error});log.info("camera rotate error.",error);dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"failed",error:error})}))}))}function cameraSetRotation(x,y,speed=30,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;yield sdk.Camera.setRotation({x:x,y:y},{speed:speed}).then((()=>{log.info("camera rotate success.",x,y)})).catch((error=>{log.info("camera rotate error.",error)}))}))}function cameraPan(x,z,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;let mode=getViewMode();log.info("mode ",mode);if(mode==_atwin.Mode.Mode.FLOORPLAN||mode==_atwin.Mode.Mode.DOLLHOUSE){dispatchSpaceEvent(SPACE_EVENTS.CAMERA_PAN_START);yield sdk.Camera.pan({x:x,z:z}).then((()=>{log.info("camera pan success.");dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"success"})})).catch((error=>{log.info("camera rotate error:",error);dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"failed",error:error})}))}else{log.error("Incorrect view mode.")}}))}function cameraLookAt(x,y,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;yield sdk.Camera.lookAtScreenCoords(x,y).then((function(){log.info("camera looking at...",x,y)})).catch((function(error){log.info("camera looking at error:",error)}))}))}function captureSpaceScreenshot(callback,resolution={width:1920,height:1080},visibility={mattertags:false,measurements:false,sweeps:false,views:false},iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;yield sdk.Renderer.takeScreenShot(resolution,visibility).then((imageUri=>{let link=document.createElement("a");link.href=imageUri;const screenshotName=_modelDetails.name?`${_modelDetails.name}.png`:"spaceshot.png";link.download=screenshotName;document.body.appendChild(link);link.click();document.body.removeChild(link);link.remove();if(callback){callback()}}))}))}function captureScreenshotAndCameraDetails(callback,resolution={width:1920,height:1080},visibility={mattertags:false,measurements:false,sweeps:false,views:false},iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ captureScreenshotAndCameraDetails");try{let screenshot;let cameraPose;let cameraSub;let cameraZoomSub;let cameraZoom;if(iframeId){let _sdk;_sdk=_atwinConnections[iframeId];screenshot=yield _sdk.Renderer.takeScreenShot(resolution,visibility);cameraSub=_sdk.Camera.pose.subscribe((function(pose){console.log("__@ Camera pose is ",pose);cameraPose=pose}));cameraZoomSub=_sdk.Camera.zoom.subscribe((function(zoom){cameraZoom=zoom}))}else{screenshot=yield _atwin.Renderer.takeScreenShot(resolution,visibility);cameraPose=_currentCameraPose;cameraZoom=_currentCameraZoom}if(callback){callback()}yield waitFor((()=>cameraPose!==undefined),5);cameraSub.cancel();cameraZoomSub.cancel();return{base64Screenshot:screenshot,cameraPose:cameraPose,cameraZoom:cameraZoom}}catch(error){log.error("Error capturing screenshot or getting camera details:",error)}}))}function captureCurrentView(callback,resolution={width:1920,height:1080},visibility={mattertags:false,measurements:false,sweeps:false,views:false},iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ captureCurrentView");let screenshot="";if(iframeId){let _sdk;_sdk=_atwinConnections[iframeId];screenshot=yield _sdk.Renderer.takeScreenShot(resolution,visibility)}else{screenshot=yield _atwin.Renderer.takeScreenShot(resolution,visibility)}if(callback){callback()}return screenshot}))}function cameraZoomBy(zoom,callback,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("cameraZoomBy() ",zoom);if(!zoom||typeof zoom!=="number"){log.error("Parameter is invalid or undefined");return}const sdk=iframeId?_atwinConnections[iframeId]:_atwin;try{const newZoom=yield sdk.Camera.zoomBy(zoom);if(newZoom&&callback){yield callback()}return newZoom}catch(error){log.error("cameraZoomBy error ",error);return}}))}function cameraZoomTo(zoom,callback,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("cameraZoomTo() ",zoom);if(!zoom||typeof zoom!=="number"){log.error("Parameter is invalid or undefined");return}const sdk=iframeId?_atwinConnections[iframeId]:_atwin;try{const newZoom=yield sdk.Camera.zoomTo(zoom);if(newZoom&&callback){yield callback()}return newZoom}catch(error){log.error("cameraZoomTo error ",error);return}}))}function cameraZoomReset(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;try{yield sdk.Camera.zoomReset()}catch(error){log.error("cameracameraZoomResetZoomTo error ",error)}}))}function moveInDirection(direction,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;let nextDirection=sdk.Camera.Direction.LEFT;switch(direction.toUpperCase()){case"LEFT":nextDirection=sdk.Camera.Direction.LEFT;break;case"RIGHT":nextDirection=sdk.Camera.Direction.RIGHT;break;case"UP":nextDirection=sdk.Camera.Direction.UP;break;case"DOWN":nextDirection=sdk.Camera.Direction.DOWN;break;case"BACK":nextDirection=sdk.Camera.Direction.BACK;break;case"FORWARD":nextDirection=sdk.Camera.Direction.FORWARD;break;default:nextDirection=sdk.Camera.Direction.LEFT;break}yield sdk.Camera.moveInDirection(nextDirection).then((function(){log.info("Move to...",nextDirection)})).catch((function(){log.warn("An error occured while moving in that direction.",nextDirection)}))}))}function dispose3dObjects(){log.info("dispose3dObjects");_3DXObjects.forEach((obj=>{log.info("_3DXObjects stop",obj);obj.node.stop()}));_3DXObjects=[];_videos.forEach((vid=>{log.info("_videos pause and node stop",vid);vid.component.video.pause();vid.node.stop()}));_allSlideShow.forEach((slide=>{log.info("_allSlideShow stop",slide);slide.node.stop()}))}function getUserViewPoint(userId){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ getUserViewPoint");try{return new Promise(((resolve,reject)=>{let latestPose=null;const timeout=2e3;let inactivityTimer;let subscriber;const handlePoseUpdate=pose=>{latestPose=pose;console.log("Current camera pose for user:",userId,pose);clearTimeout(inactivityTimer);inactivityTimer=setTimeout((()=>{if(latestPose){console.log("__@ Last camera pose : ",latestPose);console.log("__@ Last camera string : ",JSON.stringify(latestPose));resolve(latestPose)}else{reject(new Error("No camera pose data received"))}}),timeout)};subscriber=_atwin.Camera.pose.subscribe(handlePoseUpdate)}))}catch(error){log.error("Error in getting user view point: ",error)}}))}function displayUserViewPoint(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ displayUserViewPoint: ",payload);try{let thisSdk;var showcase=document.getElementById("showcase-container");if(showcase==null||undefined){log.error("No showcase-container id found.");return}var showcaseSize={w:showcase.clientWidth,h:showcase.clientHeight};const eyeIcon=document.createElement("div");eyeIcon.setAttribute("id","at-user-view-point");eyeIcon.innerHTML='👁️<br><span id="at-point-username"></span>';eyeIcon.style.position="absolute";eyeIcon.style.fontSize="1.5em";const eyeIconText=eyeIcon.querySelector("#at-point-username");if(eyeIconText){eyeIconText.style.backgroundColor="yellow";eyeIconText.style.color="black";eyeIconText.style.fontWeight="bold";eyeIconText.style.fontSize="0.8em";eyeIconText.style.verticalAlign="middle";eyeIconText.style.lineHeight="1em";eyeIconText.textContent=payload.user.name}let worldX=10;let worldY=5;let worldZ=20;let screenCoords=worldToScreen(worldX,worldY,worldZ,payload.pose.position,showcaseSize.w,showcaseSize.h);console.log("__@ screenCoords: ",screenCoords);if(screenCoords){eyeIcon.style.left=`${screenCoords.x}px`;eyeIcon.style.top=`${screenCoords.y}px`;showcase.appendChild(eyeIcon);console.log("__@ Eye icon displayed!!")}}catch(error){log.error("__@ Error in displaying user view point: ",error)}}))}function renderUserViewPoint(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ renderUserViewPoint: ",payload);try{let object_data={id:Number.parseInt(uid.rnd()),name:"viewpoint",object_type:"VIEWPOINT",upload_file:"",upload_filename:"",filename:"",user_id:0,description:"",object_key:"",amazon_uri:""};const viewpointObj=createIShowcaseObjectData(object_data,payload.pose.position);const viewPointMarker=yield show3DObjects(viewpointObj)}catch(error){log.error("__@ Error in rendering user view point: ",error)}}))}function worldToScreen(worldX,worldY,worldZ,camera,showcaseWidth,showcaseHeight){let relativeX=worldX-camera.x;let relativeY=worldY-camera.y;let relativeZ=worldZ-camera.z;let focalLength=200;let screenX=relativeX/relativeZ*focalLength+showcaseWidth/2;let screenY=relativeY/relativeZ*focalLength+showcaseHeight/2;return{x:screenX,y:screenY}}function projectToScreen2(cameraPoseData,point3D,viewportWidth,viewportHeight){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ projectToScreen");const projectionMatrix=cameraPoseData.projection;const{x:x,y:y,z:z}=point3D;const clipX=projectionMatrix[0]*x+projectionMatrix[1]*y+projectionMatrix[2]*z+projectionMatrix[3];const clipY=projectionMatrix[4]*x+projectionMatrix[5]*y+projectionMatrix[6]*z+projectionMatrix[7];const clipW=projectionMatrix[12]*x+projectionMatrix[13]*y+projectionMatrix[14]*z+projectionMatrix[15];const screenX=(clipX/clipW+1)/2;const screenY=(clipY/clipW+1)/2;const viewportX=screenX*viewportWidth;const viewportY=screenY*viewportHeight;return{x:viewportX,y:viewportY}}))}function worldToScreen1(position,camera,showcase){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ worldToScreen");const{x:x,y:y,z:z}=position;const{projection:projection,view:view}=camera;const mvpMatrix=new Float32Array(16);for(let i=0;i<16;i++){mvpMatrix[i]=0;for(let j=0;j<4;j++){mvpMatrix[i]+=projection[Math.floor(i/4)*4+j]*view[j*4+i%4]}}const w=mvpMatrix[3]*x+mvpMatrix[7]*y+mvpMatrix[11]*z+mvpMatrix[15];const screenX=(mvpMatrix[0]*x+mvpMatrix[4]*y+mvpMatrix[8]*z+mvpMatrix[12])/w;const screenY=(mvpMatrix[1]*x+mvpMatrix[5]*y+mvpMatrix[9]*z+mvpMatrix[13])/w;const normalizedScreenX=(screenX+1)/2*showcase.clientWidth;const normalizedScreenY=(1-screenY)/2*showcase.clientHeight;return{x:normalizedScreenX,y:normalizedScreenY}}))}function getViewMode(){return _currentViewMode}function setViewMode(mode,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("=== get Mode Type ===",_getModeType(mode));let modeType=_getModeType(mode);const sdk=iframeId?_atwinConnections[iframeId]:_atwin;yield sdk.Mode.moveTo(modeType).then((function(nextMode){log.info("Arrived at new view mode "+nextMode)})).catch((function(error){log.error("Error occur on:",error)}))}))}function _getModeType(mode){let modes={DOLLHOUSE:"mode.dollhouse",FLOORPLAN:"mode.floorplan",INSIDE:"mode.inside",OUTSIDE:"mode.outside",TRANSITIONING:"mode.transitioning"};return modes[mode.toUpperCase()]||""}function disconnectSpace(iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("disconnectSpace()");const sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sdk){yield disposeTags(iframeId);dispose3dObjects()}_iframe.src="";_api={};_atwin={};_tags=[];sweeps=[];_allSlideShow=[];_slideShowImage=[];_currentSlideShowID=0;_currentSlideIndex=0;_currentSlideShow=null;_timer=null;_videos=[];_currentViewMode="";_3DXObjects=[];_unrenderedObjects=[];_previousTimeStamp=0;_currentSweep={};_currentCameraPose={};_sweeps=[];_hasRegisteredLoaders=false;_is3DClickSpyCreated=false;_isNavigationComponentCreated=false;spaceEventQueue={events:[]}}))}function getTargetPosition(callback=undefined,continousClick=false){return __awaiter(this,void 0,void 0,(function*(){log.info("getTargetPosition()");if(!_objectMarker){log.error("Object marker has not been created");return}const iframe=document.getElementById(_mpConfig.iframeId);const iframeSize={w:iframe.clientWidth,h:iframe.clientHeight};let pointerCoord;yield _atwin.Pointer.editTexture("targetPointer");_onMouseClickInstance=callback;_continousClickMode=continousClick}))}function cancelModelPlacement(){return __awaiter(this,void 0,void 0,(function*(){log.info("cancelModelPlacement()",_pointerSubscription);if(_pointerSubscription)_pointerSubscription.cancel();setElementVisibility(_objectMarker,false);yield _atwin.Pointer.resetTexture();if(_onMouseClickInstance!==undefined){_objectMarker.removeEventListener("click",_onMouseClickInstance);_onMouseClickInstance=undefined;_continousClickMode=false}}))}function setPointerCoordinates(position){_pointerCoord=position}function renderModel(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("renderModel() ",payload);if(!payload){log.error("Payload is undefined");return}let showcase_object;let objId=undefined;let object={};if(payload.object_data)object=payload.object_data;object.amazon_uri=payload.mediaUrl;object.object_type=payload.objectType.toUpperCase();if(payload.config.options&&payload.config.options.mediaViewerId){objId=payload.config.options.mediaViewerId}else if(payload.config.id){objId=payload.config.id}showcase_object=createIShowcaseObjectData(object,payload.config.position,payload.config.scale,payload.config.rotation,objId);if(payload.config){if(payload.config.json_data){const jsonData=JSON.parse(payload.config.json_data);console.log("__@ jsonData: ",jsonData);showcase_object.json_data=payload.config.json_data;if(jsonData.coordSystemCalibration){const thisCoordSystemCal=jsonData.coordSystemCalibration;showcase_object.coordinate_system=thisCoordSystemCal.coord_system}}}log.info("About to render object",showcase_object);if(object.object_type=="ZIP"){yield showSlideScreenModel(showcase_object)}else{yield show3DObjects(showcase_object,payload.config&&payload.config.options?payload.config.options:null)}return showcase_object}))}function addObjectToSpace(mediaUrl,objectType,config=undefined,object_data){return __awaiter(this,void 0,void 0,(function*(){log.info("addObjectToSpace()");log.info("Object Media URL ",mediaUrl);log.info("Object type",objectType);const iframe=document.getElementById(_mpConfig.iframeId);let showcase_object;let pointerSubscriptionActive=false;let mediaType;let mediaName;let isDefaultImage=true;if(objectType===""||objectType===null){objectType=undefined}const urlPattern=/^(https?:\/\/)/;if(urlPattern.test(mediaUrl))isDefaultImage=false;if(mediaUrl&&mediaUrl!==""&&mediaUrl!==null&&objectType===undefined&&isDefaultImage===false){log.info("Extracting file info...");const type=yield extractFileInfo(mediaUrl);if(!type||type===""){log.error("Invalid URL provided. URL is not valid and failed to return content-type header");return}mediaName=generateUUID();mediaType=type;log.info("mediaType",mediaType)}if(objectType){mediaType=objectType}if(isDefaultImage){mediaType="PNG"}mediaType=mediaType.toUpperCase();const iframeSize={w:iframe.clientWidth,h:iframe.clientHeight};function onObjectPositionSet(mediaUrl){return __awaiter(this,void 0,void 0,(function*(){log.info("Object positioned at: ",_pointerCoord);let object={};if(object_data){object=object_data}object.amazon_uri=mediaUrl;object.object_key=mediaName;object.object_type=mediaType.toUpperCase();if(pointerSubscriptionActive){_pointerSubscription.cancel();setElementVisibility(_objectMarker,false);yield _atwin.Pointer.resetTexture()}let objId=undefined;if(config.options&&config.options.mediaViewerId){objId=config.options.mediaViewerId}else if(config.id){objId=config.id}showcase_object=createIShowcaseObjectData(object,config.position,config.scale,config.rotation,objId);if(config){if(config.json_data){const jsonData=JSON.parse(config.json_data);console.log("__@ jsonData: ",jsonData);if(jsonData===null||jsonData===void 0?void 0:jsonData.name){showcase_object.showcase_object_name=jsonData===null||jsonData===void 0?void 0:jsonData.name}showcase_object.json_data=config.json_data;if(jsonData.coordSystemCalibration){const thisCoordSystemCal=jsonData.coordSystemCalibration;showcase_object.coordinate_system=thisCoordSystemCal.coord_system}}}log.info("About to render object",showcase_object);if(object.object_type=="ZIP"){yield showSlideScreenModel(showcase_object)}else{if(config){console.log("Config set",config);yield show3DObjects(showcase_object,config.options);log.info("selectedObject",selectedObject)}else{yield show3DObjects(showcase_object,null);log.info("selectedObject",selectedObject)}}if(_objectMarker){_objectMarker.removeEventListener("click",handleClick)}log.info("Returning object",showcase_object);return showcase_object}))}const handleClick=()=>onObjectPositionSet(mediaUrl);if(mediaUrl!==undefined&&config===undefined||mediaUrl!==undefined&&config.options&&!config.position){log.info("Positioning object to user pointer click coordinates");_objectMarker.addEventListener("click",handleClick);yield _atwin.Pointer.editTexture("targetPointer");pointerSubscriptionActive=true;_pointerSubscription=_atwin.Pointer.intersection.subscribe((function name(intersection){_pointerCoord=intersection.position;if(_currentCameraPose){const screenCoord=_atwin.Conversion.worldToScreen(intersection.position,_currentCameraPose,iframeSize);translateElementPosition(_objectMarker,screenCoord)}}));return}else if(mediaUrl!==undefined&&config.position!=null){log.info("Positioning object to pre-defined coordinates");const showcase_obj=yield onObjectPositionSet(mediaUrl);return showcase_obj}else{log.error("Object is either null or undefined");return}}))}function renderAvatar(avatarConfig){return __awaiter(this,void 0,void 0,(function*(){log.info("renderAvatar()",avatarConfig);const supportedModelTypes=["GLB","FBX","OBJ"];if(!avatarConfig.modelUrl){log.error("modelUrl is undefined");return}if(!avatarConfig.modelType){log.error("modelType is undefined");return}if(supportedModelTypes.includes(avatarConfig.modelType)){const config={position:avatarConfig.cameraPose.position,scale:avatarConfig.scale?avatarConfig.scale:{x:1,y:1,z:1},rotation:{x:avatarConfig.cameraPose.rotation.x,y:avatarConfig.cameraPose.rotation.y,z:-.5}};if(avatarConfig.id){config.id=avatarConfig.id}const payload=yield addObjectToSpace(avatarConfig.modelUrl,avatarConfig.modelType,config);return payload}log.error("Model type not supported");return}))}function setSpaceAvatar(avatar){return __awaiter(this,void 0,void 0,(function*(){if(!avatar){log.error("setSpaceAvatar payload is undefined");return}if(!avatar.modelUrl){log.error("setSpaceAvatar modelUrl is undefined");return}const cameraPose=getCurrentCameraPose();const avatarInfo={modelUrl:avatar.modelUrl,modelType:"GLB",cameraPose:cameraPose};if(avatar.id){avatarInfo.id=avatar.id;const payload=yield renderAvatar(avatarInfo);_avatarModel=_3DXObjects.find((obj=>obj.object.id===payload.id));return avatarInfo}else{const payload=yield renderAvatar(avatarInfo);avatarInfo.id=payload.id;_avatarModel=_3DXObjects.find((obj=>obj.object.id===payload.id));return avatarInfo}}))}function renderViewpointMarker(transform,viewpointId,options){return __awaiter(this,void 0,void 0,(function*(){log.info("renderViewpointMarker()");if(!transform||!transform.position){log.error("transform or transform position is undefined");return}transform.rotation=transform.rotation?transform.rotation:{x:0,y:0,z:0};let object_data={id:Number.parseInt(uid.rnd()),name:"viewpoint",object_type:"VIEWPOINT",upload_file:"",upload_filename:"",filename:"",user_id:0,description:"",object_key:"",amazon_uri:""};const showcase_obj=createIShowcaseObjectData(object_data,transform.position,undefined,transform.rotation,viewpointId);if(options){yield show3DObjects(showcase_obj,options)}else{yield show3DObjects(showcase_obj)}}))}function toggleViewpointVisibility(viewpointIds){log.info("toggleViewpointVisibility");if(viewpointIds){if(Array.isArray(viewpointIds)){log.info("Trying to toggle visiblity of multiple viewpoint ids");const selectedViewpoints=_3DXObjects.filter((obj=>obj.object.object_data.object_type=="VIEWPOINT"&&viewpointIds.includes(obj.object.id))).map((item=>item.object.id));if(selectedViewpoints&&selectedViewpoints.length>0){selectedViewpoints.forEach((id=>{setModelVisibility(id)}));return}return}setModelVisibility(viewpointIds)}const allViewpoints=_3DXObjects.filter((obj=>obj.object.object_data.object_type=="VIEWPOINT")).map((item=>item.object.id));if(allViewpoints&&allViewpoints.length>0){allViewpoints.forEach((id=>{setModelVisibility(id)}));return}log.error("No viewpoints to toggle");return}function setViewpointLineLength(width,id){log.info("setViewpointLineLength()");if(width){let widthPath;for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`maxLineLength_${id}`){log.info("Setting viewpoint max line length");widthPath=path;widthPath.set(width)}}}}function convertDegRotationToEuler(x,y){if(!x||!y){log.error("Pitch or yaw is undefined");return}const spaceObj=_3DXObjects[0];if(spaceObj&&spaceObj.component.context.three){const THREE=spaceObj.component.context.three;const pitchRad=THREE.MathUtils.degToRad(x);const yawRad=THREE.MathUtils.degToRad(y);const pitchQuaternion=new THREE.Quaternion;pitchQuaternion.setFromAxisAngle(new THREE.Vector3(1,0,0),pitchRad);const yawQuaternion=new THREE.Quaternion;yawQuaternion.setFromAxisAngle(new THREE.Vector3(0,1,0),yawRad);const finalQuaternion=new THREE.Quaternion;finalQuaternion.multiplyQuaternions(pitchQuaternion,yawQuaternion);const euler=new THREE.Euler;euler.setFromQuaternion(finalQuaternion,"XYZ");return euler}log.error("Failed to get ThreeJS context. No objects exist in space");return}function translateElementPosition(element,coord){log.info("translateElementPosition()");if(coord){if(coord.x>0){element.style.left=`${Math.abs(coord.x-22)}px`;element.style.top=`${Math.abs(coord.y-19)}px`}else{element.style.left=`${Math.abs(coord.x+22)}px`;element.style.top=`${Math.abs(coord.y+19)}px`}const computedStyle=window.getComputedStyle(_objectMarker);const displayValue=computedStyle.getPropertyValue("display");if(displayValue=="none"){setElementVisibility(_objectMarker,true)}return}log.error("Argument for coord is undefined");return}function create3dMarker(){let container=document.getElementById("showcase-container");if(!container){log.warn("Cannot find element with id of showcase container. Attempting to get the parent element of iframe instead");const childIframe=document.getElementById(_mpConfig.iframeId);if(childIframe){container=childIframe.parentElement}}if(!container){log.error("We cannot find the parent container of the iFrame. You need to assign your parent container a value of showcase-container");return}const checkMarker=document.getElementById("marker-3d");if(!checkMarker){log.info("Marker not found. Creating marker in DOM");_objectMarker=document.createElement("div");_objectMarker.setAttribute("id","marker-3d");_objectMarker.style.display="none";_objectMarker.style.width="140px";_objectMarker.style.height="140px";_objectMarker.style.cursor="pointer";_objectMarker.style.position="absolute";if(_mpConfig.debug){if(_mpConfig.debug.showObjectMarker){_objectMarker.style.backgroundColor="teal"}}container.appendChild(_objectMarker);return}log.info("Marker found. Skipping marker creation")}function create3DClickSpy(){log.info("create3DClickSpy()");if(_is3DClickSpyCreated&&!_mpConfig.multispace){log.info("3D click spy has already been created");return}try{const click_path=_sceneObject.addPath({id:"clicklistener2",type:_atwin.Scene.PathType.EMIT,node:_navigationInputNode,component:_navigationComponent,property:"INTERACTION.CLICK"});const click_spy={path:click_path,onEvent(event_data){return __awaiter(this,void 0,void 0,(function*(){log.info("3DClickSpy",_intersectionData.position);dispatchSpaceEvent(SPACE_EVENTS.POINTER_CLICK,_intersectionData);if(_onMouseClickInstance){try{yield _onMouseClickInstance(_intersectionData.position)}catch(error){log.error("Click event instance error ",error)}if(_continousClickMode==false){yield _atwin.Pointer.resetTexture();_onMouseClickInstance=undefined}}}))}};_sceneObject.spyOnEvent(click_spy);_is3DClickSpyCreated=true}catch(error){log.error("create3DClickSpy error ",error)}}function setElementVisibility(element,visible){if(visible){element.style.display="inline-block";return}element.style.display="none"}function createIShowcaseObjectData(object_data,position=undefined,scale=undefined,rotation=undefined,mediaViewerId){log.info("createIShowcaseObject()",object_data);const newObj=object_data;const showcase_object={};if(mediaViewerId){showcase_object.id=typeof mediaViewerId==="number"?mediaViewerId:Number.parseInt(mediaViewerId)}else{showcase_object.id=Number.parseInt(uid.rnd())}showcase_object.uuid=object_data.object_uuid;showcase_object.player_id=mediaViewerId?mediaViewerId.toString():"";_generatedObjectIds.push(showcase_object.id);showcase_object.object_id=object_data.id;showcase_object.user_id=_userId;showcase_object.showcase_id=parseInt(_spaceId);showcase_object.media_viewer_id=showcase_object.id;showcase_object.object_position=position!=undefined?position:_pointerCoord;showcase_object.object_rotation=rotation!=undefined?rotation:{x:0,y:0,z:0};showcase_object.object_scale=scale!=undefined?scale:{x:1,y:1,z:1};if(object_data.object_type=="MP4"){showcase_object.autoplay=true;showcase_object.autoplay_distance=2}showcase_object.offset_position=1;showcase_object.offset_rotation=1;showcase_object.position_unit="m";showcase_object.object_data=object_data;showcase_object.showcase_object_name=object_data.name;showcase_object.coordinate_system=getCoordinateSystem();if(showcase_object.object_data){showcase_object.object_data=newObj}log.info("Returned objects",showcase_object);return showcase_object}function copyObject(payload,position_offset=undefined,rotation_offset=undefined){return __awaiter(this,void 0,void 0,(function*(){log.info("copyObject()",payload);if(payload){const newObject=JSON.parse(JSON.stringify(payload));const modelNode=_3DXObjects.find((obj=>obj.object.id===payload.id)).node;if(!modelNode){log.error("Could not find object in _3DXObjects. Are you sure these object id exists?");return}if(position_offset==undefined){newObject.object_position.x=modelNode.position.x+.5;newObject.object_position.z=modelNode.position.z+.5}else{newObject.object_position.x=modelNode.position.x+position_offset.x;newObject.object_position.z=modelNode.position.z+position_offset.x}if(rotation_offset){newObject.object_rotation.x+=rotation_offset.x;newObject.object_rotation.y+=rotation_offset.y;newObject.object_rotation.z+=rotation_offset.z}log.info("copyObject id",newObject.object_data.id);const showcase_obj=yield addObjectToSpace(newObject.object_data.amazon_uri,newObject.object_data.object_type,{position:newObject.object_position,rotation:newObject.object_rotation,scale:newObject.object_scale},newObject.object_data);showcase_obj.object_data.name=newObject.object_data.name;showcase_obj.object_data.upload_file=newObject.object_data.upload_file;showcase_obj.object_data.object_thumbnail=newObject.object_data.object_thumbnail;return showcase_obj}log.error("Payload for copyObject is undefined");return}))}function replaceObject(payload,target,options=null){return __awaiter(this,void 0,void 0,(function*(){log.info("replaceObject()");if(payload&&target){removeTransformControls();target.node.stop();const showcase_obj=yield addObjectToSpace(payload.amazon_uri,"",{options:options,position:target.object.object_position,rotation:target.object.object_rotation,scale:target.object.object_scale});return showcase_obj}log.error("payload or target is undefined");return}))}function goToMPOrigin(iframeId,customMarkerUrl){return __awaiter(this,void 0,void 0,(function*(){log.info("goToMPOrigin()");try{const objects=get3DXObjects();log.info("marker objects: ",objects);let markerUrl="";if(customMarkerUrl){const isFullUrl=customMarkerUrl.startsWith("http://")||customMarkerUrl.startsWith("https://");markerUrl=isFullUrl?customMarkerUrl:getAssetUrl(customMarkerUrl)}else{markerUrl=getAssetUrl("images/basepointmarker.png")}const markerName=markerUrl.split("/").pop();const existingMarkerObj=objects.find((obj=>obj.object.object_data.amazon_uri.includes(markerName)));let markerObj=null;if(existingMarkerObj){markerObj=existingMarkerObj;log.info("Found existing origin marker.")}else{log.info("No existing marker found. Adding new marker.");if(markerUrl){yield addObjectToSpace(markerUrl,"PNG",{position:{x:0,y:0+.1,z:0},rotation:{x:Math.PI/2,y:0,z:0},options:{iframeId:iframeId}})}const updatedObjects=get3DXObjects();log.info("marker updatedObjects: ",updatedObjects);markerObj=updatedObjects[updatedObjects.length-1]}log.info("marker markerObj: ",markerObj);if(iframeId){yield goToModel(markerObj.object.id,iframeId)}else{yield goToModel(markerObj.object.id)}}catch(error){log.error("Error goToMPOrigin: ",error)}}))}function extractFileInfo(fileLink){return __awaiter(this,void 0,void 0,(function*(){log.info("fileLink",fileLink);let object_key="";let type="";if(fileLink){try{const response=yield _mediaApi.head(fileLink);if(response.status==200){log.info("== file info response ==",response);const contentType=response.headers["content-type"];const typeMatch=contentType.match(/\/([^;]+)/);if(typeMatch){type=typeMatch[1].toUpperCase()}else{log.error("Failed to extract content type");return}}else{log.error("Failed get request");return}}catch(error){log.error("Axios error",error);return}}log.info("=== OBJECT key ===",object_key);log.info("=== OBJECT type ===",type);return type}))}function createFileFromURL(url,fileName){return __awaiter(this,void 0,void 0,(function*(){log.info("createFileFromURL()");try{const response=yield fetch(url);const fileContent=yield response.blob();const file=new File([fileContent],fileName);log.info("Successfuly created file",file);return file}catch(error){log.error("Error creating File object:",error);return null}}))}function addMediaScreen(mediaUrl,transform,mediaViewerId,readonly,autoplay){return __awaiter(this,void 0,void 0,(function*(){log.info("=== addMediaScreen");log.info("=== mediaUrl",mediaUrl);log.info("=== transform",transform);log.info("=== readonly",readonly);log.info("=== autoplay",autoplay);if(mediaViewerId){log.info("=== mediaViewerId",mediaViewerId)}let defaultImageUri="";let mediaType;let mediaName;if(mediaUrl===null||mediaUrl===""){mediaUrl=undefined}if(!transform){log.error("Transform parameter is undefined");return}if(_mpConfig.prod===undefined||_mpConfig.prod===null){_mpConfig.prod=true}if(mediaUrl){const type=yield extractFileInfo(mediaUrl);log.info("__type",type);if(!type||type===""){log.error("Invalid URL provided. URL is not valid and failed to return content-type header");return}mediaName=generateUUID();mediaType=type}else{if("bundlePath"in _mpConfig){defaultImageUri=`https://cdn.jsdelivr.net/npm/architwin@latest/static/Nomedia.png`;mediaName="Nomedia";mediaType="PNG"}else{if(_mpConfig.prod&&!mediaUrl){defaultImageUri=`../static/Nomedia.png`;mediaName="Nomedia";mediaType="PNG"}else if(_mpConfig.prod==false&&!mediaUrl){defaultImageUri=`/architwin/static/Nomedia.png`;mediaName="Nomedia";mediaType="PNG"}}}if(!mediaUrl||mediaUrl===""){log.info("=== mediaUrl is not set. Using default",defaultImageUri);mediaUrl=defaultImageUri}const mediaScreenId=Number.parseInt(uid.rnd());_generatedObjectIds.push(mediaScreenId);const object_data={id:mediaScreenId,filename:`${mediaName}.${mediaType}`,name:mediaName,user_id:_userId,object_key:mediaName,object_type:mediaType,amazon_uri:mediaUrl};const options={name:"canvasFrame",type:mediaType,url:object_data.amazon_uri,visible:true,aspectRatio:1,mediaViewerId:mediaViewerId?mediaViewerId:mediaViewerId};log.info("__options",options);log.info("=== Adding programmatically");const showcase_obj=yield addObjectToSpace(object_data.amazon_uri,"",{options:options,position:transform.position,rotation:transform.rotation,scale:transform.scale});return showcase_obj}))}function attachMediaScreenContent(mediaScreenId,mediaUrl,mediaType="image"){return __awaiter(this,void 0,void 0,(function*(){log.info("attachMediaScreenContent");log.info("mediaScreenId",mediaScreenId);log.info("mediaUrl",mediaUrl);log.info("mediaType",mediaType);let urlPath;let typePath;let isFirstLoadPath;let expandMode=false;const fileTypes=["image","video","PDF","TXT"];if(!fileTypes.includes(mediaType)){log.error("Unsupported file type, please use a valid type");return}for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`url_${mediaScreenId}`){urlPath=path}if(desc.id===`type_${mediaScreenId}`){typePath=path}if(desc.id===`isFirstLoad_${mediaScreenId}`){isFirstLoadPath=path}}isFirstLoadPath.set(false);typePath.set(mediaType);if(urlPath){urlPath.set(mediaUrl);return}log.error("Could not find input path for specified object");return}))}function setBasePointPosition(id,position){let basePointPath;for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`basePosition_${id}`){basePointPath=path}}if(position==="corner"){basePointPath.set("corner")}else{basePointPath.set("center")}}function setVideoPlayback(action,element,objectId,isMediascreenDocked=false){log.info("setVideoPlayback",action,element);log.info("objects",_3DXObjects);const actions=["play","pause","mute","unmute"];let target;let meshChildren=[];let playMesh,pauseMesh,muteMesh,unmuteMesh;if(objectId){target=_3DXObjects.find((obj=>obj.object.id===objectId));if(target&&target.component.planeElement){if(isMediascreenDocked){target.component.setDockedMediascreenPlayback(action);return}else{meshChildren=target.component.mesh.children;if(meshChildren.length>0){meshChildren.forEach((mesh=>{if(mesh.name==="playBtn"){playMesh=mesh}else if(mesh.name==="pauseBtn"){pauseMesh=mesh}else if(mesh.name==="muteBtn"){muteMesh=mesh}else if(mesh.name==="unmuteBtn"){unmuteMesh=mesh}}))}}}}if(actions.includes(action)&&target&&target.component.planeElement){if(action===actions[0]){target.component.planeElement.play();if(playMesh&&pauseMesh){playMesh.visible=false;pauseMesh.visible=true}}else if(action===actions[1]){target.component.planeElement.pause();if(playMesh&&pauseMesh){playMesh.visible=true;pauseMesh.visible=false}}else if(action===actions[2]){target.component.planeElement.muted=true;if(muteMesh&&unmuteMesh){muteMesh.visible=false;unmuteMesh.visible=true}}else if(action===actions[3]){target.component.planeElement.muted=false;if(muteMesh&&unmuteMesh){muteMesh.visible=true;unmuteMesh.visible=false}}return}log.error("Argument does not match known actions");return}function setModelVisibility(id,visible){log.info("__setModelVisibility()",id,visible);const target=_3DXObjects.find((obj=>obj.object.id===id));const index=_3DXObjects.findIndex((obj=>obj.object.id===id));if(target){_3DXObjects[index].component.mesh.visible=visible!==undefined?visible:!target.component.mesh.visible;return}log.error(`Parameter id value ${id} does not exist`);return}function toggleFitToScreen(id,visibility=false){console.log("toggleFitToScreen()",id);const target=_3DXObjects.find((obj=>obj.object.id===id));console.log("Mesh object",target);if(visibility){target.component.activateFitToScreen();return}const isDismissed=target.component.dismissFitToScreen();return isDismissed}function addTextMarkupScreen(title="",message,textScreenName,transform,textColor="black",backgroundColor="#fff"){return __awaiter(this,void 0,void 0,(function*(){log.info("=== title",title);log.info("=== message",message);log.info("=== textScreenName",textScreenName);if(!message){log.error("Message is undefined");return}if(!textScreenName){log.error("textScreenName is undefined");return}if(!transform){log.error("transform object is undefined. Please supply the necessary x,y,z values");return}const textScreenId=Number.parseInt(uid.rnd());_generatedObjectIds.push(textScreenId);const object_data={id:textScreenId,filename:textScreenName,user_id:_userId,name:textScreenName,object_type:"MARKUP"};const options={name:textScreenName,title:title,text:message,iframeId:_mpConfig.iframeId,textColor:textColor,backgroundColor:backgroundColor,visible:true};transform.position.y+=2;log.info("=== Adding programmatically");const showcase_obj=yield addObjectToSpace(object_data.amazon_uri,"",{options:options,position:transform.position,rotation:transform.rotation,scale:transform.scale});return showcase_obj}))}function setTextMarkupScreenContent(showcase_id,title="",text="",textColor="",backgroundColor=""){log.info("setTextMarkupScreenContent()");if(!showcase_id){log.error("showcase_id or textScreenName is undefined");return}let titlePath;let textPath;let textColorPath;let backgroundColorPath;for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`title_${showcase_id}`){titlePath=path}if(desc.id===`text_${showcase_id}`){textPath=path}if(desc.id===`textColor_${showcase_id}`){textColorPath=path}if(desc.id===`backgroundColor_${showcase_id}`){backgroundColorPath=path}}if(title&&title!=="")titlePath.set(title);if(text&&text!=="")textPath.set(text);if(textColor&&textColor!=="")textColorPath.set(textColor);if(backgroundColor&&backgroundColor!=="")backgroundColorPath.set(backgroundColor)}function setState({isLoading:isLoading,loaded:loaded,error:error,data:data}){const newState={isLoading:isLoading,loaded:loaded,error:error!==undefined?error:"",data:data!==undefined?data:null};state=Object.assign({},newState)}function checkValidFileType(payload){if(payload){const fileName=payload.name;const fileExtension=fileName.substring(fileName.lastIndexOf(".")+1);log.info("File extension "+fileExtension);if(supportedFileTypes.includes(fileExtension.toUpperCase())){return{valid:true,type:fileExtension}}return{valid:false}}log.error("No file provided");return{valid:false}}function addObject(payload){return __awaiter(this,void 0,void 0,(function*(){if(_userId){payload.user_id=_userId}else{log.warn("_userId is not defined")}const isValid=checkValidFileType(payload.file);if(isValid.valid){try{const response=yield _api.post("/s3/file.json",payload);log.info("S3 response is: ",response);if(response.data.status=="success"){const id=response.data.query_result.id;const object_data=yield getObject(id);return object_data}}catch(error){log.error("Object upload failed"+error)}}log.error("Unsupported file type");return}))}function addShowcaseObject(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("addShowcaseObject()");if(payload){payload.object_position=JSON.stringify(payload.object_position);payload.object_rotation=JSON.stringify(payload.object_rotation);payload.object_scale=JSON.stringify(payload.object_scale);delete payload["id"];try{const response=yield _api.post("/v1/showcase-objects.json",payload);log.info("API response is: ",response);if(response.data.status=="success"){log.info("Add showcase data",response.data.data);return response.data.data.id}}catch(error){log.error("Object upload failed"+error);return}}return}))}function getObject(id){return __awaiter(this,void 0,void 0,(function*(){log.info("getObject()");setState({isLoading:true,loaded:false});if(id){try{const response=yield _api.get(`/v1/objects/id/${id}`);if(response.data.status=="success"){const object_data=response.data.data[0];log.info("Response"+JSON.stringify(object_data));return object_data}log.error("Failed to get requested object")}catch(error){log.error("Error getting object "+error)}}return}))}function getShowcaseObject(id){return __awaiter(this,void 0,void 0,(function*(){log.info("getShowcaseObject()");if(id){try{const response=yield _api.get(`/v1/showcase-objects/showcase-id/${id}`);if(response.data.status=="success"){const showcase_object=response.data.data[0];const object=yield getObject(showcase_object.object_id);showcase_object.object_data=object;log.info("Success ",showcase_object);return showcase_object}log.error("Failed to get requested showcase object")}catch(error){log.error("Error getting showcase object "+error)}}log.error("id is undefined");return}))}function updateShowcaseObject(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("getShowcaseObject()",payload);payload.object_position=JSON.stringify(payload.object_position);payload.object_rotation=JSON.stringify(payload.object_rotation);payload.object_scale=JSON.stringify(payload.object_scale);if(payload.id){const objPayload=payload;delete objPayload["object_data"];try{const response=yield _api.put(`/v1/showcase-objects/${payload.id}`,payload);log.info("updateShowcaseObject API response ",response.data);if(response.data.status=="success"){log.info("Succsss API response ",response.data);const showcase_object=payload;const object=yield getObject(payload.object_id);showcase_object.object_data=object;return showcase_object}log.error("Failed to get requested showcase object");return}catch(error){log.error("Error getting showcase object "+error);return}}log.error("id is undefined");return}))}function updateObject(id,payload){return __awaiter(this,void 0,void 0,(function*(){const isValid=checkValidFileType(payload.file);if(isValid.valid){try{const response=yield _api.put(`/s3/file/${id}.json`,payload);log.info("S3 response is: ",response);if(response.data.status=="success"){const id=response.data.query_result.id;const object_data=yield getObject(id);return object_data}}catch(error){log.error("Object upload failed"+error)}}log.info("Unsupported file type");return}))}function updateObjectUri(id,uri,mediaType){return __awaiter(this,void 0,void 0,(function*(){if(id&&uri){const payload={};payload.amazon_uri=uri;payload.object_type=mediaType.toUpperCase();try{const response=yield _api.put(`v1/objects/${id}.json`,payload);if(response.status==200){log.info("Successfuly updated URI");return}}catch(error){log.error("Update object uri error",error)}return}log.error("id and/or uri is undefined");return}))}function deleteObject(id){return __awaiter(this,void 0,void 0,(function*(){if(id){try{const response=yield _api.delete(`/s3/file/${id}.json`);log.info("S3 response is: ",response.data);if(response.data.status=="success"){log.info("S3 object deleted");return}}catch(error){log.error("Object delete failed"+error);return}}log.error("id is undefined");return}))}function deleteShowcaseObject(id){return __awaiter(this,void 0,void 0,(function*(){if(id){try{const response=yield _api.delete(`/v1/showcase-objects/${id}.json`);log.info("deleteShowcaseObject response is: ",response.data);if(response.data.status=="success"){log.info("Showcase object deleted");return}}catch(error){log.error("Delete showcase object failed"+error);return}}log.error("id is undefined");return}))}function deleteObjectFromSpace(target){return __awaiter(this,void 0,void 0,(function*(){log.info("deleteObjectFromSpace()");if(target){try{removeTransformControls();target.node.stop();selectedObject=null;if(target.object.object_data.object_type==="MARKUP"){const targetElement=document.getElementById(target.object.object_data.name);if(targetElement){targetElement.remove()}}const filteredRenderedObjects=_3DXObjects.filter((obj=>obj.object.id!==target.object.id));_3DXObjects=filteredRenderedObjects;log.info("Deleted object from scene");return target.object.id}catch(error){log.info("Delete showcase object error",error);return}}log.error("Target object is undefined");return}))}function disposeModel(target){return __awaiter(this,void 0,void 0,(function*(){log.info("disposeModel()",target);if(target){try{removeTransformControls();target.node.stop();selectedObject=null;const removedObject=_3DXObjects.find((obj=>obj.object.id==target.object.id));log.info("removedObjects",removedObject);const filteredRenderedObjects=_3DXObjects.filter((obj=>obj.object.id!==target.object.id));_3DXObjects=filteredRenderedObjects;log.info("Deleted object from scene");dispatchSpaceEvent(SPACE_EVENTS.MODEL_DISPOSED,{model:removedObject});return target.object.id}catch(error){log.info("Delete showcase model error",error);return}}log.error("Target is undefined");return}))}function disposeAllModels(){return __awaiter(this,void 0,void 0,(function*(){log.info("disposeAllModels()");try{if(_3DXObjects&&_3DXObjects.length>0){removeTransformControls();selectedObject=null;const modelIds=[];for(let i=0;i<_3DXObjects.length;i++){_3DXObjects[i].node.stop();modelIds.push(_3DXObjects[i].object.id)}_3DXObjects=[];dispatchSpaceEvent(SPACE_EVENTS.MODEL_DISPOSED,{model:_3DXObjects});return modelIds}}catch(error){log.error("disposeAllModels error ",error)}}))}function deleteMediaScreen(mediaScreenId){return __awaiter(this,void 0,void 0,(function*(){log.info("_3DXObjects",_3DXObjects);log.info("mediaScreenId",mediaScreenId);let selectedMediaScreen=_3DXObjects.find((obj=>obj.object.id===mediaScreenId&&obj.type==="FRAME"));log.info(selectedMediaScreen);const id=yield deleteObjectFromSpace(selectedMediaScreen);return id}))}function setLibrary(libraryModels){return __awaiter(this,void 0,void 0,(function*(){_assetLibrary=libraryModels;log.info("_assetLibrary",_assetLibrary);return _assetLibrary}))}function getLibrary(refetch=false){return __awaiter(this,void 0,void 0,(function*(){if(refetch&&_assetLibrary.length!=0){try{const response=yield _api.get(`/s3/file.json`);log.info("S3 response is: ",response);if(response.data.status=="success"){const objects=response.data.data;_assetLibrary=objects;return _assetLibrary}return}catch(error){log.info("Error! Failed to fetch data",error);return}}log.info("_assetLibrary",_assetLibrary);return _assetLibrary}))}function waitFor(conditionFunction,maxRetries){let retries=0;return new Promise((function(resolve,reject){function checkCondition(){if(conditionFunction()){resolve()}else if(retries<maxRetries){retries++;setTimeout(checkCondition,1e3)}else{log.info("Maximum retries reached");reject()}}checkCondition()}))}function isObjectRendered(objectId){const object=_3DXObjects.find((obj=>obj.object.id===objectId));if(object!==undefined){return true}return false}function getPrioritizedParam(url){const urlObj=new URL(url);let prioritizedParam=null;const pairs=urlObj.search.slice(1).split("&");for(const pair of pairs){const param=pair.split("=")[0];if((param==="objectId"||param==="tag"||param==="sweep")&&!prioritizedParam){prioritizedParam=param}}return prioritizedParam}function handleParamValuesInSpaceUrl(url){return __awaiter(this,void 0,void 0,(function*(){log.info("handleParamValuesInSpaceUrl()");log.info("space URL: ",url);const prioritizedParam=getFirstMatchingQueryParam(url);const spaceUrl=new URL(url);const paramValue=spaceUrl.searchParams.get(prioritizedParam);if(prioritizedParam==="sweepId"){moveToSweep(paramValue)}else if(prioritizedParam==="tagId"){gotoTag(paramValue)}else{log.info("No param passed for tag, sweep");return}}))}function getFirstMatchingQueryParam(url){const urlObj=new URL(url);let prioritizedParam=null;const pairs=urlObj.search.slice(1).split("&");for(const pair of pairs){const param=pair.split("=")[0];if((param==="tagId"||param==="sweepId")&&!prioritizedParam){prioritizedParam=param}}return prioritizedParam}function getNearestSweepFromObject(objectId){const target=_3DXObjects.find((obj=>obj.object.id===objectId));let closestIndex=0;let lastDistance;if(target){log.info("TARGET",target);const location=target.node.position;log.info("Target position: ",location);for(let i=0;i<sweeps.length;i++){const distance=calculateDistance(location,sweeps[i].position);log.info("Sweep positions: ",sweeps[i].position);log.info("distance: ",distance);if(!lastDistance){lastDistance=distance}if(distance<lastDistance){lastDistance=distance;closestIndex=i}}if(closestIndex){log.info("Closest Sweep:",sweeps[closestIndex]);log.info("Closest Sweep index:",closestIndex);return{sweepId:sweeps[closestIndex].id,index:closestIndex}}else{log.info("No sweeps found");return}}log.error("Failed to find object");return}function getNearestSweepFromUnrenderedObject(objectId){const target=_unrenderedObjects.find((obj=>obj.id===objectId));let closestIndex=0;let lastDistance;if(target){const location=target.object_position;log.info("Target position: ",location);for(let i=0;i<sweeps.length;i++){const distance=calculateDistance(location,sweeps[i].position);log.info("Sweep positions: ",sweeps[i].position);log.info("distance: ",distance);if(!lastDistance){lastDistance=distance}if(distance<lastDistance){lastDistance=distance;closestIndex=i}}if(closestIndex){log.info("Closest Sweep:",sweeps[closestIndex]);log.info("Closest Sweep index:",closestIndex);return{sweepId:sweeps[closestIndex].id,index:closestIndex}}else{log.info("No sweeps found");return}}log.error("Failed to find object");return}function goToUnrendered3dx(objectId){return __awaiter(this,void 0,void 0,(function*(){const neareastSweep=getNearestSweepFromUnrenderedObject(objectId);if(neareastSweep){yield moveToSweep(neareastSweep.sweepId)}log.info("Failed to find the nearest sweep!");return}))}function rotateCameraToObject(objectCoord){return __awaiter(this,void 0,void 0,(function*(){const d={x:objectCoord.x-_currentCameraPose.position.x,y:objectCoord.y-_currentCameraPose.position.y,z:objectCoord.z-_currentCameraPose.position.z};const yaw=Math.atan2(d.y,d.x);const distanceXY=Math.sqrt(d.x*d.x+d.y*d.y);const pitch=Math.atan2(-d.z,distanceXY);const yawDegrees=yaw*(180/Math.PI);const pitchDegrees=pitch*(180/Math.PI);yield _atwin.Camera.rotate(yawDegrees,pitchDegrees);log.info(`Yaw: ${yaw} and pitch: ${pitch}`)}))}function goTo3dx(objectId){return __awaiter(this,void 0,void 0,(function*(){log.info("Object ID: ",objectId);const neareastSweep=getNearestSweepFromObject(objectId);const target=_3DXObjects.find((obj=>obj.object.id===objectId));if(neareastSweep){yield moveToSweep(neareastSweep.sweepId);yield waitFor((()=>_currentSweep.id===neareastSweep.sweepId),5);yield rotateCameraToObject(target.object.object_position)}log.info("Failed to find the nearest sweep!");return}))}function goToModel(objectId,iframeId){return __awaiter(this,void 0,void 0,(function*(){const target=_3DXObjects.find((obj=>obj.object.id===objectId||obj.object.media_viewer_id===objectId));if(target){const noBillboardTag=target.node.id}log.info("goToModel ",target);if(target.node.position.x||target.node.position.y||target.node.position.z){goToPosition(target.node.position,iframeId)}else if(target.object.object_position){goToPosition(target.object.object_position,iframeId)}else{log.error("Failed to navigate to the model. Position is undefined")}}))}function goToParticipant(participantId){return __awaiter(this,void 0,void 0,(function*(){const participant=_meetingParticipants.find((participant=>participant.id==participantId));log.info("participant",participant);if(participant){goToPosition(participant.position)}}))}function goToPosition(pos,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;log.info("goToPosition",pos);sdk.Tag.add({anchorPosition:{x:pos.x,y:pos.y,z:pos.z},stemVector:{x:0,y:0,z:0},opacity:0,stemVisible:false}).then((newSid=>{log.info("tags list",_tags);log.info("tag new SID",newSid);sdk.Mattertag.navigateToTag(newSid[0],sdk.Mattertag.Transition.INSTANT).then((()=>__awaiter(this,void 0,void 0,(function*(){yield sdk.Tag.remove(newSid[0]);yield sdk.Camera.rotate(-10,10)}))));log.info("tags list",_tags)}));return pos}))}function showMinimap(){minimap.showMinimap()}function hideMinimap(){minimap.hideMinimap()}function getMapConfig(){log.info("getMapConfig()");if(_mpConfig&&_mpConfig.mapConfig){return _mpConfig.mapConfig}}function createNavigationControlComponent(){if(_isNavigationComponentCreated&&!_mpConfig.multispace){log.info("navigation control component already created");return}_navigationInputNode=_sceneObject.addNode();_navigationComponent=_navigationInputNode.addComponent("mp.input");_navigationInputNode.start();_isNavigationComponentCreated=true}function toggleSpaceNavigation(state=true){if(!_navigationComponent){log.error("_navigationComponent is undefined");return}_navigationComponent.inputs.userNavigationEnabled=state}function drawPath(vertices,options){return __awaiter(this,void 0,void 0,(function*(){console.log("DRAW VERTIECE",vertices);if(!vertices||vertices.length<=0){log.error("vertices array is empty or undefined");return}try{const lineNode=_tubes.addNode();if(options){options.path=vertices}else{options={path:vertices}}options.visible=true;options.node=lineNode;options.tubes=_tubes;options.active=true;options.renderPolygonOnAdd=false;const lineComponent=lineNode.addComponent(tubeLineType,options);lineNode.start();if(!_currentPathfindingTubeline){const lineObj={};lineObj.id=Number.parseInt(uid.rnd());lineObj.object_type="TUBELINE";lineObj.name=`tubeline-${uid.rnd()}`;lineObj.created_on=(new Date).toDateString();lineObj.user_id=_userId;const showcaseObj=createIShowcaseObjectData(lineObj);_tubes.addInputPath(lineComponent,"path",`pathLine_${showcaseObj.id}`);const newObj={object:showcaseObj,node:lineNode,component:lineComponent,type:"TUBELINE"};_3DXObjects.push(newObj);_currentPathfindingTubeline=newObj}else{const id=_currentPathfindingTubeline.object.id;setPathLine(id,vertices)}}catch(error){log.error("Error rendering line ",error)}}))}function setPathLine(id,path){if(!id){log.error("id is undefined");return}if(!path||path.length<=0){log.error("Path is empty or undefined");return}if(!_tubeLinePath){for(const{desc:desc,path:path}of _tubes.pathIterator()){if(desc.id===`pathLine_${id}`){_tubeLinePath=path}}if(!_tubeLinePath){log.error("No mathching input path with this id");return}}try{_tubeLinePath.set(path)}catch(error){log.error("Failed to update tube path ",error)}}function setPathLineOptions(id,options){if(!options){log.error("Path is empty or undefined");return}if(id){if(!_pathLineOptions){for(const{desc:desc,path:path}of _tubes.pathIterator()){if(desc.id===`pathLineOptions_${id}`){_pathLineOptions=path}}if(!_pathLineOptions){log.error("No mathching input path with this id");return}}try{_pathLineOptions.set(options)}catch(error){log.error("Failed to update tube path ",error)}}else{if(_thisVertexComponent){Object.entries(options).forEach((([key,value])=>{_thisVertexComponent.inputs[key]=value}))}}}function disposePathLine(){if(!_currentPathfindingTubeline){log.error("_currentPathfindingTubeline is undefined");return}disposeModel(_currentPathfindingTubeline);_currentPathfindingTubeline=undefined}function getCurrentTubeLine(){return _currentPathfindingTubeline}function renderPath(vertices,options){if(!vertices||vertices.length<=0){log.error("vertices array is empty or undefined");return}try{const lineNode=_tubes.addNode();if(options){options.path=vertices}else{options={path:vertices}}if(options.id&&_3DXObjects.find((obj=>obj.object.id==options.id))){setPathLineOptions(options.id,options)}else{options.visible=true;options.node=lineNode;options.tubes=_tubes;options.active=true;const componentType=options.lineComponentType?options.lineComponentType:tubeLineType;const lineComponent=lineNode.addComponent(componentType,options);lineNode.start();const lineObj={};lineObj.id=Number.parseInt(uid.rnd());lineObj.object_type="PATH";lineObj.name=`tubeline-${uid.rnd()}`;lineObj.created_on=(new Date).toDateString();lineObj.user_id=_userId;lineObj.object_uuid=options.uuid;const showcaseObj=createIShowcaseObjectData(lineObj);_tubes.addInputPath(lineComponent,"path",`pathLine_${showcaseObj.id}`);_tubes.addInputPath(lineComponent,"path",`pathLineOptions_${showcaseObj.id}`);const newObj={object:showcaseObj,node:lineNode,component:lineComponent,type:"PATH"};_3DXObjects.push(newObj);_currentPathfindingTubeline=newObj}}catch(error){log.error("Error rendering line ",error)}}function renderPolygon(payload,options){log.info("__@ renderPolygon: ",payload,options,typeof payload,Array.isArray(payload));if(!payload){log.error("Payload is undefined");return}if(Array.isArray(payload)){if(payload.length<=0){log.error("path is empty or undefined");return}}let polyNode;let polyComponent;const polyObj={};polyObj.id=Number.parseInt(uid.rnd());polyObj.object_type="POLYGON";polyObj.name=`floor-${polyObj.id}`;polyObj.created_on=(new Date).toDateString();polyObj.user_id=_userId;const showcaseObj=createIShowcaseObjectData(polyObj);if(Array.isArray(payload)){showcaseObj.object_position=payload[0];if(options){options.path=payload}else{options={path:payload}}options.excludeHiddenWallsFromCalculation=false;if(_wallBaseHeight){options.wallHeight=_wallBaseHeight}log.info("_currentPolygon",_currentPolygon);log.info("renderPolygon array type currentPolygon ",_currentPolygon);if(!_currentPolygon){try{polyNode=_sceneObject.addNode();polyComponent=polyNode.addComponent(bufferGeometryType,options);polyNode.start();_sceneObject.addInputPath(polyComponent,"path",`path_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"visible",`visible_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"polygonData",`polygonData_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"wallHeight",`wallHeight_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"drawingMode",`drawingMode_${showcaseObj.id}`);const newObj={object:showcaseObj,node:polyNode,component:polyComponent,type:"POLYGON"};const eventPath=_sceneObject.addEmitPath(polyComponent,"polygonclicked");_sceneObject.spyOnEvent(new PolygonClickSpy(eventPath,showcaseObj,polyNode,polyComponent,dispatchSpaceEvent));newObj.object.object_data.json_data={path:payload};_currentPolygon=newObj;if(!_currentPolygon.object.object_data.uuid){_currentPolygon.object.object_data.uuid=generateUUID()}log.info("_currentPolygon ",_currentPolygon);log.info("options.drawingMode ",options.drawingMode);if(options.drawingMode=="window"){log.info("index",options.objectIndex);if(!_3DXObjects[options.objectIndex].children){_3DXObjects[options.objectIndex].children=[]}log.info("newObj",newObj);_3DXObjects[options.objectIndex].children.push(Object.assign(Object.assign({},newObj),{index:options.targetIndex,wallUUID:options.targetUUID}))}else{_3DXObjects.push(newObj)}}catch(error){log.error("Error renderPolygon ",error)}}else{const index=_3DXObjects.findIndex((item=>item.object.id==_currentPolygon.object.id));if(!_currentPolygon.object.object_data.uuid){_currentPolygon.object.object_data.uuid=generateUUID()}_currentPolygon.object.object_data.json_data.path=payload;_3DXObjects[index]=_currentPolygon;if(payload.length>=3){console.log(" _3DXObjects[index] ",_3DXObjects[index]);if(_pathConfig.lineTypeComponentConfig.drawingMode!="window"){setPolygonPath(_3DXObjects[index].object.id,payload);if(options.wallHeight){setPolygonWalHeightPath(_3DXObjects[index].object.id,options.wallHeight)}}else{const polyData=options.polygonData;log.info("polyData ",polyData);const wallIndex=polyData.walls.findIndex((wall=>wall.uuid==options.targetUUID));log.info("wallIndex ",wallIndex);if(wallIndex!=undefined){log.info("setPolygonPath window ",wallIndex);log.info("window, wallInex, targetIndex, payload",polyData,wallIndex,options.targetIndex,payload);polyData.walls[wallIndex].windows[options.targetIndex].path=payload;if(!getIsEditWindow()){setPolygonPath(_3DXObjects[index].object.id,payload)}else{setPolygonDataPath(_3DXObjects[index].object.id,polyData)}}}}}}else{if(!options){options={}}options.excludeHiddenWallsFromCalculation=false;const targetPolygon=_3DXObjects.find((obj=>obj.object.object_data.uuid==payload.uuid));if(!targetPolygon){log.info("Creating new partition");options.path=payload.polygon_json.path;options.uuid=payload.uuid;options.polygonData=payload.polygon_json;options.wallData=payload.polygon_json.walls;options.floorData=payload.polygon_json.floor;options.visible=payload.polygon_json.options?payload.polygon_json.options.is_visible:true;options.floorData=payload.polygon_json.floor;polyNode=_sceneObject.addNode();polyComponent=polyNode.addComponent(bufferGeometryType,options);polyNode.start();showcaseObj.object_data.uuid=payload.uuid;showcaseObj.object_data.name=payload.name;showcaseObj.object_data.json_data=payload.polygon_json;if(!showcaseObj.object_position){showcaseObj.object_position=payload.polygon_json.path[0]}log.info("options.drawingMode ",options.drawingMode);_sceneObject.addInputPath(polyComponent,"path",`path_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"wallData",`wallData_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"polygonData",`polygonData_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"wallHeight",`wallHeight_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"drawingMode",`drawingMode_${showcaseObj.id}`);const eventPath=_sceneObject.addEmitPath(polyComponent,"polygonclicked");_sceneObject.spyOnEvent(new PolygonClickSpy(eventPath,showcaseObj,polyNode,polyComponent,dispatchSpaceEvent));const newObj={object:showcaseObj,node:polyNode,component:polyComponent,type:"POLYGON"};if(options.drawingMode=="window"){const index=_3DXObjects.indexOf(targetPolygon);_3DXObjects[index].children.push({component:polyComponent,node:polyNode,index:options.targetIndex})}else{_3DXObjects.push(newObj)}}else{log.info("payload",payload);const index=_3DXObjects.findIndex((item=>item.object.object_data.uuid==payload.uuid));if(payload.polygon_json.path.length>=3){console.log(" _3DXObjects[index] ",_3DXObjects[index]);setPolygonDataPath(_3DXObjects[index].object.id,payload.polygon_json);setPolygonWalHeightPath(_3DXObjects[index].object.id,payload.polygon_json.walls[0].wall_height)}}}return showcaseObj}function setPolygonPath(id,vertices){log.info("setPolygonPath()");let polygonShapePath;if(!id||!vertices||vertices.length<=0){log.error("id or vertices is empty or undefined");return}if(!_polygonShapePath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`path_${id}`){polygonShapePath=path;_polygonShapePath=polygonShapePath}}if(!polygonShapePath){log.error("No mathching input path with this id");return}}log.info("_polygonShapePath ",_polygonShapePath);_polygonShapePath.set(vertices);return}function setPolygonDrawingMode(id,mode){log.info("setPolygonDrawingMode()");let polygonDrawingModePath;if(!id||!mode){log.error("id or vertices is empty or undefined");return}if(!_polygonDrawingModePath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`drawingMode_${id}`){polygonDrawingModePath=path;_polygonDrawingModePath=polygonDrawingModePath}}if(!polygonDrawingModePath){log.error("No mathching input path with this id");return}}log.info("_polygonDrawingModePath ",_polygonDrawingModePath);_polygonDrawingModePath.set(mode);return}function setPolygonWallDataPath(id,vertices){log.info("setPolygonWallDataPath()");let polygonWallDataPath;if(!id||!vertices||vertices.length<=0){log.error("id or vertices is empty or undefined");return}if(!_polygonWallDataPath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`wallData_${id}`){polygonWallDataPath=path;_polygonWallDataPath=polygonWallDataPath}}if(!polygonWallDataPath){log.error("No mathching input path with this id");return}}log.info("_polygonWallDataPath ",_polygonShapePath);_polygonWallDataPath.set(vertices);return}function setPolygonDataPath(id,payload){log.info("setPolygonDataPath()");let polygonWallDataPath;if(!id||!payload){log.error("id or vertices is empty or undefined");return}if(!_polygonDataPath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`polygonData_${id}`){polygonWallDataPath=path;_polygonDataPath=polygonWallDataPath}}if(!_polygonDataPath){log.error("No mathching input path with this id");return}}log.info("_polygonDataPath ",_polygonDataPath);_polygonDataPath.set(payload);return}function setPolygonWalHeightPath(id,payload){log.info("setPolygonWalHeightPath()");let polygonWallHeightPath;if(!id||!payload){log.error("id or payload is empty or undefined");return}if(!_polygonWallHeightPath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`wallHeight_${id}`){polygonWallHeightPath=path;_polygonWallHeightPath=polygonWallHeightPath}}if(!_polygonWallHeightPath){log.error("No mathching input path with this id");return}}log.info("_polygonDataPath ",_polygonWallHeightPath);_polygonWallHeightPath.set(payload);return}function setPolygonFloorLevelPath(id,payload){log.info("setPolygonWalHeightPath()");let polygonWallHeightPath;if(!id||!payload){log.error("id or payload is empty or undefined");return}if(!_polygonWallHeightPath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`wallHeight_${id}`){polygonWallHeightPath=path;_polygonWallHeightPath=polygonWallHeightPath}}if(!_polygonWallHeightPath){log.error("No mathching input path with this id");return}}log.info("_polygonDataPath ",_polygonWallHeightPath);_polygonWallHeightPath.set(payload);return}function createVerticeClickPath(){_verticeEmitPath=_sceneObject.addPath({id:"verticeClickSpy",type:_atwin.Scene.PathType.EMIT,node:_navigationInputNode,component:_navigationComponent,property:"INTERACTION.CLICK"})}function addVerticeControls(component,index){const currentMode=getViewMode();let isFloorPlanMode=false;if(currentMode==_atwin.Mode.Mode.FLOORPLAN){isFloorPlanMode=true}const verticeComponent=_thisVerticesNode.addComponent(_pathConfig.verticeType,{index:index,position:Object.assign({},component.inputs.path[index]),ringVisibility:isFloorPlanMode});_verticeComponentsCollection.push(verticeComponent);const editVertice=_sceneObject.addEmitPath(verticeComponent,"changed");_sceneObject.spyOnEvent({path:editVertice,onEvent(data){console.log("verticeComponent chamge",data.position);if(data.collider!==null){const nodeIterator=_tubes.nodeIterator();let nodes=nodeIterator.next();while(!nodes.done){const componentIterator=nodes.value.componentIterator();let component=componentIterator.next();component.value.inputs.collider=data.collider;nodes=nodeIterator.next()}if(isToolbarFeatureEnabled("pipe")){pathHistory.addToHistory(_thisVertexPath)}}_activeVertex.inputs.active=false;log.info("setPolygonPath _pathConfig",_pathConfig);log.info("setPolygonPath not window");if(_pathConfig.lineTypeComponentConfig.drawingMode!="window"){setPolygonPath(_currentPolygon.object.id,data.position)}else if(_currentPolygon&&_pathConfig.lineTypeComponentConfig.drawingMode=="window"){log.info("addVerticeControls window",_pathConfig.lineTypeComponentConfig);log.info("addVerticeControls _polygonDataPath",_polygonDataPath);const polyData=_pathConfig.lineTypeComponentConfig.polygonData;const parentIndex=_pathConfig.lineTypeComponentConfig.objectIndex;const wallIndex=polyData.walls.findIndex((wall=>wall.uuid==_pathConfig.lineTypeComponentConfig.targetUUID));if(wallIndex!=undefined){polyData.walls[wallIndex].windows[_pathConfig.lineTypeComponentConfig.targetIndex].path=data.position;setPolygonDataPath(_currentPolygon.object.id,polyData);if(parentIndex!==undefined&&_3DXObjects[parentIndex]){_3DXObjects[parentIndex].object.object_data.json_data=polyData}}}_activeVertex.inputs.path[data.index]=data.position;_activeVertex.inputs.active=true}})}function createVerticeControls(component,isDeleting=false){if(!component){log.error("component is undefined");return}if(_thisVerticesNode){_thisVerticesNode.stop()}let verticeNode=_sceneObject.addNode();_thisVerticesNode=verticeNode;let sections=component.inputs.path.length-1;for(let i=0;i<=sections;i++){addVerticeControls(component,i)}if(_currentPolygon){if(isDeleting&&component.inputs.path.length<=2){_currentPolygon.component.groupedMesh.visible=false}else if(isDeleting==false&&component.inputs.path.length>2){log.info(" _currentPolygon.component ",_currentPolygon.component);_currentPolygon.component.groupedMesh.visible=true}}verticeNode.start()}function createVertexPoints(position,redrawing=false){log.info("createVertexPoints()");if(!position){log.error("Position is undefined");return}const floorGroundLevelY=getFloorGroundLevelY();console.log("The ground level Y-coordinate for floor ",floorGroundLevelY);const viewMode=new Set([_atwin.Mode.Mode.DOLLHOUSE,_atwin.Mode.Mode.FLOORPLAN]);if(viewMode.has(getViewMode())){position.y=floorGroundLevelY;console.log("Snapping to floor level at Y:",position.y)}if(_thisVertexNode===undefined){log.info("_thisVertexNode is undefined. Adding vertex...");let start=Object.assign({},position);log.info("_floorBaseHeight",_floorBaseHeight);if(_floorBaseHeight!==undefined){log.info("Using _floorBaseHeight");if(getDrawingMode()=="partition"){start.y=_floorBaseHeight}}const r=x=>Math.round(x*100)/100;let thisName="x"+r(start.x)+"y"+r(start.y)+"z"+r(start.z);if(redrawing){thisName=`${thisName}-${uid.rnd()}`}[_thisVertexNode,_thisVertexComponent]=addVertex(thisName,[start]);_thisVertexPath.push(start);if(visualize){_activeVertex.inputs.collider=false}_vertexConnectiveComponentCollection.push(_thisVertexComponent);_vertexConnectiveNodeCollection.push(_thisVertexNode);log.info("_thisVertexNode ",_thisVertexNode);createVerticeControls(_thisVertexComponent)}else{log.info("_thisVertexNode is defined");log.info("before position ",position);log.info("before _floorBaseHeight ",_floorBaseHeight);let point=Object.assign({},position);if(_floorBaseHeight!==undefined){if(getDrawingMode()=="partition"){point={x:position.x,y:_floorBaseHeight,z:position.z}}}log.info("after position ",point);_thisVertexPath.push(Object.assign({},point));_thisVertexComponent.inputs.path=[..._thisVertexPath];createVerticeControls(_thisVertexComponent)}}function createVerticeClickSpy(){log.info("createVerticeClickSpy()");if(_isVerticeClickSpyCreated){log.info("Vertice click spy has already been created");return}const click_path=_sceneObject.addPath({id:"clicklistener",type:_atwin.Scene.PathType.EMIT,node:_navigationInputNode,component:_navigationComponent,property:"INTERACTION.CLICK"});const click_spy={path:click_path,onEvent(event_data){log.info("ClickSpy");log.info("isAltPressed ",isAltPressed);if(isAltPressed){if(_drawPolygonMode){createVertexPoints(_intersectionData.position);if(isToolbarFeatureEnabled("pipe")){pathHistory.addToHistory(_thisVertexPath)}if(isToolbarFeatureEnabled("roomCreation")){partitionHistory.addToHistory(_thisVertexPath)}dispatchSpaceEvent(SPACE_EVENTS.VERTEX_PLACED,{position:_intersectionData.position,path:_thisVertexPath})}}}};_sceneObject.spyOnEvent(click_spy);_isVerticeClickSpyCreated=true}function deleteVertex(index){log.info("deleteVertex()");if(!_thisVertexComponent){log.error("An active vertex component is required");return}if(!_thisVertexPath||_thisVertexPath.length<=0){log.error("Vertex path is empty or undefined");return}if(index!==undefined){log.info("_thisVertexPath before ",_thisVertexPath);_thisVertexPath=_thisVertexPath.slice(index,1);_thisVertexComponent.inputs.path=[..._thisVertexPath];log.info("_thisVertexPath after ",_thisVertexPath);createVerticeControls(_thisVertexComponent,true)}else{log.info("_thisVertexPath before ",_thisVertexPath);log.info("_thisVertexPath after ",_thisVertexPath);_thisVertexComponent.inputs.path=[..._thisVertexPath];createVerticeControls(_thisVertexComponent,true)}}function enableVerticeControls(component){log.info("enableVerticeControls()");if(!component){log.error("Component is undefined");return}if(_thisVertexComponent==component){log.info("This partition is already in edit mode.");return}if(!component.inputs.path||component.inputs.path.length<=0){log.error("Path of component is empty or undefined");return}const currenPath=[...component.inputs.path];const last=currenPath.pop();log.info("currenPath ",currenPath);_thisVertexPath=[...currenPath];const first=_thisVertexPath[0];const r=x=>Math.round(x*100)/100;let name="x"+r(first.x)+"y"+r(first.y)+"z"+r(first.z);name=`${name}-${uid.rnd()}`;[_thisVertexNode,_thisVertexComponent]=addVertex(name,_thisVertexPath);log.info("_thisVertexPath ",_thisVertexPath);if(visualize){_activeVertex.inputs.collider=false}_thisVertexPath.push(Object.assign({},last));_thisVertexComponent.inputs.path=[..._thisVertexPath];createVerticeControls(_thisVertexComponent);if(isToolbarFeatureEnabled("pipe")){pathHistory.setCurrent(_thisVertexPath)}if(isToolbarFeatureEnabled("roomCreation")){partitionHistory.setCurrent(_thisVertexPath)}}function getVertexPath(){log.info("getVertexPath()");return _thisVertexPath}function deleteEdge(component,endPoint){log.info("deletePolygonLine()");if(!component){log.error("Component is undefined");return}if(!endPoint){log.error("Component is undefined");return}if(!component.inputs.path||component.inputs.path.length<=0){log.error("Path of component is empty or undefined");return}const index=component.inputs.path.findIndex((path=>isEqual(path,endPoint)));if(index!=undefined){const newArr=component.inputs.path.filter(((_,i)=>i!==index));console.log("newArr",newArr);component.inputs.path=[...newArr];return}log.error("No matching coordinates in the path");return}function setDrawingConfig(config){log.info("setDrawingConfig() ",config);if(!config){log.error("config parameter is undefined");return}if(config.lineType)_pathConfig.lineType=config.lineType;if(config.verticeType)_pathConfig.verticeType=config.verticeType;if(config.lineTypeComponentConfig)_pathConfig.lineTypeComponentConfig=config.lineTypeComponentConfig;if(config.verticeTypeComponentConfig)_pathConfig.verticeTypeComponentConfig=config.verticeTypeComponentConfig}function getDrawingConfig(){log.info("getDrawingConfig() ",_pathConfig);return _pathConfig}function resetDrawingConfig(){log.info("resetDrawingConfig() ",_pathConfig);_pathConfig={lineType:tubeLineType,verticeType:verticeType,lineTypeComponentConfig:{renderPolygonOnAdd:true}}}function startDraw(config){if(config){if(config.lineType)_pathConfig.lineType=config.lineType;if(config.verticeType)_pathConfig.verticeType=config.verticeType;if(config.lineTypeComponentConfig)_pathConfig.lineTypeComponentConfig=config.lineTypeComponentConfig;if(config.verticeTypeComponentConfig)_pathConfig.verticeTypeComponentConfig=config.verticeTypeComponentConfig}_atwin.Measurements.toggleMode(false);_atwin.Settings.update("space_search",false);editMode=true;_atwin.Settings.update("features/mattertags",false);if(_thisVertexNode!==undefined){_thisVertexComponent.inputs.active=false}_drawPolygonMode=true;_atwin.Pointer.editTexture("targetPointer");_thisVertexNode=undefined;_thisVertexComponent=undefined;_thisVertexPath=new Array}function exitDraw(){_atwin.Settings.update("space_search",true);editMode=false;_atwin.Settings.update("features/mattertags",true);if(_thisVerticesNode!==undefined){_thisVerticesNode.stop()}if(visualize&&_thisVertexNode){_thisVertexComponent.inputs.collider=true}toggleSpaceNavigation(true);_drawPolygonMode=false;_currentPolygon=undefined;_polygonShapePath=undefined;_polygonWallDataPath=undefined;_polygonDataPath=undefined;_polygonWallHeightPath=undefined;_pathLineOptions=undefined;_tubeLinePath=undefined;_verticeComponentsCollection=[];_atwin.Pointer.resetTexture()}function cancelDraw(){exitDraw();if(_thisVertexNode!==undefined){_thisVertexNode.stop()}if(_thisVerticesNode!==undefined){_thisVerticesNode.stop()}if(isToolbarFeatureEnabled("pipe")){pathHistory.clearHistory()}if(isToolbarFeatureEnabled("roomCreation")){partitionHistory.clearHistory()}}function setCurrentPolygon(polygonData){_currentPolygon=polygonData}function getCurrentPolygon(){return _currentPolygon}function addVertex(name,path){console.log("addVertex()");let drawNode=_tubes.addNode(name);const options=Object.assign({name:name,label:"Connecting tube"+_tubeCounter++,node:drawNode,tubes:_tubes,path:path,active:true},_pathConfig.lineTypeComponentConfig);log.info("addVertex options",options);let drawComponent=drawNode.addComponent(_pathConfig.lineType,options);drawNode.start();console.log("drawComponent ",drawComponent);const _activeVertexPath=_tubes.addEmitPath(drawComponent,"active");_tubes.spyOnEvent({path:_activeVertexPath,onEvent(eventData){if(editMode){log.info("_activeVertexPath event triggered");if(_activeVertex!=eventData.component){_activeVertex.inputs.active=false;_activeVertex=eventData.component;_activeVertex.inputs.active=true}createVerticeControls(eventData.component)}}});const tubeDestroyed=_tubes.addEmitPath(drawComponent,"destroyed");_tubes.spyOnEvent({path:tubeDestroyed,onEvent(eventData){if(_thisVerticesNode!==undefined){_thisVerticesNode.stop()}if(drawMode){exitDraw()}}});if(_activeVertex){_activeVertex.inputs.active=false;if(_thisVerticesNode!==undefined){_thisVerticesNode.stop();_thisVerticesNode=undefined}}_activeVertex=drawComponent;return[drawNode,drawComponent]}function toggleMeshChildrenVisibility(component,name,visible){if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}component.mesh.children.forEach((child=>{if(child.name==name){child.visible=visible!==undefined?visible:!child.visible;return child.visible}}))}function setMeshChildrenProperty(component,name,key,value){if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}if(!key){log.error("key is undefined");return}component.mesh.children.forEach((child=>{if(child.name==name){if(child[key]!==undefined){child[key]=value}}}))}function setMeshChildrenMaterialProperty(component,name,key,value){if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}if(!key){log.error("key is undefined");return}component.mesh.children.forEach((child=>{if(child.name==name){if(child.material[key]!==undefined){const{r:r,g:g,b:b}=useHexToRgb(value);child.material[key].r=r;child.material[key].g=g;child.material[key].b=b}}}))}function toggleWallVisibility(component,name,visible){if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}const state=toggleMeshChildrenVisibility(component,name,visible);const wallLabelName=name.replace("wall","wallLabel");toggleMeshChildrenVisibility(component,wallLabelName,visible);return state}function toggleFloorVisibility(component,name,visible){log.info("TEST toggleFloorVisibility: ",component,name);if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}const state=toggleMeshChildrenVisibility(component,name,visible);const edgeCount=component.inputs.path.length;if(edgeCount!==undefined){let edgeLabelNames=[];const parts=name.split("_");if(parts.length>1){const uuid=parts[0];for(let index=0;index<edgeCount;index++){toggleMeshChildrenVisibility(component,`${uuid}_edgeLabel-${index}`,visible)}}else{for(let index=0;index<edgeCount;index++){edgeLabelNames.push(`edgeLabel-${index}`);toggleMeshChildrenVisibility(component,`edgeLabel-${index}`,visible)}}}return state}function getChildrenOfModel(component){if(!component){log.error("Component is undefined");return}const children=component.mesh.children;return children}function toggleVerticeRingVisibility(visibility=false){if(!_verticeComponentsCollection||_verticeComponentsCollection.length<=0){log.error("No actively visible vertices to invoke this function");return}try{_verticeComponentsCollection.forEach((component=>{if(component.mesh.children){component.mesh.children.forEach((comp=>{if(comp.name=="ring"){comp.visible=visibility}}))}}))}catch(error){log.error("Error toggling ring visibility ",error)}}function setPolygonFloorOffset(offset){log.info("setPolygonFloorOffset()");if(offset==undefined){log.error("Parameter offset is undefined");return}if(typeof offset!=="number"){log.error("Parameter offset is not a number");return}_polygonFloorOffset=offset}function getPolygonFloorOffset(){log.info("getPolygonFloorOffset()");return _polygonFloorOffset}function setFloorBaseHeight(baseHeight){log.info("setFloorBaseHeight()");if(!baseHeight||isNaN(baseHeight)){log.error("baseHeight is undefined or NaN");return}_floorBaseHeight=baseHeight;_offsetedBaseHeight=_floorBaseHeight+_polygonFloorOffset}function getFloorBaseHeight(){return _floorBaseHeight}function clearFloorBaseHeight(){_floorBaseHeight=undefined;_offsetedBaseHeight=undefined}function setWallBaseHeight(baseHeight){log.info("setWallBaseHeight()");if(!baseHeight||isNaN(baseHeight)){log.error("baseHeight is undefined or NaN");return}_wallBaseHeight=baseHeight}function getWallBaseHeight(){return _wallBaseHeight}function clearWallBaseHeight(){_wallBaseHeight=undefined}function undoDrawAction(){const path=partitionHistory.undo();console.log("undoDrawAction",path,partitionHistory.getAllHistory(),partitionHistory.canUndo(),partitionHistory.canRedo());handleHistoryUndoRedoAction(path)}function redoDrawAction(){const path=partitionHistory.redo();handleHistoryUndoRedoAction(path)}function handleHistoryUndoRedoAction(path){if(_currentPolygon&&_pathConfig.lineTypeComponentConfig.drawingMode=="window"&&getIsEditWindow()){const polyData=_pathConfig.lineTypeComponentConfig.polygonData;const parentIndex=_pathConfig.lineTypeComponentConfig.objectIndex;const wallIndex=polyData.walls.findIndex((wall=>wall.uuid==_pathConfig.lineTypeComponentConfig.targetUUID));if(wallIndex!=undefined){polyData.walls[wallIndex].windows[_pathConfig.lineTypeComponentConfig.targetIndex].path=path;setPolygonDataPath(_currentPolygon.object.id,polyData);if(parentIndex!==undefined&&_3DXObjects[parentIndex]){_3DXObjects[parentIndex].object.object_data.json_data=polyData;const partitionPayload={uuid:_3DXObjects[parentIndex].object.object_data.uuid,name:_3DXObjects[parentIndex].object.object_data.name,polygon_json:polyData};renderPolygon(partitionPayload)}}}_thisVertexComponent.inputs.path=path;createVerticeControls(_thisVertexComponent,true);toggleUndoRedoButtons(partitionHistory.canUndo(),partitionHistory.canRedo())}function handleKeyDown(event){if(event.ctrlKey){log.info("Ctrl key down");isCtrlPressed=true;toggleSpaceNavigation(false)}if(event.key=="Alt"){log.info("Alt key down");isAltPressed=true;toggleSpaceNavigation(false)}if(event.key=="F8"){log.info("F8 key down");const polygons=_3DXObjects.filter((obj=>obj.type=="POLYGON"||obj.type=="PATH"));if(polygons&&polygons.length>0){for(let i=0;i<polygons.length;i++){setModelVisibility(polygons[i].object.id)}}}if(event.shiftKey){log.info("Shift key down");isShiftPressed=true}if(isToolbarFeatureEnabled("pipe")){if(_isDrawPipe){if(event.ctrlKey&&event.key==="z"&&event.type==="keydown"){if(!pathHistory.canUndo())return;pipeForm.undoEventHandler()}if(event.ctrlKey&&event.key==="y"&&event.type==="keydown"){if(!pathHistory.canRedo())return;pipeForm.redoEventHandler()}}}if(isToolbarFeatureEnabled("roomCreation")){const isDrawing=getIsDrawing();if(isDrawing){if(event.ctrlKey&&event.key==="z"&&event.type==="keydown"){if(!partitionHistory.canUndo())return;undoDrawAction()}if(event.ctrlKey&&event.key==="y"&&event.type==="keydown"){if(!partitionHistory.canRedo())return;redoDrawAction()}}}if(isCtrlPressed)lastKeyPressed=event.key}function handleKeyUp(event){log.info("handleKeyUp() ",event);if(event.key==="Control"){log.info("Ctrl key up");isCtrlPressed=false;toggleSpaceNavigation(true)}if(event.key=="Alt"){log.info("Alt key up");isAltPressed=false;toggleSpaceNavigation(true)}if(event.key==="Shift"){log.info("Ctrl key up");isShiftPressed=false}}function setupKeybindingEventListeners(iframe){log.info("setupKeybindingEventListeners()");if(!_navigationInputNode||!_navigationComponent){log.info("Navigation node and component is undefined. Skipping key binding creation");return}iframe.contentDocument.body.addEventListener("keydown",handleKeyDown);iframe.contentDocument.body.addEventListener("keyup",handleKeyUp);window.addEventListener("keydown",handleKeyDown);window.addEventListener("keyup",handleKeyUp)}function initBimSettings(){var _a,_b,_c,_d,_e,_f,_g,_h,_j,_k,_l,_m,_o,_p;try{if(_currentSpace&&_currentSpace.json_data){const spaceJsonData=JSON.parse(_currentSpace.json_data);if((_a=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_a===void 0?void 0:_a.bim){log.info("spaceJsonData?.coordSystemCalibration?.bim",(_b=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_b===void 0?void 0:_b.bim);setCoordinateSystem((_c=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_c===void 0?void 0:_c.bim.coord_system);setScaleFactor((_d=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_d===void 0?void 0:_d.bim.scale_factor);setRotationUnit((_e=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_e===void 0?void 0:_e.bim.rotation_unit);setMeasurementUnit((_f=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_f===void 0?void 0:_f.bim.measurement_unit);setTempCoordinateSystem((_g=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_g===void 0?void 0:_g.bim.coord_system);setTempScaleFactor((_h=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_h===void 0?void 0:_h.bim.scale_factor);setTempRotationUnit((_j=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_j===void 0?void 0:_j.bim.rotation_unit);setTempMeasurementUnit((_k=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_k===void 0?void 0:_k.bim.measurement_unit);if((_l=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_l===void 0?void 0:_l.bim.project_base){setBasepoint((_m=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_m===void 0?void 0:_m.bim.project_base)}}if((_o=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_o===void 0?void 0:_o.bim.mp_project_base){console.log("THERE IS A BASEPOINT");const index=_3DXObjects.findIndex((obj=>obj.object.object_data.amazon_uri.includes("static/images/basepointmarker.png")));log.info("_3DXObjects",_3DXObjects[index],index);if(index!=-1){_3DXObjects[index].type="BASEPOINT"}setBasepointObjectPayload((_p=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_p===void 0?void 0:_p.bim.mp_project_base)}}}catch(error){log.error("initBimSettings error ",error)}}function initCustomMinimapSettings(){log.info("initCustomMinimapSettings()");if(_currentSpace&&_currentSpace.json_data){let data=_currentSpace.json_data;let json_data=typeof data==="string"?JSON.parse(data):data;if(!json_data.general_settings){setSelectedMap(MAP_OPTIONS.DEFAULT_MAP)}else{if(json_data.general_settings.minimap.type==MAP_OPTIONS.DEFAULT_MAP){setSelectedMap(MAP_OPTIONS.DEFAULT_MAP)}else if(json_data.general_settings.minimap.type==MAP_OPTIONS.CUSTOM_MAP){setSelectedMap(MAP_OPTIONS.CUSTOM_MAP)}}}}function setTagIcon(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== setTagIcon $",payload);const sdk=payload.iframeId?_atwinConnections[payload.iframeId]:_atwin;if(payload.iconName&&payload.iconName.trim()!==""){yield _tag.setTagIcon({sdk:sdk,tag:payload.tag,iconName:payload.iconName,iconUrl:payload.iconUrl,color:payload.color})}}))}function renderTag(payload,addTo_tags=true,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("=== renderTag $",payload);const sdk=iframeId?_atwinConnections[iframeId]:_atwin;const mpData=JSON.parse(JSON.stringify(payload.tag));const isTagSharing=_mpConfig.restrictionConfig?_mpConfig.restrictionConfig.isTagToggleSharing:true;const tagData=yield _tag.renderTag({tag:mpData,sdk:sdk,isTagSharing:isTagSharing});if(addTo_tags){const tag=addTag(tagData);log.info("tag added to _tags array",tag)}return tagData}))}function _renderTagPaneContent(){renderTagPaneContent()}function addTag(tagData){log.info("addTag",tagData);if(_isBasicDevApi){const labels=getLabels();if(!labels||labels.length===0){log.error("No labels")}const thisTag={};thisTag.id=Number.parseInt(uid.rnd());thisTag.tag_name=tagData.label;thisTag.showcase_id=_space.id;thisTag.floor_id=_currentFloor.sequence;thisTag.color_id=getTagColorCodeID(tagColors[0]);thisTag.json_data=tagData;thisTag.sid=tagData.id;thisTag.label=labels[0].id;thisTag.created_on=new Date(Date.now()+60*60*1e3).toLocaleString("sv-SE");_tags.push(thisTag);return thisTag}const thisTag={};thisTag.id=Number.parseInt(uid.rnd());thisTag.json_data=tagData;thisTag.created_on=new Date(Date.now()+60*60*1e3).toLocaleString("sv-SE");_tags.push(thisTag);return thisTag}function getMpTags(){log.info("=== getMpTags()",_tags);return _tags.map((i=>{if(typeof i.json_data==="string"){i.json_data=JSON.parse(i.json_data)}return i}))}function getTagDataCollection(){log.info("getTagDataCollection() ",_tagDataCollection);return _tagDataCollection}function disposeTag(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== disposeTag",payload);yield _tag.disposeTag({tagId:payload.tagId,sdk:_atwin,tags:_tags});const indx=_tags.findIndex((i=>i.json_data.id===payload.tagId));if(indx===-1){log.error("Tag not found");return null}const tag=_tags[indx];log.info("__@ tag found to be remove",tag);_tags.splice(indx,1)}))}function toggleVisibilityTag(payload){return __awaiter(this,void 0,void 0,(function*(){yield _tag.toggleTagVisibility({tagId:payload.tagId,sdk:_atwin,visibility:payload.visibility})}))}function getMpTag(tagId){log.info("=== getTag()",tagId);const tag=_tags.find((i=>i.json_data.id===tagId));if(!tag){log.error("Tag not found");log.info("=== _tags",_tags);return}return tag}function getTags(space){return __awaiter(this,void 0,void 0,(function*(){log.info("getTags()");try{const response=yield _api.get(`/v1/tags/showcase-id/${space.id}`);log.info("response",response);if(response.status===200){const tags=response.data.data;if(!tags){log.error("tags is undefined")}return tags}else{log.error("Custom Error: Unable to fetch tags")}}catch(error){log.error(error)}return null}))}function setTags(tags){return __awaiter(this,void 0,void 0,(function*(){log.info("setTags()",tags);_tags=tags.map((tag=>{if(typeof tag.json_data==="string"){tag.json_data=JSON.parse(tag.json_data)}tag.json_data.id=tag.json_data["sid"]?tag.json_data["sid"]:tag.json_data.id;return tag}));setPublicTags(_tags)}))}function gotoTag(tagId){return __awaiter(this,void 0,void 0,(function*(){log.info("gotoTag(tag: tag_id)",tagId);if(!tagId){log.error("tag is undefined");return}const tags=getMpTags();log.info("__tags",tags);try{yield _atwin.Mattertag.navigateToTag(tagId,_atwin.Mattertag.Transition.FLY)}catch(error){log.error(error)}}))}function tagStateSubscriber(){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ tagStateSubscriber()");try{_atwin.Tag.openTags.subscribe({prevState:{hovered:null,docked:null,selected:null},onChanged(newState){log.info("__@ tag subscriber");const[selected=null]=newState.selected;if(selected!==this.prevState.selected){if(selected){log.info(selected,"was selected");dispatchSpaceEvent(SPACE_EVENTS.SELECTED_TAG,{tagId:selected,isSelected:true})}else{log.info(this.prevState.selected,"was deselected");dispatchSpaceEvent(SPACE_EVENTS.SELECTED_TAG,{tagId:selected,isSelected:false})}}this.prevState=Object.assign(Object.assign({},newState),{selected:selected})}})}catch(error){log.error(error)}}))}function showTags(tags,_withIcon=false,iframeId=undefined){return __awaiter(this,void 0,void 0,(function*(){log.info("showTags",tags);if(!_isBasicDevApi){log.info("!_isBasicDevApi");setTags(tags)}let renderedTagIds=[];const sdk=iframeId?_atwinConnections[iframeId]:_atwin;for(let tag of tags){log.info("tag",tag);const isDuplicate=renderedTagIds.includes(tag.json_data.id);if(isDuplicate){tag.json_data.id=rsid.rnd()}renderedTagIds.push(tag.json_data.id);const renderedTag=yield renderTag({tag:tag.json_data},false,iframeId);if(_withIcon&&tag.tag_icon_base64!==""){log.info("__@ showTags: ",tags);yield setTagIcon({tag:tag.json_data,iconName:tag.tag_icon_name,iconUrl:tag.tag_icon_base64,color:tag.json_data.color,iframeId:iframeId})}log.info("renderedTag",renderedTag);if(tag.media_url&&tag.media_url!==""){try{const attachments=[tag.media_url];yield _tag.attachTagMedia({sdk:sdk,tag:tag.json_data,attachments:attachments})}catch(error){log.warn(error)}}if(tag.sandboxId){try{yield attachSandbox({sandboxId:tag.sandboxId,tagIds:[tag.json_data.id]})}catch(error){log.error("Attach sandbox error ",error)}}}}))}function disposeTags(iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("hideTags()");const sdk=iframeId?_atwinConnections[iframeId]:_atwin;const tags=yield sdk.Mattertag.getData();if(tags){const tagIds=tags.map((i=>i.sid));yield sdk.Mattertag.remove(tagIds);log.info("Tags removed in space: ",tagIds)}}))}function attachTagMedia(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== attachTagMedia()",payload);const tag=getMpTag(payload.tagId);tag.media_url=payload.attachments[0];log.info("=== tag ===",tag);const attachments=yield _tag.attachTagMedia({sdk:_atwin,tag:tag.json_data,attachments:payload.attachments});return attachments}))}function detachTagMedia(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== detachTagMedia()",payload);const tag=getMpTag(payload.tagId);tag.media_url="";yield _tag.detachTagMedia({sdk:_atwin,tag:tag,attachmentIds:payload.attachmentIds});log.info("tag data after detach",tag)}))}function moveTag(tagId,callback){return __awaiter(this,void 0,void 0,(function*(){log.info("=== moveTag()",tagId);const tag=getMpTag(tagId);yield _tag.moveTag({sdk:_atwin,tag:tag},callback)}))}function registerSandbox(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== registerSandbox()",payload);if(!payload.content){log.error("Payload content is undefined");return}let sdk=_atwin;sdk=payload.iframeId?_atwinConnections[payload.iframeId]:_atwin;const[sandboxId,messenger]=yield _tag.registerSandbox({sdk:sdk,content:payload.content,options:payload.options});return[sandboxId,messenger]}))}function attachSandbox(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== attachSandbox()",payload);if(!payload.sandboxId||!payload.tagIds){log.error("One or more parameter value of payload is undefined");return}let sdk=_atwin;sdk=payload.iframeId?_atwinConnections[payload.iframeId]:_atwin;yield _tag.attachSandbox({sdk:sdk,sandboxId:payload.sandboxId,tagIds:payload.tagIds})}))}function editTagLabel(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagLabel()",payload);const tag=getMpTag(payload.tagId);yield _tag.editBillboard({sdk:_atwin,tag:tag,label:payload.label})}))}function editTagDescription(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagDescription()",payload);const tag=getMpTag(payload.tagId);yield _tag.editBillboard({sdk:_atwin,tag:tag,description:payload.description})}))}function editTagStem(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagStem()",payload);const tag=getMpTag(payload.tagId);yield _tag.editStem({sdk:_atwin,tag:tag,stemVisible:payload.stemVisible})}))}function editTagIcon(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagIcon()",payload);const tag=getMpTag(payload.tagId);yield _tag.setTagIcon({sdk:_atwin,tag:tag.json_data,iconName:payload.iconName,iconUrl:payload.icon,color:payload.color})}))}function editTagColor(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagColor()",payload);const tag=getMpTag(payload.tagId);yield _tag.editColor({sdk:_atwin,tag:tag,color:payload.color})}))}function saveTag(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== saveTag",payload);const tag=getMpTag(payload.tagId);log.info("=== tag",tag);const res=yield _tag.saveTagDb({tag:tag,api:_api,showcase_id:_space.id,floor:payload.floor,label:payload.label,colorHex:payload.colorHex});log.info("=== res",res);if(res&&res["data"]&&res["data"]["id"]){return res["data"]["id"]}if(res&&res["data"]&&res["data"]["updated"]){return tag.id}log.error("No tag ID returned from api or tag not updated");return null}))}function setPublicTags($tags){log.info("setPublicTags()",$tags);const thisTags=JSON.parse(JSON.stringify($tags));tags=thisTags.map((i=>{const x={};x.id=i.json_data.id;x.name=i.json_data.label;return x}));log.info("tags",tags)}function setTagCategories(tagCategories){log.info("setTagCategories",tagCategories);_tagCategories=tagCategories;return _tagCategories}function setUserAssignedCategories(tagCategories){log.info("setUserAssignedCategories ",tagCategories);_userAssignedTagCategories=tagCategories}function getUserAssignedCategories(){return _userAssignedTagCategories}function setTagMessageRecepients(recepients){log.info("setTagMessageRecepients()",recepients);if(recepients){_tagMessageRecepients=recepients;return}log.error("Parameter recepients is undefined");return}function getTagMessageRecepients(){return _tagMessageRecepients}function setTagMessages(messages){log.info("setTagMessages()",messages);if(messages){_tagMessages=messages;return}}function getTagMessages(){log.info("getTagMessages()");if(_tagMessages){return _tagMessages}log.error("_tagMessages is undefined");return}function setSelectedTagUuid(uuid){log.info("setSelectedTag()");if(uuid&&uuid!==""){_selectedTagUuid=uuid;return}log.error("uuid is undefined");return}function getSelectedTagUuid(){if(_selectedTagUuid&&_selectedTagUuid!==""){return _selectedTagUuid}}function setCurrentSpace(space){_currentSpace=space;console.log("_currentSpace",_currentSpace);return _currentSpace}function getCurrentSpace(){return _currentSpace}function setIotCategoryTypes(payload){console.log("setIotCategoryTypes()",payload);_tagIotCategoryTypes=payload;return _tagIotCategoryTypes}function setIotDeviceTypes(payload){console.log("setIotDeviceTypes()");_tagIotDevices=payload;return _tagIotDevices}function setIoTDeviceTagIcons(payload){log.info("setIoTDeviceTagIcons",payload);_iotTagIcons=payload}function getIoTDeviceTagIcons(){return _iotTagIcons}function renderMeetingSidebar(template,templateName){log.info("renderMeetingSidebar");_zoomMeeting.showMeetingSidebar(template,templateName)}function subscribeSpaceEvent(eventType,callback,iframeId){log.info("subscribeSpaceEvent()");log.info("Custom space evevnts",_customEventTypes);if(Object.values(SPACE_EVENTS).includes(eventType)||_customEventTypes.includes(eventType)){if(Array.isArray(callback)){log.info(`Event type is valid. Inserting ${callback.length} callbacks to queue...`);const spaceEvents=callback.map((fn=>{const spaceEvent={};spaceEvent.eventType=eventType;spaceEvent.callback=fn;if(iframeId)spaceEvent.iframeId=iframeId;return spaceEvent}));spaceEventQueue.events=[...spaceEventQueue.events,...spaceEvents];return}else{log.info(`Event type is valid. Inserting callback to queue...`);const spaceEvent={eventType:eventType,callback:callback};if(iframeId)spaceEvent.iframeId=iframeId;spaceEventQueue.events.push(spaceEvent);return}}log.error(`Parameter ${eventType} does not match any valid SPACE_EVENTS.`);return}function unsubscribeSpaceEvent(eventType,callback){log.info("unsubscribeSpaceEvent()");if(Object.values(SPACE_EVENTS).includes(eventType)||_customEventTypes.includes(eventType)){if(Array.isArray(callback)){callback.forEach(((fn,index)=>{spaceEventQueue.events.forEach((event=>{if(event.eventType===eventType&&event.callback==fn){spaceEventQueue.events.splice(index,1);return}}))}));log.info(`Unsubscribed ${callback.length} callback from ${eventType} event`);return}else{spaceEventQueue.events.forEach(((event,index)=>{if(event.eventType===eventType&&event.callback==callback){spaceEventQueue.events.splice(index,1);log.info(`Unsubscribed callback from ${eventType} event`);return}}));return}}}function dispatchSpaceEvent(eventType,payload){return __awaiter(this,void 0,void 0,(function*(){log.info("dispatchSpaceEvent()",eventType);if(Object.values(SPACE_EVENTS).includes(eventType)||_customEventTypes.includes(eventType)){if(spaceEventQueue.events.length!==0){try{spaceEventQueue.events.forEach((event=>__awaiter(this,void 0,void 0,(function*(){if(event.eventType===eventType){if(event.iframeId){if(payload){payload.iframeId=event.iframeId}else{payload={iframeId:event.iframeId}}}log.info(`dispatchSpaceEvent() iframe ${event.iframeId} `,eventType);yield event.callback(payload)}}))));return}catch(error){log.error(`SNAP! One of your methods subscribed to ${eventType} event has an error`,error);return}}log.info(`No methods subscribed to ${eventType} event`);return}log.error(`Parameter ${eventType} does not match any valid SPACE_EVENTS.`);return}))}function registerCustomSpaceEvent(eventType){log.info("registerCustomSpaceEvent()");if(eventType){if(Array.isArray(eventType)){const filteredCustomEvents=eventType.filter((item=>_customEventTypes.indexOf(item)<0));const defaultEvents=Object.values(SPACE_EVENTS);const filteredDefaultEvents=eventType.filter((item=>defaultEvents.indexOf(item)<0));if(filteredCustomEvents.length!==eventType.length){log.error("Duplicate custom events detected. Operation canceled.");return}if(filteredDefaultEvents.length!==eventType.length){log.error("One of your event name is a reserved event name. Please refer to documentation for info. Operation canceled.");return}_customEventTypes=[..._customEventTypes,...eventType];log.info(`Registered ${eventType.length} new custom event types`);return}else{if(!_customEventTypes.includes(eventType)&&!Object.values(SPACE_EVENTS).includes(eventType)){_customEventTypes.push(eventType.toUpperCase());return}log.warn(`Duplicate event type detected. ${eventType} is already a registered event. Operation cancelled`);return}}log.error("Parameter is undefined");return}function clearSpaceEventQueue(iframeId){if(iframeId){const filteredEvents=spaceEventQueue.events.filter((ev=>ev.iframeId!=iframeId));spaceEventQueue.events=filteredEvents;return}spaceEventQueue={events:[]};return}function initSocketIo(meetingId="1",role="guest"){socketIo.initSocketIo(meetingId,role)}function socketEmit(payload){socketIo.socketEmit(payload)}function getSelectedObject(){return selectedObject}function renderInSpaceMediaScreen(){return __awaiter(this,void 0,void 0,(function*(){log.info("renderInSpaceMediaScreen()");const cameraPose=getCurrentCameraPose();const position={x:Math.abs(cameraPose.position.x+3),y:cameraPose.position.y,z:cameraPose.position.z};const transform={position:position,rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}};const faceCameraRotation=rotateObjectToFaceCamera(position,cameraPose.position);transform.rotation.x=faceCameraRotation.x;transform.rotation.y=-1.55;transform.rotation.z=faceCameraRotation.x;log.info("Final rotation",transform.rotation);_inSpaceMediaScreenId=Number.parseInt(uid.rnd());const payload=yield addMediaScreen("",transform,_inSpaceMediaScreenId);return payload}))}function enableHUD(objectId,screenPosition="topRight"){log.info("enableHUD()",objectId,screenPosition);const object=_3DXObjects.find((x=>x.object.id===objectId));if(!object){log.error("object not found in _3DXObjects ",_3DXObjects);return}log.info("__ object",object);if(canSetHud({screenPos:screenPosition,meshUuid:object.component["mesh"]["parent"]["uuid"]})){setHudState({outputs:object.component.outputs,mesh:object.component["mesh"],context:object.component.context,screenPos:screenPosition,screenPositions:this.screenPositions});saveMediaScreenHud({meshUuid:object.component["mesh"]["uuid"],screenPos:screenPosition})}else{log.warn("Cannot set hud state. Position is occupied")}}function canSetHud(p){log.info("canSetHud()",p);const isPositionOccupied=_mediaScreenHUDs.find((i=>i.screenPosition===p.screenPos));if(isPositionOccupied)return false;return true}function saveMediaScreenHud(p){log.info("addMediaScreenHud()",p);const mediaScreenHud=_mediaScreenHUDs.find((i=>i.meshUuid===p.meshUuid));log.info("_mediaScreenHUDs",_mediaScreenHUDs);log.info("mediaScreenHud",mediaScreenHud);if(!mediaScreenHud){_mediaScreenHUDs.push({meshUuid:p.meshUuid,screenPosition:p.screenPos});log.info("mediaScreenHud Added to _mediaScreenHUDs");return}mediaScreenHud.screenPosition=p.screenPos}function removeMediaScreenHud(p){log.info("removeMediaScreenHud()",p);const indx=_mediaScreenHUDs.findIndex((i=>i.meshUuid===p.meshUuid));if(indx===-1){log.error("mediaScreenHud not found in _mediaScreenHUDs");return}_mediaScreenHUDs.splice(indx,1)}function enableFitScreen(){isFitScreenOccupied=true}function disableFitScreen(){isFitScreenOccupied=false}function disableHUD(objectId){log.info("disableHUD()",objectId)}function getMediaScreenHUDs(){return _mediaScreenHUDs}function rotateObjectToFaceCamera(objPosition,camera){const direction={x:camera.x-objPosition.x,y:camera.y-objPosition.y,z:camera.z-objPosition.z};const yaw=Math.atan2(direction.y,direction.x);const distanceXY=Math.sqrt(direction.x*direction.x+direction.y*direction.y);const pitch=Math.atan2(-direction.y,distanceXY);const rotation={x:yaw,y:pitch};return rotation}function getParticipants(){log.info("getParticipants()");log.info("socketIo.getParticipants()",_participant.getParticipants());return _participant.getParticipants()}function followParticipant(followParticipant){log.info("followParticipant()",followParticipant);const localParticipant=_participant.getParticipant();const data={event:"PARTICIPANT_FOLLOW",participant:localParticipant,followParticipant:followParticipant};if(followParticipant.sweepId!=localParticipant.sweepId){moveToSweep(followParticipant.sweepId,followParticipant.rotation)}socketIo.socketEmit({socketEvent:"SPACE:SWEEP",data:data})}function unFollowParticipant(unFollowParticipant){log.info("unFollowParticipant()");const localParticipant=_participant.getParticipant();const data={event:"PARTICIPANT_UNFOLLOW",participant:localParticipant,unFollowParticipant:unFollowParticipant};socketIo.socketEmit({socketEvent:"SPACE:SWEEP",data:data})}function setSpacePartitionNodes(partitionNodes){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ setSpacePartitionNodes");_partitionNodes=partitionNodes;log.info("__@ _partitionNodes: ",_partitionNodes)}))}function getPathBetweenSweeps(startSweepId,endSweepId,iframeId){return __awaiter(this,void 0,void 0,(function*(){try{const sdk=iframeId?_atwinConnections[iframeId]:undefined;if(!sdk)throw new Error("SDK instance not found.");console.log("Initializing pathfinding with SDK:",sdk,"iframeId:",iframeId);const sweepGraph=yield sdk.Sweep.createGraph();const startVertex=sweepGraph.vertex(startSweepId);const endVertex=sweepGraph.vertex(endSweepId);if(!startVertex||!endVertex)throw new Error("Invalid start or end sweep ID.");for(const{src:src,dst:dst,weight:weight}of sweepGraph.edges){sweepGraph.setEdge({src:src,dst:dst,weight:Math.pow(weight,2)})}const aStarRunner=sdk.Graph.createAStarRunner(sweepGraph,startVertex,endVertex);const result=aStarRunner.exec();if(result.status!==sdk.Graph.AStarStatus.SUCCESS)throw new Error(`Pathfinding failed between ${startVertex.id} and ${endVertex.id}.`);const position=result.path.map((position=>{const vertex=sweepGraph.vertex(position.id);return{x:vertex.data.position.x,y:vertex.data.position.y-.6,z:vertex.data.position.z}}));sweepGraph.dispose();return{path:result.path,position:position}}catch(error){console.error("Error in Path finding:",error)}}))}function moveAlongPath(path,iframeId,transitionTime=500){return __awaiter(this,void 0,void 0,(function*(){try{const sdk=iframeId?_atwinConnections[iframeId]:undefined;if(!sdk)throw new Error("SDK instance not found.");const transition=sdk.Sweep.Transition.FLY;let prevVertex=null;for(const vertex of path){if(vertex.id===_currentSweep.id){prevVertex=vertex;continue}const rotation=rotateCameraAlongPath(prevVertex,vertex);yield sdk.Sweep.moveTo(vertex.id,{rotation:rotation,transition:transition,transitionTime:transitionTime});prevVertex=vertex}console.log("moveAlongPath",path)}catch(error){console.error("Error moving along path:",error)}}))}function rotateCameraAlongPath(from,to){const config={x:0,y:180,z:0};if(!from)return to.data.rotation;const{x:x,y:y,z:z}=config;const dx=to.data.position.x-from.data.position.x;const dz=to.data.position.z-from.data.position.z;const angleY=Math.atan2(dx,dz)*(180/Math.PI)+y;return{x:x,y:angleY,z:z}}function setSpaceMetadata(payload){log.info("setSpaceMetadata() ",payload);_spaceMetaData=payload;if(payload&&payload!=null&&typeof payload==="string"){_spaceMetaData=JSON.parse(payload)}if(_spaceMetaData&&_spaceMetaData!=null){if(_spaceMetaData.general_settings&&_spaceMetaData.general_settings.minimap&&_spaceMetaData.general_settings.minimap.custom_floor_data){const customFloorData=_spaceMetaData.general_settings.minimap.custom_floor_data!=null?_spaceMetaData.general_settings.minimap.custom_floor_data:[];minimap.setCustomMapFloorData(customFloorData)}}}function getSpaceMetadata(){return _spaceMetaData}class ClickSpy{constructor(path,node,component,object_data,callback){this.path=path;this.node=node;this.component=component;this.object_data=object_data;this.callback=callback}onEvent(data){if(data.input.type=="click"){if(tagFormMode=="ADD"||tagFormMode=="EDIT"){log.info("tagFormMode: ",tagFormMode);return}log.info("Clicked on 3D model",data);const selectedObj={object:this.object_data,node:this.node,component:this.component};if(transformHistory.getTransformHistory(selectedObj.object.id)===undefined){transformHistory.addAction(selectedObj.object.id,selectedObj.node.position,selectedObj.node.obj3D.rotation,selectedObj.node.scale)}if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.menuItems&&_mpConfig.toolbarConfig.menuItems.models!==undefined){if(_mpConfig.toolbarConfig.menuItems.models){this.callback("CLICK",this.object_data);setSelectedObject(this.object_data,this.node,this.component,"3DX");setTransformControls(selectedObj);setActiveActionBtn("at-translate-action-btn")}}else{this.callback("CLICK",this.object_data);setSelectedObject(this.object_data,this.node,this.component,"3DX");setTransformControls(selectedObj)}}}}class DragSpy{constructor(path,node,component,data,callback){this.eventType="INTERACTION.DRAG_END";this.path=path;this.object_data=data;this.node=node;this.component=component;this.callback=callback}onEvent(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("INTERACTION.DRAG_END",payload);const selectedObj={object:this.object_data,node:this.node,component:this.component};log.info("New Drag Position"+JSON.stringify(selectedObj.node.position));log.info("New Drag Rotation"+JSON.stringify(selectedObj.node.obj3D.rotation));log.info("New Drag Scale"+JSON.stringify(selectedObj.node.scale));const objectCoords={object_position:selectedObj.node.position,object_rotation:selectedObj.node.obj3D.rotation,object_scale:selectedObj.node.scale};currentObjTransform=objectCoords;const currentTranform=JSON.stringify(currentObjTransform);const{object_position:pos,object_rotation:rot,object_scale:scale}=JSON.parse(transformHistory.getTransformHistory(selectedObj.object.id).at(transformHistory.getCurrentIndex(selectedObj.object.id)));const isPositionEqual=isVec3Equal(selectedObj.node.position,pos);const isRotationEqual=isQuatEqual(selectedObj.node.obj3D.rotation,rot);const isScaleEqual=isVec3Equal(selectedObj.node.scale,scale);if(!isPositionEqual||!isRotationEqual||!isScaleEqual){actionHistory.push(currentTranform);transformHistory.addAction(selectedObj.object.id,selectedObj.node.position,selectedObj.node.obj3D.rotation,selectedObj.node.scale);if(_mpConfig.toolbarConfig){toggleActionBarButtons("at-redo-action-btn",transformHistory.canRedo(selectedObj.object.id));toggleActionBarButtons("at-undo-action-btn",transformHistory.canUndo(selectedObj.object.id))}}const showcaseObjPayload=this.object_data;showcaseObjPayload.object_position=objectCoords.object_position;const obj_rot={x:objectCoords.object_rotation._x,y:objectCoords.object_rotation._y,z:objectCoords.object_rotation._z};showcaseObjPayload.object_rotation=obj_rot;showcaseObjPayload.object_scale=objectCoords.object_scale;this.callback("DRAG_END",showcaseObjPayload);log.info("object type",this.object_data.object_data.object_type);if(this.object_data.object_data.object_type=="TEXT"&&_textDimensions.top!==null){const rotation={x:currentObjTransform.object_rotation._x,y:currentObjTransform.object_rotation._y,z:currentObjTransform.object_rotation._z};setTextDimensionPosition(_textDimensions.top.node,_textDimensions.top.component,"top",currentObjTransform.object_position,rotation);setTextDimensionPosition(_textDimensions.bottom.node,_textDimensions.bottom.component,"bottom",currentObjTransform.object_position,rotation);setTextDimensionPosition(_textDimensions.left.node,_textDimensions.left.component,"left",currentObjTransform.object_position,rotation);setTextDimensionPosition(_textDimensions.right.node,_textDimensions.right.component,"right",currentObjTransform.object_position,rotation)}}))}}class EmitSpy{constructor(path,node,component,object_data,callback){log.info("__$path",path);log.info("__$node",node);log.info("__$component",component);log.info("__$object_data",object_data);log.info("__$callback",callback);this.path=path;this.node=node;this.component=component;this.object_data=object_data;this.callback=callback}onEvent(data){log.info("onEvent()");log.info("__$data",data);const selectedObj={object:this.object_data,node:this.node,component:this.component};const excludedColliders=["expandBtn","playBtn","pauseBtn","muteBtn","unmuteBtn","nextBtn","prevBtn","_dismissBtn"];if(data.input.type=="click"){log.info("INTERACTION.CLICK",data);const selectedObj={object:this.object_data,node:this.node,component:this.component};if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.menuItems&&_mpConfig.toolbarConfig.menuItems.models!==undefined){if(_mpConfig.toolbarConfig.menuItems.models){setSelectedObject(this.object_data,this.node,this.component,"3DX");if(_viewMode==="interactive"&&!excludedColliders.includes(data.collider.name)){setTransformControls(selectedObj)}else{removeTransformControls()}this.callback("CLICK",{objectData:this.object_data,component:this.component})}}else{setSelectedObject(this.object_data,this.node,this.component,"3DX");if(_viewMode==="interactive"&&!excludedColliders.includes(data.collider.name)){setTransformControls(selectedObj)}else{removeTransformControls()}this.callback("CLICK",{objectData:this.object_data,component:this.component})}}else if(data.input.type==="drag_end"){if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.menuItems&&_mpConfig.toolbarConfig.menuItems.models!==undefined){if(_mpConfig.toolbarConfig.menuItems.models){this.callback("DRAG_END",this.object_data)}}else{this.callback("DRAG_END",this.object_data)}transformHistory.addAction(selectedObj.object.id,selectedObj.node.position,selectedObj.node.obj3D.rotation,selectedObj.node.scale)}}}class PolygonClickSpy{constructor(path,object_data,node,component,callback){this.path=path;this.object_data=object_data,this.node=node;this.component=component;this.callback=callback}onEvent(data){if(data.input.type=="click"){if(_drawPolygonMode==false){log.info("VerticeClickSpy");log.info("Clicked on polygon",data);this.callback("PARTITION_COLLIDER_CLICKED",data);this.callback("PARTITION_CLICKED",this.object_data);setSelectedObject(this.object_data,this.node,this.component,"POLYGON");_currentPolygon={node:this.node,component:this.component,object:this.object_data,type:"POLYGON"}}}}}function setScreenSharingHostUser(user){_screenSharingHostUser=user;renderRemoteSpaceViewing(_screenSharingHostUser);return _screenSharingHostUser}function setScreenSharingParticipantUsers(users){_screenSharingParticipantUsers=users;return _screenSharingParticipantUsers}function updatePointerTexture(textureId){return __awaiter(this,void 0,void 0,(function*(){const mpsdk=getAtwinSdk();if(!mpsdk){console.log("@___Mark NO MPSDK");return}if(!textureId){textureId="targetPointer"}if(textureId=="resetTexture"){yield mpsdk.Pointer.resetTexture()}else{yield mpsdk.Pointer.editTexture(textureId)}}))}const renderCursorMarkerPointer=(pointerIntersection,_object,markerTexture)=>__awaiter(void 0,void 0,void 0,(function*(){if(!pointerIntersection)return;const coord=pointerIntersection.position;const normal=pointerIntersection.normal;function vec3ToEuler(params){const spaceObj=_3DXObjects[0];if(!spaceObj){return{euler:{x:1,y:1,z:1},nomalizedParms:pointerIntersection.normal}}const THREE=spaceObj.component.context.three;const normal=new THREE.Vector3(params.x,params.y,params.z).normalize();const arbitrary=Math.abs(normal.x)>.9?new THREE.Vector3(0,1,0):new THREE.Vector3(1,0,0);const tangent=(new THREE.Vector3).crossVectors(arbitrary,normal).normalize();const bitangent=(new THREE.Vector3).crossVectors(normal,tangent).normalize();const rotationMatrix=(new THREE.Matrix4).makeBasis(tangent,bitangent,normal);const quaternion=(new THREE.Quaternion).setFromRotationMatrix(rotationMatrix);const euler=(new THREE.Euler).setFromQuaternion(quaternion);return{euler:euler,nomalizedParms:normal}}const{euler:euler,nomalizedParms:nomalizedParms}=vec3ToEuler(normal);const offset=.05;const adjustedPosition={x:coord.x+nomalizedParms.x*offset,y:coord.y+nomalizedParms.y*offset,z:coord.z+nomalizedParms.z*offset};const _object_scale={x:.4,y:.4,z:.4};if(_object){const newPosition={object_position:adjustedPosition,object_rotation:euler,object_scale:_object_scale};setObjectTransformation(_object.node,newPosition)}else{const _markerTexture=markerTexture!==null&&markerTexture!==void 0?markerTexture:"https://cdn.jsdelivr.net/npm/architwin@latest/static/objective.png";const objectType="PNG";const spaceObj=yield addObjectToSpace(_markerTexture,objectType,{position:{x:coord.x,y:coord.y+.1,z:coord.z},rotation:{x:euler.x,y:euler.y,z:euler.z},json_data:JSON.stringify({name:cursorMarker})});const vecEulerValue=vec3ToEuler(normal);const objects=get3DXObjects({showcase_object_name:"CURSORMARKER"});const _markerObject=objects.find((obj=>obj.object.id===spaceObj.id));const adjustedPosition={x:coord.x+vecEulerValue.nomalizedParms.x*offset,y:coord.y+vecEulerValue.nomalizedParms.y*offset,z:coord.z+vecEulerValue.nomalizedParms.z*offset};const newPosition={object_position:adjustedPosition,object_rotation:vecEulerValue.euler,object_scale:_object_scale};setObjectTransformation(_markerObject.node,newPosition);return spaceObj}}));function toggleElementVisibility(id,shouldShow){const element=document.getElementById(id);if(!element){console.warn(`Element with ID '${id}' not found.`);return}element.style.display=shouldShow?"block":"none"}function setPipeCategories(pipes){log.info("set categores",pipes);_pipeCategories=pipes;return _pipeCategories}function setSelectedPipeCategory(pipe){log.info("set pipes",pipe);_selectedPipeCategory=pipe;return _selectedPipeCategory}function getSelectedPipeCategory(){return _selectedPipeCategory}function setPipes(pipes){log.info("set pipes",pipes);_pipes=pipes;return _pipes}function setSelectedPipe(pipe){log.info("set pipes",pipe);_selectedPipe=pipe;return _selectedPipe}function getSelectedPipe(){return _selectedPipe}function setPipeIsDrawingMode(status){log.info("set pipes",status);_isDrawPipe=status;return _isDrawPipe}function setVertexPath(path){_thisVertexPath=path}function getPipeIsDrawingMode(){return _isDrawPipe}function undoPipePath(){const path=pathHistory.undo();_thisVertexPath.pop();_thisVertexComponent.inputs.path=path;createVerticeControls(_thisVertexComponent,true)}function redoPipePath(){const path=pathHistory.redo();_thisVertexComponent.inputs.path=path;createVerticeControls(_thisVertexComponent,true)}function setPointerEnabled(value){_screenShareSession.isPointerEnabled=value}function getFloorGroundLevel(floorId){return __awaiter(this,void 0,void 0,(function*(){console.log("getFloorGroundLevel() for floorId:",floorId);const screenPosition={x:window.innerWidth/2,y:window.innerHeight/2};const data=yield _atwin.Renderer.getWorldPositionData(screenPosition);console.log("data:",data);if(data.position&&data.floorInfo.id===floorId){_floorGroundLevelY=data.position.y;console.log(`the ground level y coordinate for floor ${floorId} is`,_floorGroundLevelY)}else{console.error("Could not determine ground level for floor ID",floorId);return null}}))}function getFloorGroundLevelY(){return _floorGroundLevelY}export{_atwin,_config,_mpConfig,tags,sweeps,selectedObject,previousObjTransform,currentObjTransform,actionHistory,state,_tags,_tagCategories,_tagMessageRecepients,_space,_spaceId,_api,_pointerCoord,_3DXObjects,_meetingParticipants,_generatedObjectIds,_tagIotCategoryTypes,_tagIotDevices,tagColors,domMousePosition,isFitScreenOccupied,isCdnMapDataAvailable,minimap,_modelDetails,_onMouseClickInstance,transformHistory,_partitionNodes,_currentSpace,_spaceUsers,_screenSharingHostUser,_screenSharingParticipantUsers,initAtwinApi,getAtwinSdk,connectSpace,disconnectSpace,clearActionHistory,getSweeps,getCurrentSweep,getCurrentSweepPosition,moveToSweep,getNearbySweeps,getAllSweeps,getCurrentCameraPose,getCurrentCameraZoom,getCameraPosition,getCurrentFloor,moveInDirection,cameraLookAt,cameraPan,cameraRotate,cameraSetRotation,getViewMode,setViewMode,captureSpaceScreenshot,captureScreenshotAndCameraDetails,captureCurrentView,cameraZoomBy,cameraZoomReset,cameraZoomTo,getNearbyObjects,setTransformMode,setSelectedObject,clearSelectedObject,revertTransform,setTransformControls,removeTransformControls,setRenderDistance,addObject,getObject,addObjectToSpace,renderModel,addMediaScreen,attachMediaScreenContent,updateObject,updateShowcaseObject,deleteObject,deleteShowcaseObject,copyObject,replaceObject,getTargetPosition,setObjectTransformation,setPointerCoordinates,addTextMarkupScreen,setTextMarkupScreenContent,goTo3dx,goToModel,hasTimeElapsed,getSelectedObject,renderAvatar,setSpaceAvatar,get3DXObjects,set3DXObjects,clear3DXObjects,setLibrary,getLibrary,disposeModel,disposeAllModels,renderInSpaceMediaScreen,goToPosition,goToParticipant,getNearestSweepFromObject,cancelModelPlacement,renderViewpointMarker,toggleViewpointVisibility,convertDegRotationToEuler,isToolbarFeatureEnabled,goToMPOrigin,pauseVideo,playVideo,setVideoPlayback,setAnimationState,showMinimap,hideMinimap,getMapConfig,addTag,getTags,gotoTag,renderTag,disposeTag,disposeTags,toggleVisibilityTag,getMpTags,getTagDataCollection,getMpTag,showTags,attachTagMedia,detachTagMedia,moveTag,editTagLabel,editTagDescription,editTagStem,editTagIcon,editTagColor,attachSandbox,registerSandbox,saveTag,rotateCameraToObject,setModelVisibility,tagStateSubscriber,setTagIcon,setTagCategories,setUserAssignedCategories,getUserAssignedCategories,setTagMessageRecepients,getTagMessageRecepients,setTagMessages,getTagMessages,setSelectedTagUuid,getSelectedTagUuid,setCurrentSpace,toggleFitToScreen,getFloors,getLabels,renderMeetingSidebar,createMeetingTemplate,joinMeetingTemplate,meet,dispatchSpaceEvent,subscribeSpaceEvent,unsubscribeSpaceEvent,registerCustomSpaceEvent,clearSpaceEventQueue,initSocketIo,socketEmit,getParticipants,followParticipant,unFollowParticipant,enableHUD,disableHUD,getMediaScreenHUDs,canSetHud,saveMediaScreenHud,removeMediaScreenHud,enableFitScreen,disableFitScreen,initToolbarUI,themeManager,convertToEuler,disableSweeps,enableSweeps,enableSweep,disableSweep,tubeLineType,pathLineType,_sceneObject,_tubes,drawPath,toggleSpaceNavigation,startDraw,exitDraw,cancelDraw,setPolygonPath,setPathLine,setPathLineOptions,getCurrentTubeLine,renderPolygon,toggleWallVisibility,toggleMeshChildrenVisibility,toggleFloorVisibility,getChildrenOfModel,toggleVerticeRingVisibility,setPolygonFloorOffset,getPolygonFloorOffset,setFloorBaseHeight,clearFloorBaseHeight,enableVerticeControls,deleteEdge,disposePathLine,getFloorBaseHeight,setMeshChildrenMaterialProperty,undoDrawAction,redoDrawAction,setWallBaseHeight,getWallBaseHeight,clearWallBaseHeight,getVertexPath,setSpacePartitionNodes,setCurrentPolygon,getSpaceId,getCurrentPolygon,getPathBetweenSweeps,moveAlongPath,_atwinConnections,convertZupToYup,convertYupToZup,getRelativePosition,getOriginalWorldPosition,setSpaceMetadata,getSpaceMetadata,getAssetUrl,setIotCategoryTypes,setIotDeviceTypes,setIoTDeviceTagIcons,getIoTDeviceTagIcons,setScreenSharingHostUser,setScreenSharingParticipantUsers,renderCursorMarkerPointer,updatePointerTexture,toggleElementVisibility,renderPath,setDrawingConfig,getDrawingConfig,resetDrawingConfig,_pipeCategories,_selectedPipeCategory,setPipeCategories,setSelectedPipeCategory,getSelectedPipeCategory,_pipes,_selectedPipe,setPipes,setSelectedPipe,getSelectedPipe,deleteVertex,setPipeIsDrawingMode,getPipeIsDrawingMode,setPointerEnabled,removeScreenShareSessionData,setVertexPath,_pathConfig,undoPipePath,redoPipePath,pathHistory,clearTagVisibilityStorage,partitionHistory,_renderTagPaneContent,clearActivePane,renderPreviewModal,togglePreviewModal,closePreviewModal,setPreviewModalAction,activePreviewModal,_thisVertexPath};
1
+ var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P((function(resolve){resolve(value)}))}return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};import axios from"axios";import{planeType,planeFactory,planeImageFactory,planeVideoFactory,planePdfFactory,setHudState,gltfType,gltfFactory,boxType,boxFactory,textType,textFactory,css3DType,css3DFactory,planeTypeImage,planeTypeVideo,planeTypePdf,sweepPuckType,puckBackgroundFactory,viewpointType,viewpointFactory,tubeLineType,tubeLineFactory,verticeType,verticeFactory,bufferGeometryType,bufferGeometry,fbxType,fbxFactory,pathPointType,pathPointFactory,pathLineType,pathLineFactory}from"./loaders";import{meterToMillimeter,generateUUID,formatMatterportUrl,initBundleVersion,isEqual,useHexToRgb,getAssetUrl,isVec3Equal,isQuatEqual}from"./utils";import{initToolbarUI,themeManager,toggleActionBarButtons,setActiveActionBtn}from"./atwinui";import{SPACE_EVENTS,MAP_OPTIONS}from"./types";import*as JSZip from"jszip";import*as JSZipUtils from"jszip-utils";import*as superviz from"./superviz";import*as minimap from"./minimap";import"../static/sidebar.css";import*as socketIo from"./socketio";import"../static/map.css";import"../static/media_screen.css";import*as _tag from"./tag";import*as _zoomMeeting from"./meeting/meetingSidebar";import*as _participant from"./participant";import{getTagColorCodeID}from"./tag";import{createMeetingTemplate,joinMeetingTemplate}from"./meeting/templates";import{syncParticipantsLocation}from"./participant";import{ActionHistory}from"./actionHistory";import log from"loglevel";import*as meet from"./zoom";import ShortUniqueId from"short-unique-id";import{setPreferredLanguage,tagFormMode}from"./atwinui/components/toolbar";import{getDrawingMode,getIsDrawing,getIsEditWindow,toggleUndoRedoButtons}from"./atwinui/components/toolbar/spacePartition/roomFormPane";import{Notyf}from"notyf";import"notyf/notyf.min.css";import{setBasepoint,setBasepointObjectPayload,setCoordinateSystem,setMeasurementUnit,setRotationUnit,setScaleFactor,setTempCoordinateSystem,setTempMeasurementUnit,setTempRotationUnit,setTempScaleFactor,getCoordinateSystem}from"./atwinui/components/toolbar/actionSettingsPane";import{setSelectedMap}from"./atwinui/components/toolbar/generalSettingsMenuPane";import{convertYupToZup,convertZupToYup,getRelativePosition,getOriginalWorldPosition}from"./worldConversion";import{renderRemoteSpaceViewing}from"./atwinui/components/toolbar/viewingRemoteSpace";import{renderPreviewModal,togglePreviewModal,closePreviewModal,setPreviewModalAction,activePreviewModal}from"./atwinui/components/toolbar";import{PipeForm}from"./atwinui/components/toolbar/pipeFormPane";import{ActionPathHistory}from"./actionPathHistory";import{_screenShareSession,removeScreenShareSessionData}from"./atwinui/components/toolbar/screenSharePane";import{clearTagVisibilityStorage}from"./atwinui/components/toolbar/tagListPane";import{renderTagPaneContent}from"./atwinui/events";import{clearActivePane}from"./atwinui/events";const uid=new ShortUniqueId({dictionary:"number"});const rsid=new ShortUniqueId({length:10});const transformHistory=new ActionHistory;const pathHistory=new ActionPathHistory;const partitionHistory=new ActionPathHistory;const _config={mp:{urlParams:["help","play","nt","qs","brand","dh","tour","gt","hr","mls","mt","tagNav","pin","portal","f","fp","lang","kb","lp","st","title","tourcta","wts","ts","hl","vr","nozoom","search","wh"]},meet:{meetingKey:""},zoom:{SDKKey:"",SDKSecret:""}};let _apiURL="http://localhost:5173/api";let _appKey;const urlParams=_config.mp.urlParams;let _iframe={};let _isBasicDevApi=true;let _api;let _mediaApi;let _spaceId="";let _space=null;let _mpConfig={};let _atwin=null;let _tags=[];let _tagCategories=undefined;let _userAssignedTagCategories=undefined;let _tagMessageRecepients=[];let _selectedTagUuid=undefined;let _tagMessages=[];let _objects=[];let _meetingParticipants=[];let tags=[];let sweeps=[];let _allSlideShow=[];let _slideShowImage=[];let _currentSlideShowID=0;let _currentSlideIndex=0;let _currentSlideShow=null;var _timer=null;let _videos=[];let _currentViewMode="";let _3DXObjects=[];let _unrenderedObjects=[];let _transformControlNode;let _inputControlComponent;let selectedObject;let _previousTimeStamp=0;let _renderDistance=3;let _autoDetectNearbyObj=false;let _viewMode="public";let _transformMode="translate";let _transformComponent;let previousObjTransform={object_position:{x:0,y:0,z:0},object_rotation:{_x:0,_y:0,_z:0},object_scale:{x:0,y:0,z:0}};let currentObjTransform={object_position:{x:0,y:0,z:0},object_rotation:{_x:0,_y:0,_z:0},object_scale:{x:0,y:0,z:0}};let _previousAction;let actionHistory=[];let _currentSweep=null;let _currentCameraPose;let _currentCameraZoom;let _sweeps=[];let _currentFloor;let _atwinFloors=[];let _atwinLabels=[];let _isInitialLoad=true;let _hasRegisteredLoaders=false;let _sceneObject;let _assetLibrary=[];let _objectMarker;let _pointerSubscription;let _pointerCoord;let _userId;let _generatedObjectIds=[];let _textDimensions={top:{node:null,component:null},bottom:{node:null,component:null},left:{node:null,component:null},right:{node:null,component:null}};let _textDimensionIds=[];let state={isLoading:false,loaded:false,error:"",data:null};let domMousePosition;let _customEventTypes=["GO_BACK"];let spaceEventQueue={events:[]};let _inSpaceMediaScreenId;let _avatarModel;let _mediaScreenHUDs=[];let isFitScreenOccupied=false;let isCdnMapDataAvailable=true;let isCustomSweepPuckSet=false;let _atwinConnections={};let _atwinSceneObjects={};let _atwinShowcaseElements={};let _atwinShowcaseWindows={};let _onMouseClickInstance;let _clickEventInstance;let _continousClickMode=false;let _modelDetails;let _currentRoom;let _currentCoordinateSystem="";let _spaceMetaData;const supportedMediaTypes=["WMV","MOV","MP4","JPG","PNG","JPEG","image","video","FRAME","PDF","PDF"];const supportedModelTypes=["GLB","GLTF","FBX"];const supportedFileTypes=["ZIP","PDF",...supportedMediaTypes,...supportedModelTypes];const tagColors=["c44f47","e15141","FF0000","e992a7","92508e","6040b0","2b667b","0000FF","52b9d1","00FF00","FFA500","6cd283","d1db59","f5cd46","f4af42","ee712e","adb8c2","667c89"];const cursorMarker="CURSORMARKER";let _visualize=true,_editPolygonMode=false,_drawPolygonMode=false,_tubeCounter=1;let visualize=true,_activeVertex,editMode=false,drawMode=false,_thisVertexNode,_thisVertexComponent,_thisVerticesNode,_thisVertexPath=new Array,_currentPolygon,_currentPipe,_polygonShapePath,_polygonDrawingModePath,_pipeShapePath,_polygonWallDataPath,_polygonDataPath,_polygonWallHeightPath,_polygonFloorLevelPath,_verticeComponentsCollection=[],_vertexConnectiveComponentCollection=[],_vertexConnectiveNodeCollection=[],_polygonFloorOffset=.1,_floorBaseHeight,_offsetedBaseHeight=_floorBaseHeight?_floorBaseHeight+_polygonFloorOffset:undefined,_wallBaseHeight;let _intersectionData,_tubes,_verticeEmitPath,_verticeEditEmitPath;let _navigationInputNode;let _navigationComponent;let _isNavigationComponentCreated=false;let _isVerticeClickSpyCreated=false;let _is3DClickSpyCreated=false;let _currentPathfindingTubeline;let _tubeLinePath;let _pathLineOptions;let _pathConfig={lineType:tubeLineType,verticeType:verticeType,lineTypeComponentConfig:{renderPolygonOnAdd:true,drawingMode:"floor"}};let _partitionNodes=undefined;let isCtrlPressed=false,isAltPressed=false,isShiftPressed=false,lastKeyPressed=null;let _tagDataCollection;let notyf=new Notyf({position:{x:"left",y:"bottom"},duration:4500,types:[{type:"info",background:"blue",icon:'<span class="mdi mdi-information-outline"></span>'}]});let _currentSpace;let _tagIotCategoryTypes=[];let _tagIotDevices=[];let _iotTagIcons={alert:"",normal:""};let _spaceUsers;let _screenSharingHostUser;let _screenSharingParticipantUsers;let _pipeCategories=[];let _selectedPipeCategory=undefined;let _pipes=[];let _selectedPipe=undefined;let _isDrawPipe=false;let _floorGroundLevelY=0;const pipeForm=new PipeForm;function initAtwinApi(apiKey="",contentType="multipart/form-data"){const api=axios.create({baseURL:_apiURL,headers:{"Access-Control-Allow-Origin":"*","Content-Type":"multipart/form-data",Authorization:apiKey}});_api=api}function connectSpace(url,auth,config,callbacks=undefined){return __awaiter(this,void 0,void 0,(function*(){log.info("connectSpace(): ",url);if(!config.multispace){log.info("multispace is false");try{yield disconnectSpace()}catch(e){log.error("The space is already disconnected")}}log.info("__config",config);_mpConfig=config;if(auth){if("apiURL"in auth){log.info("'apiURL' in auth");const lastString=auth.apiURL.slice(-1);if(lastString!=="/"){auth.apiURL+="/"}_apiURL=auth.apiURL}log.info("_apiURL",_apiURL);initAtwinApi(auth.apiKey)}if("appKey"in config){log.info("'appKey' in config");_appKey=config.appKey}if("lang"in config){log.info("'lang' in config: ",config.lang);setPreferredLanguage()}if("debug"in config){const logLevels=["trace","warn","error","info","silent"];if(config.debug.logLevel&&logLevels.includes(config.debug.logLevel.toLowerCase())){log.setLevel(config.debug.logLevel.toLowerCase())}else{log.setDefaultLevel(log.levels.ERROR)}}else{log.setDefaultLevel(log.levels.ERROR)}if("appConfigKeys"in config&&"embedlyKey"in config.appConfigKeys&&!config.bundlePath){if(config.appConfigKeys.embedlyKey){window.localStorage.setItem("embedlyKey",config.appConfigKeys.embedlyKey)}}if("appConfigKeys"in config){if(config.appConfigKeys.meetSdkKey){log.info("meetConfig sdkKey found");_config.zoom.SDKKey=config.appConfigKeys.meetSdkKey}if(config.appConfigKeys.meetSecretKey){log.info("meetConfig secretKey found");_config.zoom.SDKSecret=config.appConfigKeys.meetSecretKey}}_mediaApi=axios;if(config.viewMode==="interactive"){_viewMode="interactive"}const showcase=document.getElementById(config.iframeId);_iframe=showcase;if(url.includes("https://my.matterport.com/show/")){log.info("URL IS MATTERPORT");yield loadDefaultMpSpace(url,config,showcase,callbacks)}else{log.info("URL IS REV-KITTEN");yield loadAtwinSpace(url,auth,config,showcase)}}))}function getAtwinSdk(iframeId){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(!sdk){log.error("AtwinSdk is undefined");return null}return sdk}function isToolbarFeatureEnabled(key){log.info("isToolbarFeatureEnabled()");if(!key){log.error("key is undefined");return}if(!_mpConfig.toolbarConfig){return false}if(!_mpConfig.toolbarConfig.menuItems){return false}if(_mpConfig.toolbarConfig.menuItems[key]==undefined){return false}return _mpConfig.toolbarConfig.menuItems[key]}function loadDefaultMpSpace(url,config,showcase,callbacks=undefined){return __awaiter(this,void 0,void 0,(function*(){log.info("loadDefaultMpSpace(url: string, showcase: HTMLIFrameElement)",url,showcase);_isBasicDevApi=false;const formattedMPUrl=formatMatterportUrl(url);const iframeSrc=getIframeSrc(config,formattedMPUrl);log.info("__iframeSrc",iframeSrc);showcase.src=iframeSrc;_atwinShowcaseElements[showcase.id]=showcase;_atwinShowcaseWindows[showcase.id]=_atwinShowcaseElements[showcase.id].contentWindow;_atwinShowcaseElements[showcase.id].addEventListener("load",(()=>__awaiter(this,void 0,void 0,(function*(){log.info('iframe.addEventListener("load")');log.info("showcaseWindow",_atwinShowcaseWindows[showcase.id]);try{_atwin=yield _atwinShowcaseWindows[showcase.id].MP_SDK.connect(_atwinShowcaseWindows[showcase.id]);_atwinConnections[showcase.id]=_atwin;log.info("Hello Bundle SDK",_atwin);_atwinConnections[showcase.id].App.state.subscribe((appState=>__awaiter(this,void 0,void 0,(function*(){var _a;log.info("appState",appState);if(appState.phase===_atwinConnections[showcase.id].App.Phase.LOADING){log.info("App is loading...");registerCustomSpaceEvent("MEETING_CLOSED");if(callbacks&&callbacks.onLoad){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using LOADING_PHASE event type to trigger callbacks");log.info("Attempting to execute callback in LOADING state");yield callbacks.onLoad()}catch(error){log.error("Failed to execute callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.LOADING_PHASE)}else if(appState.phase===_atwinConnections[showcase.id].App.Phase.STARTING){log.info("App is starting...");yield get3DObjects(_spaceId);if("showOriginalTags"in config&&!config.showOriginalTags){yield disposeTags()}if(callbacks&&callbacks.onStart){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using STARTING_PHASE event type to trigger callbacks");log.info("Attempting to execute callback in STARTING state");yield callbacks.onStart()}catch(error){log.error("Failed to execute callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.STARTING_PHASE)}else if(appState.phase===_atwinConnections[showcase.id].App.Phase.PLAYING){log.info("App is playing iframe... ",showcase.id);log.info(`iframe ${showcase.id} spaceEventQueue `,spaceEventQueue.events);if("showOriginalTags"in config&&!config.showOriginalTags){yield disposeTags(showcase.id)}yield get3DObjects(_spaceId);yield getSweeps(showcase.id);_sceneObject=yield createSceneObject(showcase.id);_atwinSceneObjects[showcase.id]=_sceneObject;const[sceneObj]=yield _atwinConnections[showcase.id].Scene.createObjects(1);_tubes=sceneObj;yield setLighting(showcase.id);yield registerCustomLoaders(showcase.id);yield handleParamValuesInSpaceUrl(url);createNavigationControlComponent();if(isToolbarFeatureEnabled("roomCreation")||isToolbarFeatureEnabled("pipe")){createVerticeClickSpy();setupKeybindingEventListeners(showcase)}initCustomMinimapSettings();let pointerTexturePath="";if("bundlePath"in config){pointerTexturePath="https://cdn.jsdelivr.net/npm/architwin@latest/static/objective.png"}else{pointerTexturePath="../static/objective.png"}try{yield _atwinConnections[showcase.id].Asset.registerTexture("targetPointer",pointerTexturePath)}catch(error){log.error("targetPointer texture error ",error)}create3dMarker();create3DClickSpy();yield initBundleVersion(_mpConfig);try{_atwinConnections[showcase.id].Camera.pose.subscribe((function(pose){return __awaiter(this,void 0,void 0,(function*(){_currentCameraPose=pose;dispatchSpaceEvent(SPACE_EVENTS.CURRENT_CAMERA_POSE,_currentCameraPose);const hasElapsed=hasTimeElapsed(300);if(hasElapsed){log.info("_unrenderedObjects "+_unrenderedObjects.length);yield renderOnDemand()}if(hasTimeElapsed(1e3)&&_autoDetectNearbyObj){getNearbyObjects({type:"ALL",distance:2})}if(_mpConfig.mapConfig&&_mpConfig.mapConfig.showDirection){minimap.showDirection()}}))}))}catch(error){log.error("_atwin.Camera.pose.subscribe error ",error)}try{_atwinConnections[showcase.id].Camera.zoom.subscribe((function(zoom){return __awaiter(this,void 0,void 0,(function*(){_currentCameraZoom=zoom;dispatchSpaceEvent(SPACE_EVENTS.CURRENT_CAMERA_ZOOM,_currentCameraZoom)}))}))}catch(error){log.error("_atwin.Camera.zoom.subscribe error ",error)}try{_atwinConnections[showcase.id].Floor.current.subscribe((currentFloor=>__awaiter(this,void 0,void 0,(function*(){if(currentFloor.sequence===-1){log.info("Currently viewing all floors")}else if(currentFloor.sequence===undefined){if(currentFloor.id===undefined){log.info("Current viewing an unplaced unaligned sweep")}else{log.info("Currently transitioning between floors")}}else{_currentFloor=currentFloor;yield getFloorGroundLevel(currentFloor.id);log.info("Currently on floor",currentFloor.id);log.info("Current floor's sequence index",currentFloor.sequence);log.info("Current floor's name",currentFloor.name)}}))))}catch(error){log.error("_atwin.Floor.current.subscribe error ",error)}try{_atwinConnections[showcase.id].Sweep.current.subscribe((function(currentSweep){return __awaiter(this,void 0,void 0,(function*(){log.info("===currentSweep",currentSweep);if(currentSweep.id===""){log.info("Not currently stationed at a sweep position")}else{log.info("Else trigger in Sweep subscribe");_currentSweep=Object.assign({},currentSweep);videoAutoPlay();if(superviz.isMeetingInitialized){yield minimap.locateAvatar()}if(_mpConfig.mapConfig&&_mpConfig.mapConfig.showDirection){minimap.showDirection()}dispatchSpaceEvent(SPACE_EVENTS.ON_MOVE_SWEEP,_currentSweep)}}))}))}catch(error){log.error(" _atwin.Sweep.current.subscribe error ",error)}if(_mpConfig.sweepPuckConfig&&_mpConfig.sweepPuckConfig.color){yield _atwinConnections[showcase.id].Camera.pose.waitUntil((pose=>pose.position!==undefined));console.log("_currentCameraPose.position ",_currentCameraPose.position)}try{_atwinConnections[showcase.id].Sweep.data.subscribe({onAdded:function(index,item,_collection){if(_mpConfig.sweepPuckConfig&&_mpConfig.sweepPuckConfig.color){if(item.alignmentType==="aligned"){const sweepPuck=_sceneObject.addNode();const options={visible:true};if(Array.isArray(_mpConfig.sweepPuckConfig.color)){const color=_mpConfig.sweepPuckConfig.color.find((c=>c.sweepId===item.id));if(color){options.backgroundColor=color.backgroundColor;console.log("Matching id found for color")}}else{options.backgroundColor=_mpConfig.sweepPuckConfig.color}sweepPuck.addComponent(sweepPuckType,options);const offsetY=_currentCameraPose.position.y<0?Math.abs(_currentCameraPose.position.y)+.9:_currentCameraPose.position.y+.9;log.info("offsetY ",offsetY);sweepPuck.position.set(item.position.x,item.position.y-offsetY,item.position.z);sweepPuck.start()}}}})}catch(error){log.error("_atwin.Sweep.data.subscribe error",error)}try{_atwinConnections[showcase.id].Room.current.subscribe((room=>{log.info("Current room ",room.rooms[0]);_currentRoom=room.rooms[0];dispatchSpaceEvent(SPACE_EVENTS.ROOM_CHANGED,room.rooms[0])}))}catch(error){log.error("_atwin.Room.current.subscribe error",error)}_atwinConnections[showcase.id].Mode.current.subscribe((mode=>{_currentViewMode=mode;if(mode=="mode.floorplan"){if(_transformComponent){_transformComponent.inputs.size=.01}if(isToolbarFeatureEnabled("roomCreation")){log.info("_verticeComponentsCollection ",_verticeComponentsCollection);toggleVerticeRingVisibility(true)}}else{if(_transformComponent){_transformComponent.inputs.size=1}if(isToolbarFeatureEnabled("roomCreation")){if(_verticeComponentsCollection&&_verticeComponentsCollection.length>0){toggleVerticeRingVisibility()}}}}));_atwinConnections[showcase.id].Pointer.intersection.subscribe((function(intersection){domMousePosition=intersection.position;_intersectionData=intersection;if(drawMode&&_thisVertexNode!==undefined){if(_visualize===true&&_intersectionData.object==="intersectedobject.model"){let tempPath=[..._thisVertexPath];tempPath.push(Object.assign({},_intersectionData.position));_activeVertex.inputs.collider=false;_activeVertex.inputs.path=tempPath}}}));_atwinConnections[showcase.id].Tag.data.subscribe({onAdded(index,item,collection){console.log("Tag added to the collection",index,item,collection)},onRemoved(index,item,collection){console.log("Tag removed from the collection",index,item,collection)},onUpdated(index,item,collection){console.log("Tag media updated in place in the collection",index,item,collection)},onCollectionUpdated(collection){console.log("The full collection of Tags looks like",collection);_tagDataCollection=collection}});if(callbacks&&callbacks.onPlay){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using PLAYING_PHASE event type to trigger callbacks");log.info("Attempting to execute callback in PLAYING state");yield callbacks.onPlay()}catch(error){log.error("Failed to execute callback. Skipping to next phase",error)}}try{_atwinConnections[showcase.id].Pointer.intersection.subscribe((intersectionData=>{dispatchSpaceEvent(SPACE_EVENTS.POINTER_INTERSECTION_DATA,intersectionData)}))}catch(error){log.error("_atwin.Pointer.intersection.subscribe error",error)}dispatchSpaceEvent(SPACE_EVENTS.PLAYING_PHASE,_atwinConnections[showcase.id]);if(config.mapConfig&&"mapId"in config.mapConfig){try{yield minimap.setMap(_atwinConnections[showcase.id],_appKey,_mpConfig.mapConfig.mapId)}catch(error){isCdnMapDataAvailable=false;log.error("Matterport map CDN unavailable",error)}}if(config.mapConfig&&((_a=config.mapConfig)===null||_a===void 0?void 0:_a.enableCustomMap)){try{minimap.setMpSDK(_atwinConnections[showcase.id]);minimap.setCustomMap(_atwinConnections[showcase.id])}catch(error){log.error("Error setCustomMap",error)}}try{_modelDetails=yield _atwinConnections[showcase.id].Model.getDetails()}catch(error){log.error(error)}try{subscribeSpaceEvent(SPACE_EVENTS.ROOM_CHANGED,(room=>{if(room){const viewpoints=_3DXObjects.filter((obj=>obj.object.object_data.object_type==="VIEWPOINT"));if(viewpoints&&viewpoints.length>0){viewpoints.forEach((vp=>{let minRoomLength;Object.values(room.size).forEach((val=>{if(minRoomLength){if(minRoomLength>val){minRoomLength=val-1}}else{minRoomLength=val-1}}));log.info("Max line length ",minRoomLength);setViewpointLineLength(minRoomLength,vp.object.id)}))}}}))}catch(error){log.error(error)}if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.active){log.info("Displaying toolbar");const spaceObjects=_3DXObjects.map((obj=>obj.object));initToolbarUI({objects:spaceObjects});themeManager(_mpConfig.toolbarConfig.themeConfig)}}if(isToolbarFeatureEnabled("bim")){initBimSettings()}}))));return _atwinConnections[showcase.id]}catch(e){log.error(e)}}))));return _atwinConnections[showcase.id]}))}function loadAtwinSpace(url,auth,config,showcase,callbacks=undefined){var _a;return __awaiter(this,void 0,void 0,(function*(){log.info("loadAtwinSpace(url: string, auth: { apiKey: string; user: IUser },config: IMPConfig, showcase: HTMLIFrameElement)");const spaceId=getSpaceId(url);log.info("spaceId",spaceId);_spaceId=spaceId;if(!spaceId){log.error("spaceId is undefined");return}if(_isInitialLoad){const authUser=yield loginUser(auth.user);if(authUser){_userId=authUser.id}else{log.error("Custom error: authUser is undefined",authUser);return}}const space=yield getSpace(spaceId);if(!space){log.error("space is undefined");return}setSpace(space);const atwinFloors=yield getAtwinFloors(spaceId);if(!atwinFloors){log.error("atwinFloors is undefined");return}setAtwinFloors(atwinFloors);const atwinLabels=yield getAtwinLabels();if(!atwinLabels){log.error("atwinLabels is undefined");return}setAtwinLabels(atwinLabels);const iframeSrc=getIframeSrc(config,space.space_url);log.info("__iframeSrc",iframeSrc);showcase.src=iframeSrc;const tags=yield getTags(space);if(!tags){log.info("tags is undefined");return}setTags(tags);if(_isInitialLoad){(_a=showcase.contentWindow)===null||_a===void 0?void 0:_a.location.reload()}_isInitialLoad=false;const showcaseWindow=showcase.contentWindow;showcase.addEventListener("load",(()=>__awaiter(this,void 0,void 0,(function*(){log.info('iframe.addEventListener("load")');log.info("showcaseWindow",showcaseWindow);if(showcaseWindow.MP_SDK){try{_atwin=yield showcaseWindow.MP_SDK.connect(showcaseWindow);log.info("Hello Bundle SDK",_atwin);onShowcaseConnect(callbacks,url)}catch(e){log.error(e)}}else{log.info("No showcaseWindow.MP_SDK found")}}))))}))}function onShowcaseConnect(callbacks=undefined,url){return __awaiter(this,void 0,void 0,(function*(){log.info("onShowcaseConnect()");try{const modelData=yield _atwin.Model.getData();log.info("Model sid:"+modelData.sid);_atwin.App.state.subscribe((appState=>__awaiter(this,void 0,void 0,(function*(){log.info("appState",appState);if(appState.phase===_atwin.App.Phase.LOADING){log.info("App is loading...");registerCustomSpaceEvent("MEETING_CLOSED");yield get3DObjects(_spaceId);if(callbacks&&callbacks.onLoad){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using LOADING_PHASE event type to trigger callbacks");log.info("Invoking onLoad callback");yield callbacks.onLoad()}catch(error){log.error("Error in invoking onLoad callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.LOADING_PHASE)}else if(appState.phase===_atwin.App.Phase.STARTING){log.info("App is starting...");yield disposeTags();yield get3DObjects(_spaceId);if(callbacks&&callbacks.onStart){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using STARTING_PHASE event type to trigger callbacks");log.info("Invoking onStart callback");yield callbacks.onStart()}catch(error){log.error("Error in invoking onStart callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.STARTING_PHASE)}else if(appState.phase===_atwin.App.Phase.PLAYING){log.info("App is playing...");try{yield showTags(_tags)}catch(error){log.error(error)}yield getSweeps();_sceneObject=yield createSceneObject();yield setLighting();yield registerCustomLoaders();yield handleParamValuesInSpaceUrl(url);let pointerTexturePath="";if("bundlePath"in _mpConfig){pointerTexturePath="../../node_modules/architwin/static/objective.png"}else{pointerTexturePath="../static/objective.png"}yield _atwin.Asset.registerTexture("targetPointer",pointerTexturePath);create3dMarker();_atwin.Floor.current.subscribe((currentFloor=>__awaiter(this,void 0,void 0,(function*(){if(currentFloor.sequence===-1){log.info("Currently viewing all floors")}else if(currentFloor.sequence===undefined){if(currentFloor.id===undefined){log.info("Current viewing an unplaced unaligned sweep")}else{log.info("Currently transitioning between floors")}}else{_currentFloor=currentFloor;yield getFloorGroundLevel(currentFloor.id);log.info("Currently on floor",currentFloor.id);log.info("Current floor's sequence index",currentFloor.sequence);log.info("Current floor's name",currentFloor.name)}}))));_atwin.Sweep.current.subscribe((function(currentSweep){return __awaiter(this,void 0,void 0,(function*(){log.info("===currentSweep",currentSweep);if(currentSweep.sid===""){log.info("Not currently stationed at a sweep position");if(socketIo.isInitializeSocketIo&&minimap.isMinimapNavigation===false){syncParticipantsLocation(domMousePosition,_currentCameraPose.rotation)}}else{log.info("====Sweep subscription triggered");_currentSweep=currentSweep;if(socketIo.isInitializeSocketIo){syncParticipantsLocation(currentSweep.position,_currentCameraPose.rotation)}videoAutoPlay();if(superviz.isMeetingInitialized){yield minimap.locateAvatar()}if(_mpConfig.mapConfig&&_mpConfig.mapConfig.showDirection){minimap.showDirection()}}}))}));_atwin.Camera.pose.subscribe((function(pose){return __awaiter(this,void 0,void 0,(function*(){_currentCameraPose=pose;const hasElapsed=hasTimeElapsed(300);if(hasElapsed){log.info("_unrenderedObjects "+_unrenderedObjects.length);yield renderOnDemand()}if(hasTimeElapsed(1e3)&&_autoDetectNearbyObj){getNearbyObjects({type:"ALL",distance:2})}if(_mpConfig.mapConfig&&_mpConfig.mapConfig.showDirection){minimap.showDirection()}}))}));_atwin.Mode.current.subscribe((mode=>{_currentViewMode=mode}));if(_mpConfig.mapConfig&&"mapId"in _mpConfig.mapConfig){try{yield minimap.setMap(_atwin,_appKey,_mpConfig.mapConfig.mapId)}catch(error){log.error("Fatal error while loading minimap",error)}}if(callbacks&&callbacks.onPlay){try{log.warn("DEPRECATED: Please use subscribeSpaceEvent method using PLAYING_PHASE event type to trigger callbacks");log.info("Invoking onPlay callback");yield callbacks.onPlay()}catch(error){log.error("Error in invoking onPlay callback. Skipping to next phase",error)}}dispatchSpaceEvent(SPACE_EVENTS.PLAYING_PHASE);try{_modelDetails=yield _atwin.Model.getDetails()}catch(error){log.error(error)}if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.active){log.info("Displaying toolbar");const spaceObjects=_3DXObjects.map((obj=>obj.object));initToolbarUI({objects:spaceObjects});themeManager(_mpConfig.toolbarConfig.themeConfig)}}}))))}catch(e){log.error(e)}}))}function getAtwinFloors(showcase_id){return __awaiter(this,void 0,void 0,(function*(){log.info("getAtwinFloors(showcase_id: string)",showcase_id);try{const response=yield _api.get(`/v1/floors/showcase-id/${showcase_id}`);log.info("response",response);if(response.status===200){if(response.data&&response.data.data){return response.data.data}log.error("Error in getting atwin floors")}else{log.error("Error in getAtwinFloors()"+response)}}catch(error){log.error(error)}return null}))}function setAtwinFloors(floors){log.info("setAtwinFloors()",floors);_atwinFloors=floors}function getFloors(){return _atwinFloors}function getAtwinLabels(){return __awaiter(this,void 0,void 0,(function*(){log.info("getAtwinLabels()");try{const response=yield _api.get(`/v1/labels.json`);log.info("response",response);if(response.status===200){if(response.data&&response.data.data){return response.data.data}log.error("Error in getting atwin labels")}else{log.error("Error in getAtwinLabels()"+response)}}catch(error){log.error(error)}return null}))}function setAtwinLabels(labels){log.info("setAtwinLabels()",labels);_atwinLabels=labels}function getLabels(){return _atwinLabels}function hasTimeElapsed(maxTime){const currentTimestamp=Date.now();const differenceInMilliseconds=(currentTimestamp-_previousTimeStamp)%1e3;_previousTimeStamp=currentTimestamp;if(differenceInMilliseconds>=maxTime){return true}else{return false}}function getNearbyUnrenderedObjects(payload){let toBeRendered=[];const currentPose={x:_currentCameraPose.position.x,y:_currentCameraPose.position.y,z:_currentCameraPose.position.z};toBeRendered=_unrenderedObjects.filter((obj=>{const obj_pos={x:obj.object_position.x,y:obj.object_position.y,z:obj.object_position.z};const distance=calculateDistance(currentPose,obj_pos);return distance<payload.distance}));const filtered=_unrenderedObjects.filter((obj=>toBeRendered.indexOf(obj)===-1));_unrenderedObjects=filtered;log.info("render toBeRendered "+toBeRendered.length);return toBeRendered}function getNearbyObjects(payload){if(payload.type===undefined||payload.type===""){payload.type="ALL"}if(payload.distance===undefined){payload.distance=2}const pos1={x:_currentCameraPose.position.x,y:_currentCameraPose.position.y,z:_currentCameraPose.position.z};let three_d=[];let videos=[];let slideshows=[];if(payload.type==="ALL"||"3DX"){three_d=_3DXObjects.filter((obj=>{const pos2={x:obj.node.position.x,y:obj.node.position.y,z:obj.node.position.z};const distance=calculateDistance(pos1,pos2);log.info("3DX Distance: "+distance);return distance<payload.distance}))}if(payload.type==="ALL"||"VIDEO"){videos=_videos.filter((vid=>{const pos2={x:vid.node.position.x,y:vid.node.position.y,z:vid.node.position.z};const distance=calculateDistance(pos1,pos2);log.info("Video Distance: "+distance);return distance<payload.distance}))}if(payload.type==="ALL"||"SLIDESHOW"){slideshows=_allSlideShow.filter((slide=>{const pos2={x:slide.node.position.x,y:slide.node.position.y,z:slide.node.position.z};const distance=calculateDistance(pos1,pos2);log.info("Slideshow Distance: "+distance);return distance<payload.distance}))}log.info("nearby3DXObjects "+three_d.length);log.info("nearbyVideos "+videos.length);log.info("nearbySlideshows "+slideshows.length);return{x3d:three_d,videos:videos,slideshows:slideshows}}function setRenderDistance(distance){if(!Number.isInteger(distance)){log.error("Render distance argument is not a valid number");return}_renderDistance=distance}function createSceneObject(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;const[sceneObject]=yield sdk.Scene.createObjects(1);return sceneObject}))}function show3DObjects(object,options=null){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){let sceneObj;if(options&&options.iframeId&&_atwinSceneObjects[options.iframeId]){sceneObj=_atwinSceneObjects[options.iframeId]}else{sceneObj=_sceneObject}const modelNode=sceneObj.addNode();if(options==null){options={url:(_a=object.object_data)===null||_a===void 0?void 0:_a.amazon_uri,type:object.object_data.object_type}}else{options.url=(_b=object.object_data)===null||_b===void 0?void 0:_b.amazon_uri,options.type=object.object_data.object_type}if(object.media_viewer_id&&object.media_viewer_id!==null){options.mediaViewerId=object.media_viewer_id}const component=modelNode.addComponent(getComponentLoader(object.object_data),options);log.info("component",component);if(!component.inputs){log.error("component.inputs is undefined");return}const objTransformation={object_position:typeof object.object_position!=="string"?object.object_position:JSON.parse(object.object_position),object_rotation:object.object_rotation,object_scale:object.object_scale};setObjectTransformation(modelNode,objTransformation);let type;if(object.object_data.object_type=="image"||object.object_data.object_type=="video"){type="FRAME"}else{type=object.object_data.object_type}modelNode.start();log.info("show3dobject object.id",object.id);const newObject={object:object,component:component,node:modelNode,type:type};if(options&&options.iframeId)newObject.iframeId=options.iframeId;_3DXObjects.push(newObject);log.info("objectType",object.object_data.object_type);if(supportedMediaTypes[9]===object.object_data.object_type){log.info(`${object.object_data.object_type} matches with ${supportedMediaTypes[9]}`)}else{log.info(`${object.object_data.object_type} does not match with ${supportedMediaTypes[9]}`)}log.info("_viewMode",_viewMode);log.info("object_type",object.object_data.object_type);if(_viewMode==="interactive"&&object.object_data.object_type=="GLB"){const eventPath=_sceneObject.addEmitPath(component,"gltfevents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent));_sceneObject.addInputPath(component,"animationState",`animationState_${object.id}`)}else if(_viewMode==="interactive"&&object.object_data.object_type=="BOX"){const eventPath=_sceneObject.addEmitPath(component,"boxEvents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent));_sceneObject.addInputPath(component,"basePosition",`basePosition_${object.id}`);_sceneObject.addInputPath(component,"localPosition",`localPosition_${object.id}`)}else if(_viewMode==="interactive"&&supportedMediaTypes.includes(object.object_data.object_type)){log.info("Adding emit path for plane event");if(!options.hudMode&&options.fitToScreen==undefined&&object.showcase_object_name!==cursorMarker){const emitPath=_sceneObject.addEmitPath(component,"planeEvents");_sceneObject.spyOnEvent(new EmitSpy(emitPath,modelNode,component,object,dispatchSpaceEvent))}_sceneObject.addInputPath(component,"url",`url_${object.id}`);_sceneObject.addInputPath(component,"type",`type_${object.id}`);_sceneObject.addInputPath(component,"visible",`visible_${object.id}`);_sceneObject.addInputPath(component,"isFirstLoad",`isFirstLoad_${object.id}`);_sceneObject.addInputPath(component,"fitToScreen",`fitToScreen_${object.id}`)}else if(_viewMode==="interactive"&&object.object_data.object_type=="MARKUP"){const eventPath=_sceneObject.addEmitPath(component,"css3devents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent));_sceneObject.addInputPath(component,"title",`title_${object.id}`);_sceneObject.addInputPath(component,"text",`text_${object.id}`);_sceneObject.addInputPath(component,"textColor",`textColor_${object.id}`);_sceneObject.addInputPath(component,"backgroundColor",`backgroundColor_${object.id}`)}else if(_viewMode==="interactive"&&object.object_data.object_type=="HUD"){const eventPath=_sceneObject.addEmitPath(component,"hudevents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent));_sceneObject.addInputPath(component,"url",`url_${object.id}`);_sceneObject.addInputPath(component,"mediaType",`mediaType_${object.id}`);_sceneObject.addInputPath(component,"dockWidth",`dockWidth_${object.id}`);_sceneObject.addInputPath(component,"dockHeight",`dockHeight_${object.id}`);_sceneObject.addInputPath(component,"dockPosX",`dockPosX_${object.id}`);_sceneObject.addInputPath(component,"dockPosY",`dockPosY_${object.id}`);_sceneObject.addInputPath(component,"dockPosZ",`dockPosZ_${object.id}`)}else if(object.object_data.object_type=="VIEWPOINT"){_sceneObject.addInputPath(component,"maxLineLength",`maxLineLength_${object.id}`)}else if(_viewMode==="interactive"&&object.object_data.object_type=="FBX"){const eventPath=_sceneObject.addEmitPath(component,"fbxevents");_sceneObject.spyOnEvent(new ClickSpy(eventPath,modelNode,component,object,dispatchSpaceEvent))}}))}function setAnimationState(action,modelId){const actions=["play","stop"];let animationStatePath;if(actions.includes(action)){if(modelId){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`animationState_${modelId}`){animationStatePath=path}}animationStatePath.set(action);return}log.error("id of object is undefined");return}log.error("Argument for action is not valid");return}function show3dText(object,options=null,direction="top"){const modelNode=_sceneObject.addNode();const text=options.text;options={text:text,fontSize:.09,background:false,centered:true,height:.001,curveSegments:12,bevelEnabled:false,bevelThickness:10,bevelSize:8,bevelOffset:0,bevelSegments:5};const component=modelNode.addComponent(getComponentLoader(object.object_data),options);if(!component.inputs){log.error("component.inputs is undefined");return}const rotation={x:currentObjTransform.object_rotation._x,y:currentObjTransform.object_rotation._y,z:currentObjTransform.object_rotation._z};setTextDimensionPosition(modelNode,component,direction,currentObjTransform.object_position,rotation);modelNode.start();_textDimensionIds.push(modelNode.id);_sceneObject.addInputPath(component,"visible",`visible_${modelNode.id}`);if(direction=="left"){_sceneObject.addInputPath(component,"text",`textDepth_${modelNode.id}`)}else if(direction=="right"){_sceneObject.addInputPath(component,"text",`textHeight_${modelNode.id}`)}else if(direction=="bottom"){_sceneObject.addInputPath(component,"text",`textBottom_${modelNode.id}`)}return{node:modelNode,component:component}}function showObjectDimensions(selected){log.info("Selected object",selectedObject);const textObj=selected.object;textObj.object_data.object_type="TEXT";const THREE=selected.component.context.three;const objectModel=selected.component.mesh;const boundingBox=(new THREE.Box3).setFromObject(objectModel);const width=boundingBox.max.x-boundingBox.min.x;const depth=boundingBox.max.y-boundingBox.min.y;const height=boundingBox.max.z-boundingBox.min.z;_textDimensions.top=show3dText(textObj,{text:selected.object.object_data.name},"top");_textDimensions.bottom=show3dText(textObj,{text:`W: ${meterToMillimeter(width)}mm`},"bottom");_textDimensions.left=show3dText(textObj,{text:`D: ${meterToMillimeter(depth)}mm`},"left");_textDimensions.right=show3dText(textObj,{text:`H: ${meterToMillimeter(height)}mm`},"right");log.info("Selected object",selectedObject)}function hideObjectDimensions(){let visiblePath;if(!_textDimensions.top){log.error("_textDeminsion is undefined");return}_textDimensionIds.forEach((index=>{for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`visible_${_textDimensionIds[index]}`){visiblePath=path}}visiblePath.set(false)}))}function setTextDimensionLabel(node,size){let textPath;for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`textDepth_${node.id}`){textPath=path;textPath.set(`D: ${meterToMillimeter(size.z)}mm`)}if(desc.id===`textHeight_${node.id}`){textPath=path;textPath.set(`H: ${meterToMillimeter(size.y)}mm`)}if(desc.id===`textBottom_${node.id}`){textPath=path;textPath.set(`W: ${meterToMillimeter(size.x)}mm`)}}}function setTextDimensionPosition(node,component,direction,position,rotation){log.info("setTextDimensionPosition()");const THREE=selectedObject.component.context.three;const objectModel=selectedObject.component.mesh;const boundingBox=(new THREE.Box3).setFromObject(objectModel);const width=boundingBox.max.x-boundingBox.min.x;const depth=boundingBox.max.y-boundingBox.min.y;const height=boundingBox.max.z-boundingBox.min.z;let newPosition;if(direction==="top"){newPosition={x:position.x-rotation.y,y:position.y+height/2,z:position.z-depth+rotation.z}}else if(direction==="bottom"){newPosition={x:position.x,y:position.y-height/2,z:position.z-depth/3}}else if(direction==="left"){newPosition={x:position.x-width/1.3,y:position.y-height/2,z:position.z-depth+rotation.y}}else if(direction==="right"){newPosition={x:position.x+width/1.3-rotation.y,y:position.y,z:position.z-depth}}const objTransformation={object_position:{x:newPosition.x,y:newPosition.y,z:newPosition.z},object_rotation:rotation,object_scale:{x:.001,y:.001,z:.001}};setTextDimensionLabel(node,{x:width,y:depth,z:height});setObjectTransformation(node,objTransformation)}function setUnrenderedObjects(payload){log.info("setUnrenderedObjects()");if(payload){for(let i=0;i<payload.length;i++){if(payload[i].object_data){_unrenderedObjects.push(payload[i])}else{log.warn(`Element #${i} in your array has no object_data set. Skipping element to avoid errors`)}}log.info(`Setting ${payload.length} objects`);return}log.error("Error in setUnrenderedObjects: Payload is undefined");return}function renderOnDemand(){return __awaiter(this,void 0,void 0,(function*(){if(_unrenderedObjects.length!==0){log.info("renderOnDemand()");registerCustomLoaders();const objects=getNearbyUnrenderedObjects({type:"",distance:_renderDistance});objects.forEach((obj=>__awaiter(this,void 0,void 0,(function*(){var _a,_b,_c,_d;if(((_a=obj.object_data)===null||_a===void 0?void 0:_a.object_type)==="FBX"||((_b=obj.object_data)===null||_b===void 0?void 0:_b.object_type)==="GLB"||supportedMediaTypes.includes(obj.object_data.object_type)){yield show3DObjects(obj)}else if(((_c=obj.object_data)===null||_c===void 0?void 0:_c.object_type)==="MP4"){yield showVideoObjects(obj)}else if(((_d=obj.object_data)===null||_d===void 0?void 0:_d.object_type)==="ZIP"){yield showSlideScreenModel(obj)}}))))}}))}function getIframeSrc(config,url){log.info("getIframeSrc()",config,url);const modelId=url.split("?m=")[1];if(!modelId){log.error("modelId is undefined");return""}let src=``;if("bundlePath"in config){const lastString=config.bundlePath.slice(-1);if(lastString!=="/"){config.bundlePath+="/"}src+=`${config.bundlePath}showcase.html?m=${modelId}&applicationKey=${_appKey}&newtags=1`}else{if(config.prod===undefined||config.prod===null){config.prod=true}if(config.prod){src+=`/node_modules/architwin/bundle/showcase.html?m=${modelId}&applicationKey=${_appKey}&newtags=1`}else{src+=`architwin/bundle/showcase.html?m=${modelId}&applicationKey=${_appKey}&newtags=1`}}for(let param of urlParams){if(config[param]!=undefined){src+=`&${param}=${config[param]}`}}log.info("__src",src);return src}function loginUser(user){return __awaiter(this,void 0,void 0,(function*(){log.info("loginUser(user)",user);try{const response=yield _api.post("/cas/tickets?email="+user.email+"&password="+user.password);log.info("=== response",response);if(response.status===200){log.info("Response data",response.data.data);if(!response.data||!response.data.data||!response.data.data.auth||!response.data.data.auth.user){return null}return response.data.data.auth.user}else{return null}}catch(error){log.info("Custom error "+error);return null}}))}function getSpace(spaceId){return __awaiter(this,void 0,void 0,(function*(){log.info("getShowcase(spaceId: string)",spaceId);try{const response=yield _api.get(`/v1/showcases/id/${spaceId}`);log.info("response",response);if(response.status===200){if(response.data&&response.data.data&&response.data.data.length>0){return response.data.data[0]}log.error("Error in getting space")}else{log.error("Error in fetchShowcase()"+response)}}catch(error){log.error(error)}return null}))}function getSpaceId(url){log.info("getSpaceId()",url);const urlArray=url.split(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/);const path=urlArray[5];const spaceId=path.split("/")[3];log.info("urlArray",urlArray);log.info("path",path);if(!spaceId){log.error("spaceId is undefined");return}return spaceId}function setSpace(space){log.info("setSpace(space: ISpace)",space);_space=space}function get3DObjects(showcase_id){return __awaiter(this,void 0,void 0,(function*(){let apiEndpoint="";if(_unrenderedObjects.length!==0){log.info("Passed unrenderedObjects",_unrenderedObjects);const threed_objects=_unrenderedObjects.map((showcase=>{if(showcase.object_position){showcase.object_position=typeof showcase.object_position==="string"?JSON.parse(showcase.object_position):showcase.object_position}if(showcase.object_rotation){showcase.object_rotation=typeof showcase.object_rotation==="string"?JSON.parse(showcase.object_rotation):showcase.object_rotation}if(showcase.object_scale){showcase.object_scale=typeof showcase.object_scale==="string"?JSON.parse(showcase.object_scale):showcase.object_scale}return showcase}));_unrenderedObjects=threed_objects;return threed_objects}if(showcase_id&&apiEndpoint===""){try{const id=parseInt(showcase_id);log.info("showcase_id "+id);const response=yield _api.get(`/v1/showcase-objects/showcase-id/${id}`);const showcase_objects=response.data.data;const object_ids=showcase_objects.map((obj=>obj.object_id));try{const response=yield _api.get(`/v1/objects`);log.info("Finished getting objects");const object_data=response.data.data.filter((obj=>object_ids.includes(obj.id)));_assetLibrary=object_data;log.info("object_data length "+object_data.length);const objectDataMap=object_data.reduce(((map,obj)=>{map[obj.id]=obj;return map}),{});const threed_objects=showcase_objects.map((showcase=>{const target=objectDataMap[showcase.object_id];if(target){showcase.object_data=target}if(showcase.object_position){showcase.object_position=typeof showcase.object_position==="string"?JSON.parse(showcase.object_position):showcase.object_position}if(showcase.object_rotation){showcase.object_rotation=typeof showcase.object_rotation==="string"?JSON.parse(showcase.object_rotation):showcase.object_rotation}if(showcase.object_scale){showcase.object_scale=typeof showcase.object_scale==="string"?JSON.parse(showcase.object_scale):showcase.object_scale}return showcase}));_unrenderedObjects=threed_objects;return threed_objects}catch(error){log.error("threed_objects "+error)}}catch(error){log.error("get3DObjectsByShowcaseId "+error)}}else if(showcase_id&&apiEndpoint!==""){const lastString=apiEndpoint.slice(-1);if(lastString!=="/"){apiEndpoint+="/"}if(apiEndpoint==="/v1/space_objects/space_uuid/"){log.info("Fetching from Azusa API",apiEndpoint);try{const response=yield _api.get(`${apiEndpoint}${showcase_id}`);if(response.data.status==="success"){log.error("Request succeess ",response.data);const returnedSpaceObjects=response.data;const spaceObjects=returnedSpaceObjects.data.map((obj=>{obj.space_objects.object_position=typeof obj.space_objects.object_position==="string"?JSON.parse(obj.space_objects.object_position):obj.space_objects.object_position;obj.space_objects.object_rotation=typeof obj.space_objects.object_rotation==="string"?JSON.parse(obj.space_objects.object_rotation):obj.space_objects.object_rotation;obj.space_objects.object_scale=typeof obj.space_objects.object_scale==="string"?JSON.parse(obj.space_objects.object_scale):obj.space_objects.object_scale;obj.space_objects.object_data=obj.objects;return obj.space_objects}));log.info("Space objects # ",spaceObjects.length);_unrenderedObjects=spaceObjects;return spaceObjects}else{log.error("Request failed ",response.data)}}catch(error){log.error("Failed to fetch from Azusa API",error)}}log.info("apiUrl does not match space_objects api url",apiEndpoint);return[]}return[]}))}function getCurrentSweep(){return _currentSweep}function getCurrentCameraPose(){return _currentCameraPose}function getCurrentCameraZoom(){return _currentCameraZoom}function getCameraPosition(){return _currentCameraPose.position}function getCurrentSweepPosition(){return _currentSweep.position}function getCurrentFloor(){return _currentFloor}function getSweeps(iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("Getting Sweeps in Space");const sdk=iframeId?_atwinConnections[iframeId]:_atwin;sdk.Sweep.data.subscribe({onCollectionUpdated:function(collection){log.info("Sweeps In Space",Object.assign({},collection));if(!collection){log.info("No Sweeps in loaded Space")}const _sw=Object.values(collection);_sweeps=_sw.map((item=>Object.assign({},item)));dispatchSpaceEvent(SPACE_EVENTS.SWEEP_COLLECTION_UPDATED,Object.values(collection))}});return sweeps}))}function getAllSweeps(){return sweeps}function moveToSweep(sweepId,rotation,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("moveToSweep()",sweepId);let sdk;if(iframeId){sdk=_atwinConnections[iframeId]}const transition=sdk?sdk.Sweep.Transition.FLY:_atwin.Sweep.Transition.FLY;const transitionTime=2e3;log.info("Sweep Move",sweepId,_currentSweep.id);if(rotation){if(sdk){sdk.Sweep.moveTo(sweepId,{rotation:rotation,transition:transition,transitionTime:transitionTime}).then((function(nextMode){dispatchSpaceEvent(SPACE_EVENTS.ARRIVED_ON_SWEEP,nextMode)}))}else{_atwin.Sweep.moveTo(sweepId,{rotation:rotation,transition:transition,transitionTime:transitionTime}).then((function(nextMode){dispatchSpaceEvent(SPACE_EVENTS.ARRIVED_ON_SWEEP,nextMode)}))}return}if(sdk){if(sweepId!==_currentSweep.id){sdk.Sweep.moveTo(sweepId,{transition:transition,transitionTime:transitionTime}).then((function(nextMode){dispatchSpaceEvent(SPACE_EVENTS.ARRIVED_ON_SWEEP,nextMode)}))}}else{_atwin.Sweep.moveTo(sweepId,{transition:transition,transitionTime:transitionTime}).then((function(nextMode){dispatchSpaceEvent(SPACE_EVENTS.ARRIVED_ON_SWEEP,nextMode)}))}}))}function getNearbySweeps(sweepId){return __awaiter(this,void 0,void 0,(function*(){if(sweepId){const nearby=yield sweeps.find((item=>item.id==sweepId)).neighbors;log.info("Nearby Sweeps",nearby);return nearby}else{log.info("No Nearby Sweeps")}}))}function disableSweeps(sweeps,iframeId){return __awaiter(this,void 0,void 0,(function*(){let sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sdk){console.log("@____SDK LOADED:",iframeId,sdk);if(sweeps.length){const sweepId=Object.values(sweeps).map((sweep=>sweep.id));sdk.Sweep.disable(...sweepId);return}sdk.Sweep.data.subscribe({onCollectionUpdated:function(collection){const sweepId=Object.values(collection).map((sweep=>sweep.id));sdk.Sweep.disable(...sweepId)}})}}))}function enableSweeps(sweeps,iframeId){return __awaiter(this,void 0,void 0,(function*(){let sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sdk){console.log("@____SDK LOADED:",iframeId,sdk);if(sweeps.length){const sweepId=Object.values(sweeps).map((sweep=>sweep.id));sdk.Sweep.enable(...sweepId);return}sdk.Sweep.data.subscribe({onCollectionUpdated:function(collection){const sweepId=Object.values(collection).map((sweep=>sweep.id));sdk.Sweep.enable(...sweepId)}})}}))}function enableSweep(sweepIds,iframeId){return __awaiter(this,void 0,void 0,(function*(){let sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sweepIds&&sweepIds.length>0){yield sdk.Sweep.enable(...sweepIds);return}const sweep=getCurrentSweep();yield sdk.Sweep.enable(...[sweep.uuid]);return}))}function disableSweep(sweepIds,iframeId){return __awaiter(this,void 0,void 0,(function*(){let sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sweepIds&&sweepIds.length>0){yield sdk.Sweep.disable(...sweepIds);return}const sweep=getCurrentSweep();yield sdk.Sweep.disable(...[sweep.uuid]);return}))}function getComponentLoader(object){log.info("getComponentLoader()",object);if(object){let index=object.object_type;const imageTypes=["PNG","JPG","JPEG","GIF","IMAGE"];const videoTypes=["MP4","MOV","WMV","FLV","AVI","VIDEO"];const pdfFile=["PDF"];log.info("__object.object_type",object.object_type);if(imageTypes.includes(object.object_type.toUpperCase())){log.info("====Loader planeType IMAGE");return planeTypeImage}if(videoTypes.includes(object.object_type.toUpperCase())){log.info("====Loader planeType VIDEO");return planeTypeVideo}if(pdfFile.includes(object.object_type.toUpperCase())){log.info("====Loader planeType PDF");return planeTypePdf}let component={FBX:fbxType,GLB:gltfType,MP4:"liveVideo",ZIP:"slideScreenModel",BOX:boxType,TEXT:textType,MARKUP:css3DType,PDF:planeType,VIEWPOINT:viewpointType,POLYGON:bufferGeometryType,PATHLINE:pathLineType,PATHLINEPOINT:pathPointType};log.info("__component",component);log.info("__index",index);log.info("__component",component);log.info("__index",index);log.info("====Loader",component[index]);return component[index]||""}return""}function setSelectedObject(data,node,component,type){log.info("setSelectedObject()",data);selectedObject={object:data,component:component,node:node,type:type};if(selectedObject.type=="POLYGON"){_currentPolygon=selectedObject}if(selectedObject.type=="PATHLINE"){_currentPipe=selectedObject}const previousCoords={object_position:selectedObject.node.obj3D.position,object_rotation:selectedObject.node.obj3D.rotation,object_scale:selectedObject.node.obj3D.scale};_previousAction=JSON.stringify(previousCoords);actionHistory.push(_previousAction);log.info("Previous transform "+JSON.stringify(previousObjTransform));log.info("setSelectedObject()")}function get3DXObjects(filters){if(filters){let filteredObjects=[];if(filters.type)filteredObjects=_3DXObjects.filter((obj=>obj.type==filters.type));if(filters.object_type)filteredObjects=_3DXObjects.filter((obj=>obj.object.object_data.object_type==filters.object_type));if(filters.iframeId)filteredObjects=_3DXObjects.filter((obj=>obj.iframeId==filters.iframeId));if(filters.showcase_object_name)filteredObjects=_3DXObjects.filter((obj=>obj.object.showcase_object_name==filters.showcase_object_name));return filteredObjects}return _3DXObjects.filter((obj=>obj.object.showcase_object_name!==cursorMarker))}function set3DXObjects(objects){_3DXObjects=objects}function clear3DXObjects(filters){if(filters){let filteredObjects=[];if(filters.type)filteredObjects=_3DXObjects.filter((obj=>obj.type!=filters.type));if(filters.object_type)filteredObjects=_3DXObjects.filter((obj=>obj.object.object_data.object_type!=filters.object_type));if(filters.iframeId)filteredObjects=_3DXObjects.filter((obj=>obj.iframeId!=filters.iframeId));_3DXObjects=filteredObjects;return}_3DXObjects=[];return}function clearSelectedObject(){log.info("clearSelectedObject()");if(selectedObject&&selectedObject.type=="POLYGON"){_currentPolygon=undefined}selectedObject=undefined}function setLighting(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sceneObj=iframeId?_atwinSceneObjects[iframeId]:_sceneObject;log.info("setLighting()");const lights=sceneObj.addNode();lights.addComponent("mp.directionalLight",{intensity:.6,color:{r:1,g:1,b:1}});lights.addComponent("mp.ambientLight",{intensity:.6,color:{r:1,g:1,b:1}});lights.start()}))}function removeTransformControls(){if(!_transformControlNode){log.warn("_transformControlNode is undefined");return}_transformControlNode.stop();if(!_inputControlComponent){log.warn("!_inputControlComponent is undefined");return}_inputControlComponent.cancel();log.info("removeTransformControls()")}function setTransformControls(selectedObject,mode="translate"){log.info("Object to be transformed "+selectedObject.object.object_data.name);removeTransformControls();const transformNode=_sceneObject.addNode();const transformComponent=transformNode.addComponent("mp.transformControls");_transformControlNode=transformNode;const inputComponent=transformNode.addComponent("mp.input",{eventsEnabled:true,userNavigationEnabled:true});_transformComponent=transformComponent;if(_currentViewMode&&_currentViewMode=="mode.floorplan"){_transformComponent.inputs.size=.01}else{_transformComponent.inputs.size=1}if(selectedObject.object.object_data.object_type=="GLB"){const eventPath=_sceneObject.addEmitPath(selectedObject.component,"gltfevents");_inputControlComponent=inputComponent.spyOnEvent(new DragSpy(eventPath,selectedObject.node,selectedObject.component,selectedObject.object,dispatchSpaceEvent))}else if(selectedObject.object.object_data.object_type=="BOX"){const eventPath=_sceneObject.addEmitPath(selectedObject.component,"boxEvents");_inputControlComponent=inputComponent.spyOnEvent(new DragSpy(eventPath,selectedObject.node,selectedObject.component,selectedObject.object,dispatchSpaceEvent))}else if(supportedMediaTypes.includes(selectedObject.object.object_data.object_type)){const eventPath=_sceneObject.addEmitPath(selectedObject.component,"planeEvents");_inputControlComponent=inputComponent.spyOnEvent(new DragSpy(eventPath,selectedObject.node,selectedObject.component,selectedObject.object,dispatchSpaceEvent))}else if(selectedObject.object.object_data.object_type=="FBX"){const eventPath=_sceneObject.addEmitPath(selectedObject.component,"fbxevents");_inputControlComponent=inputComponent.spyOnEvent(new DragSpy(eventPath,selectedObject.node,selectedObject.component,selectedObject.object,dispatchSpaceEvent))}transformNode.start();transformComponent.inputs.selection=selectedObject.node;transformComponent.inputs.mode=mode}function setTransformMode(mode){return __awaiter(this,void 0,void 0,(function*(){if(mode=="translate"){_transformMode="translate"}else if(mode=="rotate"){_transformMode="rotate"}else if(mode=="scale"){_transformMode="scale"}else{log.error("Transform mode not supported or incorrect")}_transformComponent.inputs.mode=_transformMode}))}function revertTransform(action="undo",useNewHistory=true){if(!selectedObject){log.error("selectedObject is undefined.");return}if(useNewHistory){let transform;if(action==="undo"){const res=transformHistory.undo(selectedObject.object.id);transform=res.action;log.info("actionHistory undo ",res);if(transform!==null){setObjectTransformation(selectedObject.node,transform,true)}return res.canUndo}else{const res=transformHistory.redo(selectedObject.object.id);transform=res.action;log.info("actionHistory redo ",res);if(transform!==null){setObjectTransformation(selectedObject.node,transform,true)}return res.canRedo}}else{if(!currentObjTransform){log.error("currentObjTransform is undefined");return}if(actionHistory.length<=0){log.error("actionHistory is empty");return}let targetIndex;let nextIndex;const index=actionHistory.indexOf(JSON.stringify(currentObjTransform));log.info(`Action is ${action} and index is ${index}`);if(action==="undo"){if(index-1>=0){targetIndex=index-1;nextIndex=targetIndex-1}else{return false}}else if(action==="redo"){if(index+1<=actionHistory.length){targetIndex=index+1;nextIndex=targetIndex+1}else{return false}}else{log.error("Incorrect function argument for revertTransform");return false}previousObjTransform=JSON.parse(_previousAction);if(!actionHistory[targetIndex]){log.error("actionHistory is either empty or undefined");return}const objectTransform=JSON.parse(actionHistory[targetIndex]);setObjectTransformation(selectedObject.node,objectTransform,true);log.info("Action history length "+actionHistory.length);log.info("Current history position "+index);log.info("Target history position "+targetIndex);currentObjTransform=JSON.parse(actionHistory[targetIndex]);if(action=="undo"&&nextIndex>=0){return false}else if(action=="redo"&&nextIndex<=actionHistory.length){return false}else{return true}}}function clearActionHistory(){log.info("clearActionHistory()");actionHistory=[];transformHistory.clearHistory()}function convertToEuler(coords){const eulerX=Math.atan2(coords._x,coords._x);const eulerY=Math.atan2(-coords._x,Math.sqrt(coords._y*coords._y+coords._z*coords._z));const eulerZ=Math.atan2(coords._x,coords._x);const degreesX=eulerX*(180/Math.PI);const degreesY=eulerY*(180/Math.PI);const degreesZ=eulerZ*(180/Math.PI);const eulerCoords={x:degreesX,y:degreesY,z:degreesZ};log.info("Euler coords "+JSON.stringify(eulerCoords));return eulerCoords}function setObjectTransformation(node,transform,reverting=false){log.info("caroline setObject trans",transform);log.info("setObjectTransformation");node.obj3D.scale.set(transform.object_scale.x,transform.object_scale.y,transform.object_scale.z);node.position.set(transform.object_position.x,transform.object_position.y,transform.object_position.z);if(reverting){node.obj3D.rotation.set(transform.object_rotation._x,transform.object_rotation._y,transform.object_rotation._z)}else{node.obj3D.rotation.set(transform.object_rotation.x,transform.object_rotation.y,transform.object_rotation.z)}}function calculateDistance(pos1,pos2){const dx=pos2.x-pos1.x;const dy=pos2.y-pos1.y;const dz=pos2.z-pos1.z;return Math.sqrt(dx*dx+dy*dy+dz*dz)}function showVideoObjects(object,action="loading"){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){const liveStreamNode=_sceneObject.addNode();var liveStreamComponent=liveStreamNode.addComponent(getComponentLoader(object.object_data),{url:(_a=object.object_data)===null||_a===void 0?void 0:_a.amazon_uri});liveStreamNode.position.set(object.object_position.x,object.object_position.y,object.object_position.z);liveStreamNode.obj3D.rotation.set(object.object_rotation.x,object.object_rotation.y,object.object_rotation.z);liveStreamNode.scale.set(object.object_scale.x,object.object_scale.y,object.object_scale.z);if(liveStreamComponent.outputs.loadingState!="Error"){liveStreamNode.start()}liveStreamComponent.inputs.src=(_b=object.object_data)===null||_b===void 0?void 0:_b.amazon_uri;if(action==="adding"){log.info("Saving object...");object.id=Number.parseInt(uid.rnd());_generatedObjectIds.push(object.id)}_videos.push({object:object,component:liveStreamComponent,node:liveStreamNode,collider:liveStreamComponent.outputs,type:"VIDEO"})}))}function playVideo(videoId){let videoObject=_videos.find((object=>object.object.id==videoId));if(videoObject){videoObject.component.video.play()}else{log.error("Unable to find video object using that id")}}function pauseVideo(videoId){let videoObject=_videos.find((object=>object.object.id==videoId));if(videoObject){videoObject.component.video.pause()}else{log.error("Unable to find video object using that id")}}function videoAutoPlay(){function nearestVideo(videoObject){return __awaiter(this,void 0,void 0,(function*(){let videoPosition=videoObject.object.object_position;let cameraPosition=getCurrentSweepPosition();const camPos={x:cameraPosition.x,y:cameraPosition.y,z:cameraPosition.z};const videoPos={x:videoPosition.x,y:videoPosition.y,z:videoPosition.z};const THREE=videoObject.component.context.three;const v3camPos=new THREE.Vector3(cameraPosition.x,cameraPosition.y,cameraPosition.z);const v3videoPos=new THREE.Vector3(videoPosition.x,videoPosition.y,videoPosition.z);const computedDistance=v3camPos.distanceTo(v3videoPos);try{if(videoObject.object.autoplay&&videoObject.object.autoplay_distance&&computedDistance<videoObject.object.autoplay_distance){setVideoPlayback("play",videoObject.component.video)}else{setVideoPlayback("pause",videoObject.component.video)}}catch(e){log.error("Unable to play or stop video")}}))}_videos.forEach((videoObject=>nearestVideo(videoObject)))}function createVideoComponent(){function videoRenderer(){this.inputs={visible:true,userNavigationEnabled:true,eventsEnabled:true,colliderEnabled:true,src:null};this.outputs={texture:null,video:null,aspect:720/480};this.onInit=function(){this.video;this.texture};this.events={"INTERACTION.CLICK":true};this.onEvent=function(eventType,eventData){return __awaiter(this,void 0,void 0,(function*(){if(eventType=="INTERACTION.CLICK"&&_viewMode==="interactive"){let video=_videos.filter((l=>{var _a,_b,_c;return((_b=(_a=l.collider)===null||_a===void 0?void 0:_a.collider)===null||_b===void 0?void 0:_b.uuid)===((_c=eventData.collider)===null||_c===void 0?void 0:_c.uuid)}))[0];log.info("Video object "+JSON.stringify(video.object));const selectedObj={object:video.object,node:video.node,component:video.component};setSelectedObject(video.object,video.node,video.component,"VIDEO");setTransformControls(selectedObj)}}))};this.onInputsUpdated=function(previous){this.releaseTexture();const THREE=this.context.three;if(!this.inputs.src){this.video.src="";return}if(this.inputs.src instanceof HTMLVideoElement){this.video=this.inputs.src}else{this.video=this.createVideoElement();if(typeof this.inputs.src==="string"){this.video.src=this.inputs.src}else{this.video.srcObject=this.inputs.src}this.video.load()}this.texture=new THREE.VideoTexture(this.video);this.texture.minFilter=THREE.LinearFilter;this.texture.magFilter=THREE.LinearFilter;this.texture.format=THREE.RGBFormat;var geometry=new THREE.PlaneGeometry(1,1);geometry.scale(1,480/720,1);geometry.translate(0,.33,0);this.material=new THREE.MeshBasicMaterial({map:this.texture,side:THREE.DoubleSide});var mesh=new THREE.Mesh(geometry,this.material);this.outputs.objectRoot=mesh;this.outputs.collider=mesh;mesh.visible=this.inputs.visible;this.outputs.texture=this.texture;this.outputs.video=this.video};this.releaseTexture=function(){if(this.texture){this.outputs.texture=null;this.texture.dispose()}};this.createVideoElement=function(){const video=document.createElement("video");video.setAttribute("id","htmlLivestreamVideo");video.crossOrigin="anonymous";video.setAttribute("height","480");video.setAttribute("width","720");video.setAttribute("webkit-playsinline","webkit-playsinline");video.setAttribute("controls","controls");video.muted=false;video.loop=true;video.volume=1;return video};this.onTick=function(tickDelta){};this.onDestroy=function(){this.material.dispose()};this.spyOnEvent=function(payload){log.info("payload",payload)}}function makeVideoRender(){return new videoRenderer}_atwin.Scene.register("liveVideo",makeVideoRender)}function createSlideScreenModel(iframeId){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;function SlideScreenModelRenderer(){this.inputs={src:null,userNavigationEnabled:true,eventsEnabled:true,colliderEnabled:true,visible:true};this.outputs={texture:null,t_image:null};this.onInit=function(){this.texture;this.t_image;this.material;this.mesh};this.events={"INTERACTION.CLICK":true};this.onEvent=function(eventType,eventData){return __awaiter(this,void 0,void 0,(function*(){log.info("onEventSlideShow",eventType,eventData);if(eventType=="INTERACTION.CLICK"){if(_allSlideShow.length>0){let slideshow=_allSlideShow.filter((l=>{var _a,_b,_c;return((_b=(_a=l.collider)===null||_a===void 0?void 0:_a.collider)===null||_b===void 0?void 0:_b.uuid)==((_c=eventData.collider)===null||_c===void 0?void 0:_c.uuid)}))[0];log.info("Slideshow object "+JSON.stringify(slideshow.object));if(_viewMode==="interactive"){const selectedObj={object:slideshow.object,node:slideshow.node,component:slideshow.component,type:"ZIP"};setSelectedObject(slideshow.object,slideshow.node,slideshow.component,"ZIP");setTransformControls(selectedObj)}log.info("slideShow eventData",slideshow);if(slideshow!=null){log.info("slideShow eventData",slideshow);var mousePosition=yield getMousePosition(iframeId);var planePosition=slideshow.node.obj3D.position;log.info("MOUSE POSITION",mousePosition);log.info("PLANE POSITION",planePosition);if(slideshow.object.object_data.object_type=="ZIP"){if(slideshow.object.id!=_currentSlideShowID){_currentSlideIndex=_slideShowImage.find((elem=>elem.id===slideshow.object.id)).idx;log.info("CURRENT INDEX",_currentSlideIndex);_currentSlideShow=_slideShowImage.find((elem=>elem.id===slideshow.object.id)).images;log.info("CURRENT SLIDE",_currentSlideShow)}if(slideshow.object.id==_currentSlideShowID){log.info("ChangeImage",slideshow,_currentSlideShowID);if(planePosition.x<mousePosition.x){log.info("LEFT SIDE");clearInterval(_timer);this.inputs.src=imageStream("prev")}else if(planePosition.y<mousePosition.y){log.info("RIGHT SIDE");clearInterval(_timer);this.inputs.src=imageStream("next")}else if(planePosition.y>mousePosition.y){log.info("AUTOPLAY");_timer=setInterval((()=>{_currentSlideIndex=(_currentSlideIndex+1)%_currentSlideShow.length;log.info("CURRENT INDEX",_currentSlideIndex);this.inputs.src=imageStream("next")}),2e3)}}else{_currentSlideShowID=slideshow.object.id}}}}}}))};this.onInputsUpdated=function(previous){this.releaseTexture();const three=this.context.three;this.t_image=document.createElement("IMG");this.t_image.src=this.inputs.src;this.t_image.setAttribute("width","auto");this.t_image.setAttribute("height","auto");this.t_image.crossOrigin="anonymous";const planeGeo=new three.PlaneGeometry(1.5,1.5);planeGeo.translate(0,.33,0);if(previous.src!=this.inputs.src){this.texture=(new three.TextureLoader).load(this.t_image.src,((tex=this.texture)=>{tex.minFilter=three.LinearFilter;tex.magFilter=three.LinearFilter;tex.format=three.RGBAFormat;tex.needsUpdate=true;tex.onUpdate=this.textureUpdated;this.material=new three.MeshBasicMaterial({map:this.texture,side:three.DoubleSide,transparent:true,alphaTest:.5});this.mesh=new three.Mesh(planeGeo,this.material);this.mesh.scale.set(1,this.texture.image.height/this.texture.image.width,1);this.outputs.objectRoot=this.mesh;this.outputs.collider=this.mesh;this.outputs.texture=this.texture;this.outputs.t_image=this.t_image}))}if(this.mesh!=null){this.mesh.visible=this.inputs.visible}};this.textureUpdated=function(params){log.info("Update Callback",params)};this.releaseTexture=function(){if(this.texture){this.outputs.texture=null}};this.onTick=function(tickDelta){};this.onDestroy=function(){this.material.dispose();this.texture.dispose()}}function makeSlideScreenModelRenderer(){return new SlideScreenModelRenderer}sdk.Scene.register("slideScreenModel",makeSlideScreenModelRenderer)}function registerCustomLoaders(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(_hasRegisteredLoaders===false||_mpConfig.multispace){log.info("registerCustomLoaders()");createVideoComponent();createSlideScreenModel();yield sdk.Scene.registerComponents([{factory:planeFactory(sdk),name:planeType},{factory:gltfFactory(sdk),name:gltfType},{factory:boxFactory(sdk),name:boxType},{factory:textFactory(sdk),name:textType},{factory:css3DFactory(sdk),name:css3DType},{factory:planeImageFactory,name:planeTypeImage},{factory:planeVideoFactory,name:planeTypeVideo},{factory:planePdfFactory,name:planeTypePdf},{factory:puckBackgroundFactory,name:sweepPuckType},{factory:viewpointFactory,name:viewpointType},{factory:tubeLineFactory(sdk),name:tubeLineType},{factory:verticeFactory(sdk),name:verticeType},{factory:bufferGeometry(sdk),name:bufferGeometryType},{factory:fbxFactory(sdk),name:fbxType},{factory:pathLineFactory(sdk),name:pathLineType},{factory:pathPointFactory(sdk),name:pathPointType}]);_hasRegisteredLoaders=true}}))}function showSlideScreenModel(object,action="loading"){return __awaiter(this,void 0,void 0,(function*(){const modelNode=_sceneObject.addNode();const component=modelNode.addComponent("slideScreenModel");log.info("COMPONENT",component);const objTransformation={object_position:object.object_position,object_rotation:object.object_rotation,object_scale:object.object_scale};setObjectTransformation(modelNode,objTransformation);if(action==="adding"){log.info("Saving object...");object.id=Number.parseInt(uid.rnd());_generatedObjectIds.push(object.id)}modelNode.start();yield addImageToSlideShow(object.object_data,component,object.id);log.info("SLIDE OUTPUT",component.outputs);if(action==="adding"){log.info("Saving object...");const id=yield addShowcaseObject(object);if(id){log.info("Saved object",id);object.id}}var slideShow={collider:component.outputs,object:object,node:modelNode,component:component,type:"ZIP"};_allSlideShow.push(slideShow);log.info("ALL SLIDESHOW",_allSlideShow)}))}function addImageToSlideShow(data,component,objectID){return __awaiter(this,void 0,void 0,(function*(){var dataList=[];yield new JSZip.external.Promise((function(resolve,reject){JSZipUtils.getBinaryContent(data.amazon_uri,(function(err,data){if(err){log.info("getBI error",err);reject(err)}else{log.info("getBI success",data);resolve(data)}}))})).then((function(data){log.info("data from getBI",data);return JSZip.loadAsync(data)})).then((data=>{log.info("data from loadAsync",data);for(let key in data.files){if(key.includes("__MACOSX"))continue;if(key.includes(".DS_Store"))continue;if(data.files[key].dir)continue;let base=data.file(data.files[key].name).async("base64");base.then((res=>{dataList.push({name:data.files[key].name,path:`data:image/png;base64,${res}`});if(dataList.length==1){component.inputs.src=`data:image/png;base64,${res}`}}))}_slideShowImage.push({id:objectID,images:dataList,idx:0,playID:null,play:false,comp:component})}))}))}function getMousePosition(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;return new Promise((resolve=>{const pointer=sdk.Pointer.intersection.subscribe((function(intersection){pointer.cancel();resolve(intersection.position)}))}))}))}function getDomMousePosition(event){domMousePosition.x=event.clientX/window.innerWidth*2-1;domMousePosition.y=-(event.clientY/window.innerHeight)*2+1}function imageStream(direction){let diff=direction==="prev"?-1:1;let length=_currentSlideShow.length;let index=_currentSlideIndex+diff;if(index===-1){index=length-1}if(index===length){index=0}_currentSlideIndex=index;_slideShowImage.find((elem=>elem.id===_currentSlideShowID)).idx=index;return _currentSlideShow[_currentSlideIndex].path}function cameraRotate(x,y,speed,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_START);dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_START);yield sdk.Camera.rotate(x,y,{speed:speed}).then((()=>{dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"success"});log.info("camera rotate success.",x,y);dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"success"})})).catch((error=>{dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"failed",error:error});log.info("camera rotate error.",error);dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"failed",error:error})}))}))}function cameraSetRotation(x,y,speed=30,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;yield sdk.Camera.setRotation({x:x,y:y},{speed:speed}).then((()=>{log.info("camera rotate success.",x,y)})).catch((error=>{log.info("camera rotate error.",error)}))}))}function cameraPan(x,z,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;let mode=getViewMode();log.info("mode ",mode);if(mode==_atwin.Mode.Mode.FLOORPLAN||mode==_atwin.Mode.Mode.DOLLHOUSE){dispatchSpaceEvent(SPACE_EVENTS.CAMERA_PAN_START);yield sdk.Camera.pan({x:x,z:z}).then((()=>{log.info("camera pan success.");dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"success"})})).catch((error=>{log.info("camera rotate error:",error);dispatchSpaceEvent(SPACE_EVENTS.CAMERA_ROTATE_END,{status:"failed",error:error})}))}else{log.error("Incorrect view mode.")}}))}function cameraLookAt(x,y,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;yield sdk.Camera.lookAtScreenCoords(x,y).then((function(){log.info("camera looking at...",x,y)})).catch((function(error){log.info("camera looking at error:",error)}))}))}function captureSpaceScreenshot(callback,resolution={width:1920,height:1080},visibility={mattertags:false,measurements:false,sweeps:false,views:false},iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;yield sdk.Renderer.takeScreenShot(resolution,visibility).then((imageUri=>{let link=document.createElement("a");link.href=imageUri;const screenshotName=_modelDetails.name?`${_modelDetails.name}.png`:"spaceshot.png";link.download=screenshotName;document.body.appendChild(link);link.click();document.body.removeChild(link);link.remove();if(callback){callback()}}))}))}function captureScreenshotAndCameraDetails(callback,resolution={width:1920,height:1080},visibility={mattertags:false,measurements:false,sweeps:false,views:false},iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ captureScreenshotAndCameraDetails");try{let screenshot;let cameraPose;let cameraSub;let cameraZoomSub;let cameraZoom;if(iframeId){let _sdk;_sdk=_atwinConnections[iframeId];screenshot=yield _sdk.Renderer.takeScreenShot(resolution,visibility);cameraSub=_sdk.Camera.pose.subscribe((function(pose){console.log("__@ Camera pose is ",pose);cameraPose=pose}));cameraZoomSub=_sdk.Camera.zoom.subscribe((function(zoom){cameraZoom=zoom}))}else{screenshot=yield _atwin.Renderer.takeScreenShot(resolution,visibility);cameraPose=_currentCameraPose;cameraZoom=_currentCameraZoom}if(callback){callback()}yield waitFor((()=>cameraPose!==undefined),5);cameraSub.cancel();cameraZoomSub.cancel();return{base64Screenshot:screenshot,cameraPose:cameraPose,cameraZoom:cameraZoom}}catch(error){log.error("Error capturing screenshot or getting camera details:",error)}}))}function captureCurrentView(callback,resolution={width:1920,height:1080},visibility={mattertags:false,measurements:false,sweeps:false,views:false},iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ captureCurrentView");let screenshot="";if(iframeId){let _sdk;_sdk=_atwinConnections[iframeId];screenshot=yield _sdk.Renderer.takeScreenShot(resolution,visibility)}else{screenshot=yield _atwin.Renderer.takeScreenShot(resolution,visibility)}if(callback){callback()}return screenshot}))}function cameraZoomBy(zoom,callback,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("cameraZoomBy() ",zoom);if(!zoom||typeof zoom!=="number"){log.error("Parameter is invalid or undefined");return}const sdk=iframeId?_atwinConnections[iframeId]:_atwin;try{const newZoom=yield sdk.Camera.zoomBy(zoom);if(newZoom&&callback){yield callback()}return newZoom}catch(error){log.error("cameraZoomBy error ",error);return}}))}function cameraZoomTo(zoom,callback,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("cameraZoomTo() ",zoom);if(!zoom||typeof zoom!=="number"){log.error("Parameter is invalid or undefined");return}const sdk=iframeId?_atwinConnections[iframeId]:_atwin;try{const newZoom=yield sdk.Camera.zoomTo(zoom);if(newZoom&&callback){yield callback()}return newZoom}catch(error){log.error("cameraZoomTo error ",error);return}}))}function cameraZoomReset(iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;try{yield sdk.Camera.zoomReset()}catch(error){log.error("cameracameraZoomResetZoomTo error ",error)}}))}function moveInDirection(direction,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;let nextDirection=sdk.Camera.Direction.LEFT;switch(direction.toUpperCase()){case"LEFT":nextDirection=sdk.Camera.Direction.LEFT;break;case"RIGHT":nextDirection=sdk.Camera.Direction.RIGHT;break;case"UP":nextDirection=sdk.Camera.Direction.UP;break;case"DOWN":nextDirection=sdk.Camera.Direction.DOWN;break;case"BACK":nextDirection=sdk.Camera.Direction.BACK;break;case"FORWARD":nextDirection=sdk.Camera.Direction.FORWARD;break;default:nextDirection=sdk.Camera.Direction.LEFT;break}yield sdk.Camera.moveInDirection(nextDirection).then((function(){log.info("Move to...",nextDirection)})).catch((function(){log.warn("An error occured while moving in that direction.",nextDirection)}))}))}function dispose3dObjects(){log.info("dispose3dObjects");_3DXObjects.forEach((obj=>{log.info("_3DXObjects stop",obj);obj.node.stop()}));_3DXObjects=[];_videos.forEach((vid=>{log.info("_videos pause and node stop",vid);vid.component.video.pause();vid.node.stop()}));_allSlideShow.forEach((slide=>{log.info("_allSlideShow stop",slide);slide.node.stop()}))}function getUserViewPoint(userId){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ getUserViewPoint");try{return new Promise(((resolve,reject)=>{let latestPose=null;const timeout=2e3;let inactivityTimer;let subscriber;const handlePoseUpdate=pose=>{latestPose=pose;console.log("Current camera pose for user:",userId,pose);clearTimeout(inactivityTimer);inactivityTimer=setTimeout((()=>{if(latestPose){console.log("__@ Last camera pose : ",latestPose);console.log("__@ Last camera string : ",JSON.stringify(latestPose));resolve(latestPose)}else{reject(new Error("No camera pose data received"))}}),timeout)};subscriber=_atwin.Camera.pose.subscribe(handlePoseUpdate)}))}catch(error){log.error("Error in getting user view point: ",error)}}))}function displayUserViewPoint(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ displayUserViewPoint: ",payload);try{let thisSdk;var showcase=document.getElementById("showcase-container");if(showcase==null||undefined){log.error("No showcase-container id found.");return}var showcaseSize={w:showcase.clientWidth,h:showcase.clientHeight};const eyeIcon=document.createElement("div");eyeIcon.setAttribute("id","at-user-view-point");eyeIcon.innerHTML='👁️<br><span id="at-point-username"></span>';eyeIcon.style.position="absolute";eyeIcon.style.fontSize="1.5em";const eyeIconText=eyeIcon.querySelector("#at-point-username");if(eyeIconText){eyeIconText.style.backgroundColor="yellow";eyeIconText.style.color="black";eyeIconText.style.fontWeight="bold";eyeIconText.style.fontSize="0.8em";eyeIconText.style.verticalAlign="middle";eyeIconText.style.lineHeight="1em";eyeIconText.textContent=payload.user.name}let worldX=10;let worldY=5;let worldZ=20;let screenCoords=worldToScreen(worldX,worldY,worldZ,payload.pose.position,showcaseSize.w,showcaseSize.h);console.log("__@ screenCoords: ",screenCoords);if(screenCoords){eyeIcon.style.left=`${screenCoords.x}px`;eyeIcon.style.top=`${screenCoords.y}px`;showcase.appendChild(eyeIcon);console.log("__@ Eye icon displayed!!")}}catch(error){log.error("__@ Error in displaying user view point: ",error)}}))}function renderUserViewPoint(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ renderUserViewPoint: ",payload);try{let object_data={id:Number.parseInt(uid.rnd()),name:"viewpoint",object_type:"VIEWPOINT",upload_file:"",upload_filename:"",filename:"",user_id:0,description:"",object_key:"",amazon_uri:""};const viewpointObj=createIShowcaseObjectData(object_data,payload.pose.position);const viewPointMarker=yield show3DObjects(viewpointObj)}catch(error){log.error("__@ Error in rendering user view point: ",error)}}))}function worldToScreen(worldX,worldY,worldZ,camera,showcaseWidth,showcaseHeight){let relativeX=worldX-camera.x;let relativeY=worldY-camera.y;let relativeZ=worldZ-camera.z;let focalLength=200;let screenX=relativeX/relativeZ*focalLength+showcaseWidth/2;let screenY=relativeY/relativeZ*focalLength+showcaseHeight/2;return{x:screenX,y:screenY}}function projectToScreen2(cameraPoseData,point3D,viewportWidth,viewportHeight){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ projectToScreen");const projectionMatrix=cameraPoseData.projection;const{x:x,y:y,z:z}=point3D;const clipX=projectionMatrix[0]*x+projectionMatrix[1]*y+projectionMatrix[2]*z+projectionMatrix[3];const clipY=projectionMatrix[4]*x+projectionMatrix[5]*y+projectionMatrix[6]*z+projectionMatrix[7];const clipW=projectionMatrix[12]*x+projectionMatrix[13]*y+projectionMatrix[14]*z+projectionMatrix[15];const screenX=(clipX/clipW+1)/2;const screenY=(clipY/clipW+1)/2;const viewportX=screenX*viewportWidth;const viewportY=screenY*viewportHeight;return{x:viewportX,y:viewportY}}))}function worldToScreen1(position,camera,showcase){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ worldToScreen");const{x:x,y:y,z:z}=position;const{projection:projection,view:view}=camera;const mvpMatrix=new Float32Array(16);for(let i=0;i<16;i++){mvpMatrix[i]=0;for(let j=0;j<4;j++){mvpMatrix[i]+=projection[Math.floor(i/4)*4+j]*view[j*4+i%4]}}const w=mvpMatrix[3]*x+mvpMatrix[7]*y+mvpMatrix[11]*z+mvpMatrix[15];const screenX=(mvpMatrix[0]*x+mvpMatrix[4]*y+mvpMatrix[8]*z+mvpMatrix[12])/w;const screenY=(mvpMatrix[1]*x+mvpMatrix[5]*y+mvpMatrix[9]*z+mvpMatrix[13])/w;const normalizedScreenX=(screenX+1)/2*showcase.clientWidth;const normalizedScreenY=(1-screenY)/2*showcase.clientHeight;return{x:normalizedScreenX,y:normalizedScreenY}}))}function getViewMode(){return _currentViewMode}function setViewMode(mode,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("=== get Mode Type ===",_getModeType(mode));let modeType=_getModeType(mode);const sdk=iframeId?_atwinConnections[iframeId]:_atwin;yield sdk.Mode.moveTo(modeType).then((function(nextMode){log.info("Arrived at new view mode "+nextMode)})).catch((function(error){log.error("Error occur on:",error)}))}))}function _getModeType(mode){let modes={DOLLHOUSE:"mode.dollhouse",FLOORPLAN:"mode.floorplan",INSIDE:"mode.inside",OUTSIDE:"mode.outside",TRANSITIONING:"mode.transitioning"};return modes[mode.toUpperCase()]||""}function disconnectSpace(iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("disconnectSpace()");const sdk=iframeId?_atwinConnections[iframeId]:_atwin;if(sdk){yield disposeTags(iframeId);dispose3dObjects()}_iframe.src="";_api={};_atwin={};_tags=[];sweeps=[];_allSlideShow=[];_slideShowImage=[];_currentSlideShowID=0;_currentSlideIndex=0;_currentSlideShow=null;_timer=null;_videos=[];_currentViewMode="";_3DXObjects=[];_unrenderedObjects=[];_previousTimeStamp=0;_currentSweep={};_currentCameraPose={};_sweeps=[];_hasRegisteredLoaders=false;_is3DClickSpyCreated=false;_isNavigationComponentCreated=false;spaceEventQueue={events:[]}}))}function getTargetPosition(callback=undefined,continousClick=false){return __awaiter(this,void 0,void 0,(function*(){log.info("getTargetPosition()");if(!_objectMarker){log.error("Object marker has not been created");return}const iframe=document.getElementById(_mpConfig.iframeId);const iframeSize={w:iframe.clientWidth,h:iframe.clientHeight};let pointerCoord;yield _atwin.Pointer.editTexture("targetPointer");_onMouseClickInstance=callback;_continousClickMode=continousClick}))}function cancelModelPlacement(){return __awaiter(this,void 0,void 0,(function*(){log.info("cancelModelPlacement()",_pointerSubscription);if(_pointerSubscription)_pointerSubscription.cancel();setElementVisibility(_objectMarker,false);yield _atwin.Pointer.resetTexture();if(_onMouseClickInstance!==undefined){_objectMarker.removeEventListener("click",_onMouseClickInstance);_onMouseClickInstance=undefined;_continousClickMode=false}}))}function setPointerCoordinates(position){_pointerCoord=position}function renderModel(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("renderModel() ",payload);if(!payload){log.error("Payload is undefined");return}let showcase_object;let objId=undefined;let object={};if(payload.object_data)object=payload.object_data;object.amazon_uri=payload.mediaUrl;object.object_type=payload.objectType.toUpperCase();if(payload.config.options&&payload.config.options.mediaViewerId){objId=payload.config.options.mediaViewerId}else if(payload.config.id){objId=payload.config.id}showcase_object=createIShowcaseObjectData(object,payload.config.position,payload.config.scale,payload.config.rotation,objId);if(payload.config){if(payload.config.json_data){const jsonData=JSON.parse(payload.config.json_data);console.log("__@ jsonData: ",jsonData);showcase_object.json_data=payload.config.json_data;if(jsonData.coordSystemCalibration){const thisCoordSystemCal=jsonData.coordSystemCalibration;showcase_object.coordinate_system=thisCoordSystemCal.coord_system}}}log.info("About to render object",showcase_object);if(object.object_type=="ZIP"){yield showSlideScreenModel(showcase_object)}else{yield show3DObjects(showcase_object,payload.config&&payload.config.options?payload.config.options:null)}return showcase_object}))}function addObjectToSpace(mediaUrl,objectType,config=undefined,object_data){return __awaiter(this,void 0,void 0,(function*(){log.info("addObjectToSpace()");log.info("Object Media URL ",mediaUrl);log.info("Object type",objectType);const iframe=document.getElementById(_mpConfig.iframeId);let showcase_object;let pointerSubscriptionActive=false;let mediaType;let mediaName;let isDefaultImage=true;if(objectType===""||objectType===null){objectType=undefined}const urlPattern=/^(https?:\/\/)/;if(urlPattern.test(mediaUrl))isDefaultImage=false;if(mediaUrl&&mediaUrl!==""&&mediaUrl!==null&&objectType===undefined&&isDefaultImage===false){log.info("Extracting file info...");const type=yield extractFileInfo(mediaUrl);if(!type||type===""){log.error("Invalid URL provided. URL is not valid and failed to return content-type header");return}mediaName=generateUUID();mediaType=type;log.info("mediaType",mediaType)}if(objectType){mediaType=objectType}if(isDefaultImage){mediaType="PNG"}mediaType=mediaType.toUpperCase();const iframeSize={w:iframe.clientWidth,h:iframe.clientHeight};function onObjectPositionSet(mediaUrl){return __awaiter(this,void 0,void 0,(function*(){log.info("Object positioned at: ",_pointerCoord);let object={};if(object_data){object=object_data}object.amazon_uri=mediaUrl;object.object_key=mediaName;object.object_type=mediaType.toUpperCase();if(pointerSubscriptionActive){_pointerSubscription.cancel();setElementVisibility(_objectMarker,false);yield _atwin.Pointer.resetTexture()}let objId=undefined;if(config.options&&config.options.mediaViewerId){objId=config.options.mediaViewerId}else if(config.id){objId=config.id}showcase_object=createIShowcaseObjectData(object,config.position,config.scale,config.rotation,objId);if(config){if(config.json_data){const jsonData=JSON.parse(config.json_data);console.log("__@ jsonData: ",jsonData);if(jsonData===null||jsonData===void 0?void 0:jsonData.name){showcase_object.showcase_object_name=jsonData===null||jsonData===void 0?void 0:jsonData.name}showcase_object.json_data=config.json_data;if(jsonData.coordSystemCalibration){const thisCoordSystemCal=jsonData.coordSystemCalibration;showcase_object.coordinate_system=thisCoordSystemCal.coord_system}}}log.info("About to render object",showcase_object);if(object.object_type=="ZIP"){yield showSlideScreenModel(showcase_object)}else{if(config){console.log("Config set",config);yield show3DObjects(showcase_object,config.options);log.info("selectedObject",selectedObject)}else{yield show3DObjects(showcase_object,null);log.info("selectedObject",selectedObject)}}if(_objectMarker){_objectMarker.removeEventListener("click",handleClick)}log.info("Returning object",showcase_object);return showcase_object}))}const handleClick=()=>onObjectPositionSet(mediaUrl);if(mediaUrl!==undefined&&config===undefined||mediaUrl!==undefined&&config.options&&!config.position){log.info("Positioning object to user pointer click coordinates");_objectMarker.addEventListener("click",handleClick);yield _atwin.Pointer.editTexture("targetPointer");pointerSubscriptionActive=true;_pointerSubscription=_atwin.Pointer.intersection.subscribe((function name(intersection){_pointerCoord=intersection.position;if(_currentCameraPose){const screenCoord=_atwin.Conversion.worldToScreen(intersection.position,_currentCameraPose,iframeSize);translateElementPosition(_objectMarker,screenCoord)}}));return}else if(mediaUrl!==undefined&&config.position!=null){log.info("Positioning object to pre-defined coordinates");const showcase_obj=yield onObjectPositionSet(mediaUrl);return showcase_obj}else{log.error("Object is either null or undefined");return}}))}function renderAvatar(avatarConfig){return __awaiter(this,void 0,void 0,(function*(){log.info("renderAvatar()",avatarConfig);const supportedModelTypes=["GLB","FBX","OBJ"];if(!avatarConfig.modelUrl){log.error("modelUrl is undefined");return}if(!avatarConfig.modelType){log.error("modelType is undefined");return}if(supportedModelTypes.includes(avatarConfig.modelType)){const config={position:avatarConfig.cameraPose.position,scale:avatarConfig.scale?avatarConfig.scale:{x:1,y:1,z:1},rotation:{x:avatarConfig.cameraPose.rotation.x,y:avatarConfig.cameraPose.rotation.y,z:-.5}};if(avatarConfig.id){config.id=avatarConfig.id}const payload=yield addObjectToSpace(avatarConfig.modelUrl,avatarConfig.modelType,config);return payload}log.error("Model type not supported");return}))}function setSpaceAvatar(avatar){return __awaiter(this,void 0,void 0,(function*(){if(!avatar){log.error("setSpaceAvatar payload is undefined");return}if(!avatar.modelUrl){log.error("setSpaceAvatar modelUrl is undefined");return}const cameraPose=getCurrentCameraPose();const avatarInfo={modelUrl:avatar.modelUrl,modelType:"GLB",cameraPose:cameraPose};if(avatar.id){avatarInfo.id=avatar.id;const payload=yield renderAvatar(avatarInfo);_avatarModel=_3DXObjects.find((obj=>obj.object.id===payload.id));return avatarInfo}else{const payload=yield renderAvatar(avatarInfo);avatarInfo.id=payload.id;_avatarModel=_3DXObjects.find((obj=>obj.object.id===payload.id));return avatarInfo}}))}function renderViewpointMarker(transform,viewpointId,options){return __awaiter(this,void 0,void 0,(function*(){log.info("renderViewpointMarker()");if(!transform||!transform.position){log.error("transform or transform position is undefined");return}transform.rotation=transform.rotation?transform.rotation:{x:0,y:0,z:0};let object_data={id:Number.parseInt(uid.rnd()),name:"viewpoint",object_type:"VIEWPOINT",upload_file:"",upload_filename:"",filename:"",user_id:0,description:"",object_key:"",amazon_uri:""};const showcase_obj=createIShowcaseObjectData(object_data,transform.position,undefined,transform.rotation,viewpointId);if(options){yield show3DObjects(showcase_obj,options)}else{yield show3DObjects(showcase_obj)}}))}function toggleViewpointVisibility(viewpointIds){log.info("toggleViewpointVisibility");if(viewpointIds){if(Array.isArray(viewpointIds)){log.info("Trying to toggle visiblity of multiple viewpoint ids");const selectedViewpoints=_3DXObjects.filter((obj=>obj.object.object_data.object_type=="VIEWPOINT"&&viewpointIds.includes(obj.object.id))).map((item=>item.object.id));if(selectedViewpoints&&selectedViewpoints.length>0){selectedViewpoints.forEach((id=>{setModelVisibility(id)}));return}return}setModelVisibility(viewpointIds)}const allViewpoints=_3DXObjects.filter((obj=>obj.object.object_data.object_type=="VIEWPOINT")).map((item=>item.object.id));if(allViewpoints&&allViewpoints.length>0){allViewpoints.forEach((id=>{setModelVisibility(id)}));return}log.error("No viewpoints to toggle");return}function setViewpointLineLength(width,id){log.info("setViewpointLineLength()");if(width){let widthPath;for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`maxLineLength_${id}`){log.info("Setting viewpoint max line length");widthPath=path;widthPath.set(width)}}}}function convertDegRotationToEuler(x,y){if(!x||!y){log.error("Pitch or yaw is undefined");return}const spaceObj=_3DXObjects[0];if(spaceObj&&spaceObj.component.context.three){const THREE=spaceObj.component.context.three;const pitchRad=THREE.MathUtils.degToRad(x);const yawRad=THREE.MathUtils.degToRad(y);const pitchQuaternion=new THREE.Quaternion;pitchQuaternion.setFromAxisAngle(new THREE.Vector3(1,0,0),pitchRad);const yawQuaternion=new THREE.Quaternion;yawQuaternion.setFromAxisAngle(new THREE.Vector3(0,1,0),yawRad);const finalQuaternion=new THREE.Quaternion;finalQuaternion.multiplyQuaternions(pitchQuaternion,yawQuaternion);const euler=new THREE.Euler;euler.setFromQuaternion(finalQuaternion,"XYZ");return euler}log.error("Failed to get ThreeJS context. No objects exist in space");return}function translateElementPosition(element,coord){log.info("translateElementPosition()");if(coord){if(coord.x>0){element.style.left=`${Math.abs(coord.x-22)}px`;element.style.top=`${Math.abs(coord.y-19)}px`}else{element.style.left=`${Math.abs(coord.x+22)}px`;element.style.top=`${Math.abs(coord.y+19)}px`}const computedStyle=window.getComputedStyle(_objectMarker);const displayValue=computedStyle.getPropertyValue("display");if(displayValue=="none"){setElementVisibility(_objectMarker,true)}return}log.error("Argument for coord is undefined");return}function create3dMarker(){let container=document.getElementById("showcase-container");if(!container){log.warn("Cannot find element with id of showcase container. Attempting to get the parent element of iframe instead");const childIframe=document.getElementById(_mpConfig.iframeId);if(childIframe){container=childIframe.parentElement}}if(!container){log.error("We cannot find the parent container of the iFrame. You need to assign your parent container a value of showcase-container");return}const checkMarker=document.getElementById("marker-3d");if(!checkMarker){log.info("Marker not found. Creating marker in DOM");_objectMarker=document.createElement("div");_objectMarker.setAttribute("id","marker-3d");_objectMarker.style.display="none";_objectMarker.style.width="140px";_objectMarker.style.height="140px";_objectMarker.style.cursor="pointer";_objectMarker.style.position="absolute";if(_mpConfig.debug){if(_mpConfig.debug.showObjectMarker){_objectMarker.style.backgroundColor="teal"}}container.appendChild(_objectMarker);return}log.info("Marker found. Skipping marker creation")}function create3DClickSpy(){log.info("create3DClickSpy()");if(_is3DClickSpyCreated&&!_mpConfig.multispace){log.info("3D click spy has already been created");return}try{const click_path=_sceneObject.addPath({id:"clicklistener2",type:_atwin.Scene.PathType.EMIT,node:_navigationInputNode,component:_navigationComponent,property:"INTERACTION.CLICK"});const click_spy={path:click_path,onEvent(event_data){return __awaiter(this,void 0,void 0,(function*(){log.info("3DClickSpy",_intersectionData.position);dispatchSpaceEvent(SPACE_EVENTS.POINTER_CLICK,_intersectionData);if(_onMouseClickInstance){try{yield _onMouseClickInstance(_intersectionData.position)}catch(error){log.error("Click event instance error ",error)}if(_continousClickMode==false){yield _atwin.Pointer.resetTexture();_onMouseClickInstance=undefined}}}))}};_sceneObject.spyOnEvent(click_spy);_is3DClickSpyCreated=true}catch(error){log.error("create3DClickSpy error ",error)}}function setElementVisibility(element,visible){if(visible){element.style.display="inline-block";return}element.style.display="none"}function createIShowcaseObjectData(object_data,position=undefined,scale=undefined,rotation=undefined,mediaViewerId){log.info("createIShowcaseObject()",object_data);const newObj=object_data;const showcase_object={};if(mediaViewerId){showcase_object.id=typeof mediaViewerId==="number"?mediaViewerId:Number.parseInt(mediaViewerId)}else{showcase_object.id=Number.parseInt(uid.rnd())}showcase_object.uuid=object_data.object_uuid;showcase_object.player_id=mediaViewerId?mediaViewerId.toString():"";_generatedObjectIds.push(showcase_object.id);showcase_object.object_id=object_data.id;showcase_object.user_id=_userId;showcase_object.showcase_id=parseInt(_spaceId);showcase_object.media_viewer_id=showcase_object.id;showcase_object.object_position=position!=undefined?position:_pointerCoord;showcase_object.object_rotation=rotation!=undefined?rotation:{x:0,y:0,z:0};showcase_object.object_scale=scale!=undefined?scale:{x:1,y:1,z:1};if(object_data.object_type=="MP4"){showcase_object.autoplay=true;showcase_object.autoplay_distance=2}showcase_object.offset_position=1;showcase_object.offset_rotation=1;showcase_object.position_unit="m";showcase_object.object_data=object_data;showcase_object.showcase_object_name=object_data.name;showcase_object.coordinate_system=getCoordinateSystem();if(showcase_object.object_data){showcase_object.object_data=newObj}log.info("Returned objects",showcase_object);return showcase_object}function copyObject(payload,position_offset=undefined,rotation_offset=undefined){return __awaiter(this,void 0,void 0,(function*(){log.info("copyObject()",payload);if(payload){const newObject=JSON.parse(JSON.stringify(payload));const modelNode=_3DXObjects.find((obj=>obj.object.id===payload.id)).node;if(!modelNode){log.error("Could not find object in _3DXObjects. Are you sure these object id exists?");return}if(position_offset==undefined){newObject.object_position.x=modelNode.position.x+.5;newObject.object_position.z=modelNode.position.z+.5}else{newObject.object_position.x=modelNode.position.x+position_offset.x;newObject.object_position.z=modelNode.position.z+position_offset.x}if(rotation_offset){newObject.object_rotation.x+=rotation_offset.x;newObject.object_rotation.y+=rotation_offset.y;newObject.object_rotation.z+=rotation_offset.z}log.info("copyObject id",newObject.object_data.id);const showcase_obj=yield addObjectToSpace(newObject.object_data.amazon_uri,newObject.object_data.object_type,{position:newObject.object_position,rotation:newObject.object_rotation,scale:newObject.object_scale},newObject.object_data);showcase_obj.object_data.name=newObject.object_data.name;showcase_obj.object_data.upload_file=newObject.object_data.upload_file;showcase_obj.object_data.object_thumbnail=newObject.object_data.object_thumbnail;return showcase_obj}log.error("Payload for copyObject is undefined");return}))}function replaceObject(payload,target,options=null){return __awaiter(this,void 0,void 0,(function*(){log.info("replaceObject()");if(payload&&target){removeTransformControls();target.node.stop();const showcase_obj=yield addObjectToSpace(payload.amazon_uri,"",{options:options,position:target.object.object_position,rotation:target.object.object_rotation,scale:target.object.object_scale});return showcase_obj}log.error("payload or target is undefined");return}))}function goToMPOrigin(iframeId,customMarkerUrl){return __awaiter(this,void 0,void 0,(function*(){log.info("goToMPOrigin()");try{const objects=get3DXObjects();log.info("marker objects: ",objects);let markerUrl="";if(customMarkerUrl){const isFullUrl=customMarkerUrl.startsWith("http://")||customMarkerUrl.startsWith("https://");markerUrl=isFullUrl?customMarkerUrl:getAssetUrl(customMarkerUrl)}else{markerUrl=getAssetUrl("images/basepointmarker.png")}const markerName=markerUrl.split("/").pop();const existingMarkerObj=objects.find((obj=>obj.object.object_data.amazon_uri.includes(markerName)));let markerObj=null;if(existingMarkerObj){markerObj=existingMarkerObj;log.info("Found existing origin marker.")}else{log.info("No existing marker found. Adding new marker.");if(markerUrl){yield addObjectToSpace(markerUrl,"PNG",{position:{x:0,y:0+.1,z:0},rotation:{x:Math.PI/2,y:0,z:0},options:{iframeId:iframeId}})}const updatedObjects=get3DXObjects();log.info("marker updatedObjects: ",updatedObjects);markerObj=updatedObjects[updatedObjects.length-1]}log.info("marker markerObj: ",markerObj);if(iframeId){yield goToModel(markerObj.object.id,iframeId)}else{yield goToModel(markerObj.object.id)}}catch(error){log.error("Error goToMPOrigin: ",error)}}))}function extractFileInfo(fileLink){return __awaiter(this,void 0,void 0,(function*(){log.info("fileLink",fileLink);let object_key="";let type="";if(fileLink){try{const response=yield _mediaApi.head(fileLink);if(response.status==200){log.info("== file info response ==",response);const contentType=response.headers["content-type"];const typeMatch=contentType.match(/\/([^;]+)/);if(typeMatch){type=typeMatch[1].toUpperCase()}else{log.error("Failed to extract content type");return}}else{log.error("Failed get request");return}}catch(error){log.error("Axios error",error);return}}log.info("=== OBJECT key ===",object_key);log.info("=== OBJECT type ===",type);return type}))}function createFileFromURL(url,fileName){return __awaiter(this,void 0,void 0,(function*(){log.info("createFileFromURL()");try{const response=yield fetch(url);const fileContent=yield response.blob();const file=new File([fileContent],fileName);log.info("Successfuly created file",file);return file}catch(error){log.error("Error creating File object:",error);return null}}))}function addMediaScreen(mediaUrl,transform,mediaViewerId,readonly,autoplay){return __awaiter(this,void 0,void 0,(function*(){log.info("=== addMediaScreen");log.info("=== mediaUrl",mediaUrl);log.info("=== transform",transform);log.info("=== readonly",readonly);log.info("=== autoplay",autoplay);if(mediaViewerId){log.info("=== mediaViewerId",mediaViewerId)}let defaultImageUri="";let mediaType;let mediaName;if(mediaUrl===null||mediaUrl===""){mediaUrl=undefined}if(!transform){log.error("Transform parameter is undefined");return}if(_mpConfig.prod===undefined||_mpConfig.prod===null){_mpConfig.prod=true}if(mediaUrl){const type=yield extractFileInfo(mediaUrl);log.info("__type",type);if(!type||type===""){log.error("Invalid URL provided. URL is not valid and failed to return content-type header");return}mediaName=generateUUID();mediaType=type}else{if("bundlePath"in _mpConfig){defaultImageUri=`https://cdn.jsdelivr.net/npm/architwin@latest/static/Nomedia.png`;mediaName="Nomedia";mediaType="PNG"}else{if(_mpConfig.prod&&!mediaUrl){defaultImageUri=`../static/Nomedia.png`;mediaName="Nomedia";mediaType="PNG"}else if(_mpConfig.prod==false&&!mediaUrl){defaultImageUri=`/architwin/static/Nomedia.png`;mediaName="Nomedia";mediaType="PNG"}}}if(!mediaUrl||mediaUrl===""){log.info("=== mediaUrl is not set. Using default",defaultImageUri);mediaUrl=defaultImageUri}const mediaScreenId=Number.parseInt(uid.rnd());_generatedObjectIds.push(mediaScreenId);const object_data={id:mediaScreenId,filename:`${mediaName}.${mediaType}`,name:mediaName,user_id:_userId,object_key:mediaName,object_type:mediaType,amazon_uri:mediaUrl};const options={name:"canvasFrame",type:mediaType,url:object_data.amazon_uri,visible:true,aspectRatio:1,mediaViewerId:mediaViewerId?mediaViewerId:mediaViewerId};log.info("__options",options);log.info("=== Adding programmatically");const showcase_obj=yield addObjectToSpace(object_data.amazon_uri,"",{options:options,position:transform.position,rotation:transform.rotation,scale:transform.scale});return showcase_obj}))}function attachMediaScreenContent(mediaScreenId,mediaUrl,mediaType="image"){return __awaiter(this,void 0,void 0,(function*(){log.info("attachMediaScreenContent");log.info("mediaScreenId",mediaScreenId);log.info("mediaUrl",mediaUrl);log.info("mediaType",mediaType);let urlPath;let typePath;let isFirstLoadPath;let expandMode=false;const fileTypes=["image","video","PDF","TXT"];if(!fileTypes.includes(mediaType)){log.error("Unsupported file type, please use a valid type");return}for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`url_${mediaScreenId}`){urlPath=path}if(desc.id===`type_${mediaScreenId}`){typePath=path}if(desc.id===`isFirstLoad_${mediaScreenId}`){isFirstLoadPath=path}}isFirstLoadPath.set(false);typePath.set(mediaType);if(urlPath){urlPath.set(mediaUrl);return}log.error("Could not find input path for specified object");return}))}function setBasePointPosition(id,position){let basePointPath;for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`basePosition_${id}`){basePointPath=path}}if(position==="corner"){basePointPath.set("corner")}else{basePointPath.set("center")}}function setVideoPlayback(action,element,objectId,isMediascreenDocked=false){log.info("setVideoPlayback",action,element);log.info("objects",_3DXObjects);const actions=["play","pause","mute","unmute"];let target;let meshChildren=[];let playMesh,pauseMesh,muteMesh,unmuteMesh;if(objectId){target=_3DXObjects.find((obj=>obj.object.id===objectId));if(target&&target.component.planeElement){if(isMediascreenDocked){target.component.setDockedMediascreenPlayback(action);return}else{meshChildren=target.component.mesh.children;if(meshChildren.length>0){meshChildren.forEach((mesh=>{if(mesh.name==="playBtn"){playMesh=mesh}else if(mesh.name==="pauseBtn"){pauseMesh=mesh}else if(mesh.name==="muteBtn"){muteMesh=mesh}else if(mesh.name==="unmuteBtn"){unmuteMesh=mesh}}))}}}}if(actions.includes(action)&&target&&target.component.planeElement){if(action===actions[0]){target.component.planeElement.play();if(playMesh&&pauseMesh){playMesh.visible=false;pauseMesh.visible=true}}else if(action===actions[1]){target.component.planeElement.pause();if(playMesh&&pauseMesh){playMesh.visible=true;pauseMesh.visible=false}}else if(action===actions[2]){target.component.planeElement.muted=true;if(muteMesh&&unmuteMesh){muteMesh.visible=false;unmuteMesh.visible=true}}else if(action===actions[3]){target.component.planeElement.muted=false;if(muteMesh&&unmuteMesh){muteMesh.visible=true;unmuteMesh.visible=false}}return}log.error("Argument does not match known actions");return}function setModelVisibility(id,visible){log.info("__setModelVisibility()",id,visible);const target=_3DXObjects.find((obj=>obj.object.id===id));const index=_3DXObjects.findIndex((obj=>obj.object.id===id));if(target){_3DXObjects[index].component.mesh.visible=visible!==undefined?visible:!target.component.mesh.visible;return}log.error(`Parameter id value ${id} does not exist`);return}function toggleFitToScreen(id,visibility=false){console.log("toggleFitToScreen()",id);const target=_3DXObjects.find((obj=>obj.object.id===id));console.log("Mesh object",target);if(visibility){target.component.activateFitToScreen();return}const isDismissed=target.component.dismissFitToScreen();return isDismissed}function addTextMarkupScreen(title="",message,textScreenName,transform,textColor="black",backgroundColor="#fff"){return __awaiter(this,void 0,void 0,(function*(){log.info("=== title",title);log.info("=== message",message);log.info("=== textScreenName",textScreenName);if(!message){log.error("Message is undefined");return}if(!textScreenName){log.error("textScreenName is undefined");return}if(!transform){log.error("transform object is undefined. Please supply the necessary x,y,z values");return}const textScreenId=Number.parseInt(uid.rnd());_generatedObjectIds.push(textScreenId);const object_data={id:textScreenId,filename:textScreenName,user_id:_userId,name:textScreenName,object_type:"MARKUP"};const options={name:textScreenName,title:title,text:message,iframeId:_mpConfig.iframeId,textColor:textColor,backgroundColor:backgroundColor,visible:true};transform.position.y+=2;log.info("=== Adding programmatically");const showcase_obj=yield addObjectToSpace(object_data.amazon_uri,"",{options:options,position:transform.position,rotation:transform.rotation,scale:transform.scale});return showcase_obj}))}function setTextMarkupScreenContent(showcase_id,title="",text="",textColor="",backgroundColor=""){log.info("setTextMarkupScreenContent()");if(!showcase_id){log.error("showcase_id or textScreenName is undefined");return}let titlePath;let textPath;let textColorPath;let backgroundColorPath;for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`title_${showcase_id}`){titlePath=path}if(desc.id===`text_${showcase_id}`){textPath=path}if(desc.id===`textColor_${showcase_id}`){textColorPath=path}if(desc.id===`backgroundColor_${showcase_id}`){backgroundColorPath=path}}if(title&&title!=="")titlePath.set(title);if(text&&text!=="")textPath.set(text);if(textColor&&textColor!=="")textColorPath.set(textColor);if(backgroundColor&&backgroundColor!=="")backgroundColorPath.set(backgroundColor)}function setState({isLoading:isLoading,loaded:loaded,error:error,data:data}){const newState={isLoading:isLoading,loaded:loaded,error:error!==undefined?error:"",data:data!==undefined?data:null};state=Object.assign({},newState)}function checkValidFileType(payload){if(payload){const fileName=payload.name;const fileExtension=fileName.substring(fileName.lastIndexOf(".")+1);log.info("File extension "+fileExtension);if(supportedFileTypes.includes(fileExtension.toUpperCase())){return{valid:true,type:fileExtension}}return{valid:false}}log.error("No file provided");return{valid:false}}function addObject(payload){return __awaiter(this,void 0,void 0,(function*(){if(_userId){payload.user_id=_userId}else{log.warn("_userId is not defined")}const isValid=checkValidFileType(payload.file);if(isValid.valid){try{const response=yield _api.post("/s3/file.json",payload);log.info("S3 response is: ",response);if(response.data.status=="success"){const id=response.data.query_result.id;const object_data=yield getObject(id);return object_data}}catch(error){log.error("Object upload failed"+error)}}log.error("Unsupported file type");return}))}function addShowcaseObject(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("addShowcaseObject()");if(payload){payload.object_position=JSON.stringify(payload.object_position);payload.object_rotation=JSON.stringify(payload.object_rotation);payload.object_scale=JSON.stringify(payload.object_scale);delete payload["id"];try{const response=yield _api.post("/v1/showcase-objects.json",payload);log.info("API response is: ",response);if(response.data.status=="success"){log.info("Add showcase data",response.data.data);return response.data.data.id}}catch(error){log.error("Object upload failed"+error);return}}return}))}function getObject(id){return __awaiter(this,void 0,void 0,(function*(){log.info("getObject()");setState({isLoading:true,loaded:false});if(id){try{const response=yield _api.get(`/v1/objects/id/${id}`);if(response.data.status=="success"){const object_data=response.data.data[0];log.info("Response"+JSON.stringify(object_data));return object_data}log.error("Failed to get requested object")}catch(error){log.error("Error getting object "+error)}}return}))}function getShowcaseObject(id){return __awaiter(this,void 0,void 0,(function*(){log.info("getShowcaseObject()");if(id){try{const response=yield _api.get(`/v1/showcase-objects/showcase-id/${id}`);if(response.data.status=="success"){const showcase_object=response.data.data[0];const object=yield getObject(showcase_object.object_id);showcase_object.object_data=object;log.info("Success ",showcase_object);return showcase_object}log.error("Failed to get requested showcase object")}catch(error){log.error("Error getting showcase object "+error)}}log.error("id is undefined");return}))}function updateShowcaseObject(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("getShowcaseObject()",payload);payload.object_position=JSON.stringify(payload.object_position);payload.object_rotation=JSON.stringify(payload.object_rotation);payload.object_scale=JSON.stringify(payload.object_scale);if(payload.id){const objPayload=payload;delete objPayload["object_data"];try{const response=yield _api.put(`/v1/showcase-objects/${payload.id}`,payload);log.info("updateShowcaseObject API response ",response.data);if(response.data.status=="success"){log.info("Succsss API response ",response.data);const showcase_object=payload;const object=yield getObject(payload.object_id);showcase_object.object_data=object;return showcase_object}log.error("Failed to get requested showcase object");return}catch(error){log.error("Error getting showcase object "+error);return}}log.error("id is undefined");return}))}function updateObject(id,payload){return __awaiter(this,void 0,void 0,(function*(){const isValid=checkValidFileType(payload.file);if(isValid.valid){try{const response=yield _api.put(`/s3/file/${id}.json`,payload);log.info("S3 response is: ",response);if(response.data.status=="success"){const id=response.data.query_result.id;const object_data=yield getObject(id);return object_data}}catch(error){log.error("Object upload failed"+error)}}log.info("Unsupported file type");return}))}function updateObjectUri(id,uri,mediaType){return __awaiter(this,void 0,void 0,(function*(){if(id&&uri){const payload={};payload.amazon_uri=uri;payload.object_type=mediaType.toUpperCase();try{const response=yield _api.put(`v1/objects/${id}.json`,payload);if(response.status==200){log.info("Successfuly updated URI");return}}catch(error){log.error("Update object uri error",error)}return}log.error("id and/or uri is undefined");return}))}function deleteObject(id){return __awaiter(this,void 0,void 0,(function*(){if(id){try{const response=yield _api.delete(`/s3/file/${id}.json`);log.info("S3 response is: ",response.data);if(response.data.status=="success"){log.info("S3 object deleted");return}}catch(error){log.error("Object delete failed"+error);return}}log.error("id is undefined");return}))}function deleteShowcaseObject(id){return __awaiter(this,void 0,void 0,(function*(){if(id){try{const response=yield _api.delete(`/v1/showcase-objects/${id}.json`);log.info("deleteShowcaseObject response is: ",response.data);if(response.data.status=="success"){log.info("Showcase object deleted");return}}catch(error){log.error("Delete showcase object failed"+error);return}}log.error("id is undefined");return}))}function deleteObjectFromSpace(target){return __awaiter(this,void 0,void 0,(function*(){log.info("deleteObjectFromSpace()");if(target){try{removeTransformControls();target.node.stop();selectedObject=null;if(target.object.object_data.object_type==="MARKUP"){const targetElement=document.getElementById(target.object.object_data.name);if(targetElement){targetElement.remove()}}const filteredRenderedObjects=_3DXObjects.filter((obj=>obj.object.id!==target.object.id));_3DXObjects=filteredRenderedObjects;log.info("Deleted object from scene");return target.object.id}catch(error){log.info("Delete showcase object error",error);return}}log.error("Target object is undefined");return}))}function disposeModel(target){return __awaiter(this,void 0,void 0,(function*(){log.info("disposeModel()",target);if(target){try{removeTransformControls();target.node.stop();selectedObject=null;const removedObject=_3DXObjects.find((obj=>obj.object.id==target.object.id));log.info("removedObjects",removedObject);const filteredRenderedObjects=_3DXObjects.filter((obj=>obj.object.id!==target.object.id));_3DXObjects=filteredRenderedObjects;log.info("Deleted object from scene");dispatchSpaceEvent(SPACE_EVENTS.MODEL_DISPOSED,{model:removedObject});return target.object.id}catch(error){log.info("Delete showcase model error",error);return}}log.error("Target is undefined");return}))}function disposeAllModels(){return __awaiter(this,void 0,void 0,(function*(){log.info("disposeAllModels()");try{if(_3DXObjects&&_3DXObjects.length>0){removeTransformControls();selectedObject=null;const modelIds=[];for(let i=0;i<_3DXObjects.length;i++){_3DXObjects[i].node.stop();modelIds.push(_3DXObjects[i].object.id)}_3DXObjects=[];dispatchSpaceEvent(SPACE_EVENTS.MODEL_DISPOSED,{model:_3DXObjects});return modelIds}}catch(error){log.error("disposeAllModels error ",error)}}))}function deleteMediaScreen(mediaScreenId){return __awaiter(this,void 0,void 0,(function*(){log.info("_3DXObjects",_3DXObjects);log.info("mediaScreenId",mediaScreenId);let selectedMediaScreen=_3DXObjects.find((obj=>obj.object.id===mediaScreenId&&obj.type==="FRAME"));log.info(selectedMediaScreen);const id=yield deleteObjectFromSpace(selectedMediaScreen);return id}))}function setLibrary(libraryModels){return __awaiter(this,void 0,void 0,(function*(){_assetLibrary=libraryModels;log.info("_assetLibrary",_assetLibrary);return _assetLibrary}))}function getLibrary(refetch=false){return __awaiter(this,void 0,void 0,(function*(){if(refetch&&_assetLibrary.length!=0){try{const response=yield _api.get(`/s3/file.json`);log.info("S3 response is: ",response);if(response.data.status=="success"){const objects=response.data.data;_assetLibrary=objects;return _assetLibrary}return}catch(error){log.info("Error! Failed to fetch data",error);return}}log.info("_assetLibrary",_assetLibrary);return _assetLibrary}))}function waitFor(conditionFunction,maxRetries){let retries=0;return new Promise((function(resolve,reject){function checkCondition(){if(conditionFunction()){resolve()}else if(retries<maxRetries){retries++;setTimeout(checkCondition,1e3)}else{log.info("Maximum retries reached");reject()}}checkCondition()}))}function isObjectRendered(objectId){const object=_3DXObjects.find((obj=>obj.object.id===objectId));if(object!==undefined){return true}return false}function getPrioritizedParam(url){const urlObj=new URL(url);let prioritizedParam=null;const pairs=urlObj.search.slice(1).split("&");for(const pair of pairs){const param=pair.split("=")[0];if((param==="objectId"||param==="tag"||param==="sweep")&&!prioritizedParam){prioritizedParam=param}}return prioritizedParam}function handleParamValuesInSpaceUrl(url){return __awaiter(this,void 0,void 0,(function*(){log.info("handleParamValuesInSpaceUrl()");log.info("space URL: ",url);const prioritizedParam=getFirstMatchingQueryParam(url);const spaceUrl=new URL(url);const paramValue=spaceUrl.searchParams.get(prioritizedParam);if(prioritizedParam==="sweepId"){moveToSweep(paramValue)}else if(prioritizedParam==="tagId"){gotoTag(paramValue)}else{log.info("No param passed for tag, sweep");return}}))}function getFirstMatchingQueryParam(url){const urlObj=new URL(url);let prioritizedParam=null;const pairs=urlObj.search.slice(1).split("&");for(const pair of pairs){const param=pair.split("=")[0];if((param==="tagId"||param==="sweepId")&&!prioritizedParam){prioritizedParam=param}}return prioritizedParam}function getNearestSweepFromObject(objectId){const target=_3DXObjects.find((obj=>obj.object.id===objectId));let closestIndex=0;let lastDistance;if(target){log.info("TARGET",target);const location=target.node.position;log.info("Target position: ",location);for(let i=0;i<sweeps.length;i++){const distance=calculateDistance(location,sweeps[i].position);log.info("Sweep positions: ",sweeps[i].position);log.info("distance: ",distance);if(!lastDistance){lastDistance=distance}if(distance<lastDistance){lastDistance=distance;closestIndex=i}}if(closestIndex){log.info("Closest Sweep:",sweeps[closestIndex]);log.info("Closest Sweep index:",closestIndex);return{sweepId:sweeps[closestIndex].id,index:closestIndex}}else{log.info("No sweeps found");return}}log.error("Failed to find object");return}function getNearestSweepFromUnrenderedObject(objectId){const target=_unrenderedObjects.find((obj=>obj.id===objectId));let closestIndex=0;let lastDistance;if(target){const location=target.object_position;log.info("Target position: ",location);for(let i=0;i<sweeps.length;i++){const distance=calculateDistance(location,sweeps[i].position);log.info("Sweep positions: ",sweeps[i].position);log.info("distance: ",distance);if(!lastDistance){lastDistance=distance}if(distance<lastDistance){lastDistance=distance;closestIndex=i}}if(closestIndex){log.info("Closest Sweep:",sweeps[closestIndex]);log.info("Closest Sweep index:",closestIndex);return{sweepId:sweeps[closestIndex].id,index:closestIndex}}else{log.info("No sweeps found");return}}log.error("Failed to find object");return}function goToUnrendered3dx(objectId){return __awaiter(this,void 0,void 0,(function*(){const neareastSweep=getNearestSweepFromUnrenderedObject(objectId);if(neareastSweep){yield moveToSweep(neareastSweep.sweepId)}log.info("Failed to find the nearest sweep!");return}))}function rotateCameraToObject(objectCoord){return __awaiter(this,void 0,void 0,(function*(){const d={x:objectCoord.x-_currentCameraPose.position.x,y:objectCoord.y-_currentCameraPose.position.y,z:objectCoord.z-_currentCameraPose.position.z};const yaw=Math.atan2(d.y,d.x);const distanceXY=Math.sqrt(d.x*d.x+d.y*d.y);const pitch=Math.atan2(-d.z,distanceXY);const yawDegrees=yaw*(180/Math.PI);const pitchDegrees=pitch*(180/Math.PI);yield _atwin.Camera.rotate(yawDegrees,pitchDegrees);log.info(`Yaw: ${yaw} and pitch: ${pitch}`)}))}function goTo3dx(objectId){return __awaiter(this,void 0,void 0,(function*(){log.info("Object ID: ",objectId);const neareastSweep=getNearestSweepFromObject(objectId);const target=_3DXObjects.find((obj=>obj.object.id===objectId));if(neareastSweep){yield moveToSweep(neareastSweep.sweepId);yield waitFor((()=>_currentSweep.id===neareastSweep.sweepId),5);yield rotateCameraToObject(target.object.object_position)}log.info("Failed to find the nearest sweep!");return}))}function goToModel(objectId,iframeId){return __awaiter(this,void 0,void 0,(function*(){const target=_3DXObjects.find((obj=>obj.object.id===objectId||obj.object.media_viewer_id===objectId));if(target){const noBillboardTag=target.node.id}log.info("goToModel ",target);if(target.node.position.x||target.node.position.y||target.node.position.z){goToPosition(target.node.position,iframeId)}else if(target.object.object_position){goToPosition(target.object.object_position,iframeId)}else{log.error("Failed to navigate to the model. Position is undefined")}}))}function goToParticipant(participantId){return __awaiter(this,void 0,void 0,(function*(){const participant=_meetingParticipants.find((participant=>participant.id==participantId));log.info("participant",participant);if(participant){goToPosition(participant.position)}}))}function goToPosition(pos,iframeId){return __awaiter(this,void 0,void 0,(function*(){const sdk=iframeId?_atwinConnections[iframeId]:_atwin;log.info("goToPosition",pos);sdk.Tag.add({anchorPosition:{x:pos.x,y:pos.y,z:pos.z},stemVector:{x:0,y:0,z:0},opacity:0,stemVisible:false}).then((newSid=>{log.info("tags list",_tags);log.info("tag new SID",newSid);sdk.Mattertag.navigateToTag(newSid[0],sdk.Mattertag.Transition.INSTANT).then((()=>__awaiter(this,void 0,void 0,(function*(){yield sdk.Tag.remove(newSid[0]);yield sdk.Camera.rotate(-10,10)}))));log.info("tags list",_tags)}));return pos}))}function showMinimap(){minimap.showMinimap()}function hideMinimap(){minimap.hideMinimap()}function getMapConfig(){log.info("getMapConfig()");if(_mpConfig&&_mpConfig.mapConfig){return _mpConfig.mapConfig}}function createNavigationControlComponent(){if(_isNavigationComponentCreated&&!_mpConfig.multispace){log.info("navigation control component already created");return}_navigationInputNode=_sceneObject.addNode();_navigationComponent=_navigationInputNode.addComponent("mp.input");_navigationInputNode.start();_isNavigationComponentCreated=true}function toggleSpaceNavigation(state=true){if(!_navigationComponent){log.error("_navigationComponent is undefined");return}_navigationComponent.inputs.userNavigationEnabled=state}function drawPath(vertices,options){return __awaiter(this,void 0,void 0,(function*(){console.log("DRAW VERTIECE",vertices);if(!vertices||vertices.length<=0){log.error("vertices array is empty or undefined");return}try{const lineNode=_tubes.addNode();if(options){options.path=vertices}else{options={path:vertices}}options.visible=true;options.node=lineNode;options.tubes=_tubes;options.active=true;options.renderPolygonOnAdd=false;const lineComponent=lineNode.addComponent(tubeLineType,options);lineNode.start();if(!_currentPathfindingTubeline){const lineObj={};lineObj.id=Number.parseInt(uid.rnd());lineObj.object_type="TUBELINE";lineObj.name=`tubeline-${uid.rnd()}`;lineObj.created_on=(new Date).toDateString();lineObj.user_id=_userId;const showcaseObj=createIShowcaseObjectData(lineObj);_tubes.addInputPath(lineComponent,"path",`pathLine_${showcaseObj.id}`);const newObj={object:showcaseObj,node:lineNode,component:lineComponent,type:"TUBELINE"};_3DXObjects.push(newObj);_currentPathfindingTubeline=newObj}else{const id=_currentPathfindingTubeline.object.id;setPathLine(id,vertices)}}catch(error){log.error("Error rendering line ",error)}}))}function setPathLine(id,path){if(!id){log.error("id is undefined");return}if(!path||path.length<=0){log.error("Path is empty or undefined");return}if(!_tubeLinePath){for(const{desc:desc,path:path}of _tubes.pathIterator()){if(desc.id===`pathLine_${id}`){_tubeLinePath=path}}if(!_tubeLinePath){log.error("No mathching input path with this id");return}}try{_tubeLinePath.set(path)}catch(error){log.error("Failed to update tube path ",error)}}function setPathLineOptions(id,options){if(!options){log.error("Path is empty or undefined");return}if(id){if(!_pathLineOptions){for(const{desc:desc,path:path}of _tubes.pathIterator()){if(desc.id===`pathLineOptions_${id}`){_pathLineOptions=path}}if(!_pathLineOptions){log.error("No mathching input path with this id");return}}try{_pathLineOptions.set(options)}catch(error){log.error("Failed to update tube path ",error)}}else{if(_thisVertexComponent){Object.entries(options).forEach((([key,value])=>{_thisVertexComponent.inputs[key]=value}))}}}function disposePathLine(){if(!_currentPathfindingTubeline){log.error("_currentPathfindingTubeline is undefined");return}disposeModel(_currentPathfindingTubeline);_currentPathfindingTubeline=undefined}function getCurrentTubeLine(){return _currentPathfindingTubeline}function renderPath(vertices,options){if(!vertices||vertices.length<=0){log.error("vertices array is empty or undefined");return}try{const lineNode=_tubes.addNode();if(options){options.path=vertices}else{options={path:vertices}}if(options.id&&_3DXObjects.find((obj=>obj.object.id==options.id))){setPathLineOptions(options.id,options)}else{options.visible=true;options.node=lineNode;options.tubes=_tubes;options.active=true;const componentType=options.lineComponentType?options.lineComponentType:tubeLineType;const lineComponent=lineNode.addComponent(componentType,options);lineNode.start();const lineObj={};lineObj.id=Number.parseInt(uid.rnd());lineObj.object_type="PATH";lineObj.name=`tubeline-${uid.rnd()}`;lineObj.created_on=(new Date).toDateString();lineObj.user_id=_userId;lineObj.object_uuid=options.uuid;const showcaseObj=createIShowcaseObjectData(lineObj);_tubes.addInputPath(lineComponent,"path",`pathLine_${showcaseObj.id}`);_tubes.addInputPath(lineComponent,"path",`pathLineOptions_${showcaseObj.id}`);const newObj={object:showcaseObj,node:lineNode,component:lineComponent,type:"PATH"};_3DXObjects.push(newObj);_currentPathfindingTubeline=newObj}}catch(error){log.error("Error rendering line ",error)}}function renderPolygon(payload,options){log.info("__@ renderPolygon: ",payload,options,typeof payload,Array.isArray(payload));if(!payload){log.error("Payload is undefined");return}if(Array.isArray(payload)){if(payload.length<=0){log.error("path is empty or undefined");return}}let polyNode;let polyComponent;const polyObj={};polyObj.id=Number.parseInt(uid.rnd());polyObj.object_type="POLYGON";polyObj.name=`floor-${polyObj.id}`;polyObj.created_on=(new Date).toDateString();polyObj.user_id=_userId;const showcaseObj=createIShowcaseObjectData(polyObj);if(Array.isArray(payload)){showcaseObj.object_position=payload[0];if(options){options.path=payload}else{options={path:payload}}options.excludeHiddenWallsFromCalculation=false;if(_wallBaseHeight){options.wallHeight=_wallBaseHeight}log.info("_currentPolygon",_currentPolygon);log.info("renderPolygon array type currentPolygon ",_currentPolygon);if(!_currentPolygon){try{polyNode=_sceneObject.addNode();polyComponent=polyNode.addComponent(bufferGeometryType,options);polyNode.start();_sceneObject.addInputPath(polyComponent,"path",`path_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"visible",`visible_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"polygonData",`polygonData_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"wallHeight",`wallHeight_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"drawingMode",`drawingMode_${showcaseObj.id}`);const newObj={object:showcaseObj,node:polyNode,component:polyComponent,type:"POLYGON"};const eventPath=_sceneObject.addEmitPath(polyComponent,"polygonclicked");_sceneObject.spyOnEvent(new PolygonClickSpy(eventPath,showcaseObj,polyNode,polyComponent,dispatchSpaceEvent));newObj.object.object_data.json_data={path:payload};_currentPolygon=newObj;if(!_currentPolygon.object.object_data.uuid){_currentPolygon.object.object_data.uuid=generateUUID()}log.info("_currentPolygon ",_currentPolygon);log.info("options.drawingMode ",options.drawingMode);if(options.drawingMode=="window"){log.info("index",options.objectIndex);if(!_3DXObjects[options.objectIndex].children){_3DXObjects[options.objectIndex].children=[]}log.info("newObj",newObj);_3DXObjects[options.objectIndex].children.push(Object.assign(Object.assign({},newObj),{index:options.targetIndex,wallUUID:options.targetUUID}))}else{_3DXObjects.push(newObj)}}catch(error){log.error("Error renderPolygon ",error)}}else{const index=_3DXObjects.findIndex((item=>item.object.id==_currentPolygon.object.id));if(!_currentPolygon.object.object_data.uuid){_currentPolygon.object.object_data.uuid=generateUUID()}_currentPolygon.object.object_data.json_data.path=payload;_3DXObjects[index]=_currentPolygon;if(payload.length>=3){console.log(" _3DXObjects[index] ",_3DXObjects[index]);if(_pathConfig.lineTypeComponentConfig.drawingMode!="window"){setPolygonPath(_3DXObjects[index].object.id,payload);if(options.wallHeight){setPolygonWalHeightPath(_3DXObjects[index].object.id,options.wallHeight)}}else{const polyData=options.polygonData;log.info("polyData ",polyData);const wallIndex=polyData.walls.findIndex((wall=>wall.uuid==options.targetUUID));log.info("wallIndex ",wallIndex);if(wallIndex!=undefined){log.info("setPolygonPath window ",wallIndex);log.info("window, wallInex, targetIndex, payload",polyData,wallIndex,options.targetIndex,payload);polyData.walls[wallIndex].windows[options.targetIndex].path=payload;if(!getIsEditWindow()){setPolygonPath(_3DXObjects[index].object.id,payload)}else{setPolygonDataPath(_3DXObjects[index].object.id,polyData)}}}}}}else{if(!options){options={}}options.excludeHiddenWallsFromCalculation=false;const targetPolygon=_3DXObjects.find((obj=>obj.object.object_data.uuid==payload.uuid));if(!targetPolygon){log.info("Creating new partition");options.path=payload.polygon_json.path;options.uuid=payload.uuid;options.polygonData=payload.polygon_json;options.wallData=payload.polygon_json.walls;options.floorData=payload.polygon_json.floor;options.visible=payload.polygon_json.options?payload.polygon_json.options.is_visible:true;options.floorData=payload.polygon_json.floor;polyNode=_sceneObject.addNode();polyComponent=polyNode.addComponent(bufferGeometryType,options);polyNode.start();showcaseObj.object_data.uuid=payload.uuid;showcaseObj.object_data.name=payload.name;showcaseObj.object_data.json_data=payload.polygon_json;if(!showcaseObj.object_position){showcaseObj.object_position=payload.polygon_json.path[0]}log.info("options.drawingMode ",options.drawingMode);_sceneObject.addInputPath(polyComponent,"path",`path_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"wallData",`wallData_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"polygonData",`polygonData_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"wallHeight",`wallHeight_${showcaseObj.id}`);_sceneObject.addInputPath(polyComponent,"drawingMode",`drawingMode_${showcaseObj.id}`);const eventPath=_sceneObject.addEmitPath(polyComponent,"polygonclicked");_sceneObject.spyOnEvent(new PolygonClickSpy(eventPath,showcaseObj,polyNode,polyComponent,dispatchSpaceEvent));const newObj={object:showcaseObj,node:polyNode,component:polyComponent,type:"POLYGON"};if(options.drawingMode=="window"){const index=_3DXObjects.indexOf(targetPolygon);_3DXObjects[index].children.push({component:polyComponent,node:polyNode,index:options.targetIndex})}else{_3DXObjects.push(newObj)}}else{log.info("payload",payload);const index=_3DXObjects.findIndex((item=>item.object.object_data.uuid==payload.uuid));if(payload.polygon_json.path.length>=3){console.log(" _3DXObjects[index] ",_3DXObjects[index]);setPolygonPath(_3DXObjects[index].object.id,payload.polygon_json.path);setPolygonDataPath(_3DXObjects[index].object.id,payload.polygon_json);setPolygonWalHeightPath(_3DXObjects[index].object.id,payload.polygon_json.walls[0].wall_height)}}}return showcaseObj}function setPolygonPath(id,vertices){log.info("setPolygonPath()");let polygonShapePath;if(!id||!vertices||vertices.length<=0){log.error("id or vertices is empty or undefined");return}if(!_polygonShapePath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`path_${id}`){polygonShapePath=path;_polygonShapePath=polygonShapePath}}if(!polygonShapePath){log.error("No mathching input path with this id");return}}log.info("_polygonShapePath ",_polygonShapePath);_polygonShapePath.set(vertices);return}function setPolygonDrawingMode(id,mode){log.info("setPolygonDrawingMode()");let polygonDrawingModePath;if(!id||!mode){log.error("id or vertices is empty or undefined");return}if(!_polygonDrawingModePath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`drawingMode_${id}`){polygonDrawingModePath=path;_polygonDrawingModePath=polygonDrawingModePath}}if(!polygonDrawingModePath){log.error("No mathching input path with this id");return}}log.info("_polygonDrawingModePath ",_polygonDrawingModePath);_polygonDrawingModePath.set(mode);return}function setPolygonWallDataPath(id,vertices){log.info("setPolygonWallDataPath()");let polygonWallDataPath;if(!id||!vertices||vertices.length<=0){log.error("id or vertices is empty or undefined");return}if(!_polygonWallDataPath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`wallData_${id}`){polygonWallDataPath=path;_polygonWallDataPath=polygonWallDataPath}}if(!polygonWallDataPath){log.error("No mathching input path with this id");return}}log.info("_polygonWallDataPath ",_polygonShapePath);_polygonWallDataPath.set(vertices);return}function setPolygonDataPath(id,payload){log.info("setPolygonDataPath()");let polygonWallDataPath;if(!id||!payload){log.error("id or vertices is empty or undefined");return}if(!_polygonDataPath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`polygonData_${id}`){polygonWallDataPath=path;_polygonDataPath=polygonWallDataPath}}if(!_polygonDataPath){log.error("No mathching input path with this id");return}}log.info("_polygonDataPath ",_polygonDataPath);_polygonDataPath.set(payload);return}function setPolygonWalHeightPath(id,payload){log.info("setPolygonWalHeightPath()");let polygonWallHeightPath;if(!id||!payload){log.error("id or payload is empty or undefined");return}if(!_polygonWallHeightPath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`wallHeight_${id}`){polygonWallHeightPath=path;_polygonWallHeightPath=polygonWallHeightPath}}if(!_polygonWallHeightPath){log.error("No mathching input path with this id");return}}log.info("_polygonDataPath ",_polygonWallHeightPath);_polygonWallHeightPath.set(payload);return}function setPolygonFloorLevelPath(id,payload){log.info("setPolygonWalHeightPath()");let polygonWallHeightPath;if(!id||!payload){log.error("id or payload is empty or undefined");return}if(!_polygonWallHeightPath){for(const{desc:desc,path:path}of _sceneObject.pathIterator()){if(desc.id===`wallHeight_${id}`){polygonWallHeightPath=path;_polygonWallHeightPath=polygonWallHeightPath}}if(!_polygonWallHeightPath){log.error("No mathching input path with this id");return}}log.info("_polygonDataPath ",_polygonWallHeightPath);_polygonWallHeightPath.set(payload);return}function createVerticeClickPath(){_verticeEmitPath=_sceneObject.addPath({id:"verticeClickSpy",type:_atwin.Scene.PathType.EMIT,node:_navigationInputNode,component:_navigationComponent,property:"INTERACTION.CLICK"})}function addVerticeControls(component,index){const currentMode=getViewMode();let isFloorPlanMode=false;if(currentMode==_atwin.Mode.Mode.FLOORPLAN){isFloorPlanMode=true}const verticeComponent=_thisVerticesNode.addComponent(_pathConfig.verticeType,{index:index,position:Object.assign({},component.inputs.path[index]),ringVisibility:isFloorPlanMode});_verticeComponentsCollection.push(verticeComponent);const editVertice=_sceneObject.addEmitPath(verticeComponent,"changed");_sceneObject.spyOnEvent({path:editVertice,onEvent(data){console.log("verticeComponent chamge",data.position);if(data.collider!==null){const nodeIterator=_tubes.nodeIterator();let nodes=nodeIterator.next();while(!nodes.done){const componentIterator=nodes.value.componentIterator();let component=componentIterator.next();component.value.inputs.collider=data.collider;nodes=nodeIterator.next()}if(isToolbarFeatureEnabled("pipe")){pathHistory.addToHistory(_thisVertexPath)}}_activeVertex.inputs.active=false;log.info("setPolygonPath _pathConfig",_pathConfig);log.info("setPolygonPath not window");if(_pathConfig.lineTypeComponentConfig.drawingMode!="window"){setPolygonPath(_currentPolygon.object.id,data.position)}else if(_currentPolygon&&_pathConfig.lineTypeComponentConfig.drawingMode=="window"){log.info("addVerticeControls window",_pathConfig.lineTypeComponentConfig);log.info("addVerticeControls _polygonDataPath",_polygonDataPath);const polyData=_pathConfig.lineTypeComponentConfig.polygonData;const parentIndex=_pathConfig.lineTypeComponentConfig.objectIndex;const wallIndex=polyData.walls.findIndex((wall=>wall.uuid==_pathConfig.lineTypeComponentConfig.targetUUID));if(wallIndex!=undefined){polyData.walls[wallIndex].windows[_pathConfig.lineTypeComponentConfig.targetIndex].path=data.position;setPolygonDataPath(_currentPolygon.object.id,polyData);if(parentIndex!==undefined&&_3DXObjects[parentIndex]){_3DXObjects[parentIndex].object.object_data.json_data=polyData}}}_activeVertex.inputs.path[data.index]=data.position;_activeVertex.inputs.active=true}})}function createVerticeControls(component,isDeleting=false){if(!component){log.error("component is undefined");return}if(_thisVerticesNode){_thisVerticesNode.stop()}let verticeNode=_sceneObject.addNode();_thisVerticesNode=verticeNode;let sections=component.inputs.path.length-1;for(let i=0;i<=sections;i++){addVerticeControls(component,i)}if(_currentPolygon){if(isDeleting&&component.inputs.path.length<=2){_currentPolygon.component.groupedMesh.visible=false}else if(isDeleting==false&&component.inputs.path.length>2){log.info(" _currentPolygon.component ",_currentPolygon.component);_currentPolygon.component.groupedMesh.visible=true}}verticeNode.start()}function createVertexPoints(position,redrawing=false){log.info("createVertexPoints()");if(!position){log.error("Position is undefined");return}const floorGroundLevelY=getFloorGroundLevelY();console.log("The ground level Y-coordinate for floor ",floorGroundLevelY);const viewMode=new Set([_atwin.Mode.Mode.DOLLHOUSE,_atwin.Mode.Mode.FLOORPLAN]);if(viewMode.has(getViewMode())){position.y=floorGroundLevelY;console.log("Snapping to floor level at Y:",position.y)}if(_thisVertexNode===undefined){log.info("_thisVertexNode is undefined. Adding vertex...");let start=Object.assign({},position);log.info("_floorBaseHeight",_floorBaseHeight);if(_floorBaseHeight!==undefined){log.info("Using _floorBaseHeight");if(getDrawingMode()=="partition"){start.y=_floorBaseHeight}}const r=x=>Math.round(x*100)/100;let thisName="x"+r(start.x)+"y"+r(start.y)+"z"+r(start.z);if(redrawing){thisName=`${thisName}-${uid.rnd()}`}[_thisVertexNode,_thisVertexComponent]=addVertex(thisName,[start]);_thisVertexPath.push(start);if(visualize){_activeVertex.inputs.collider=false}_vertexConnectiveComponentCollection.push(_thisVertexComponent);_vertexConnectiveNodeCollection.push(_thisVertexNode);log.info("_thisVertexNode ",_thisVertexNode);createVerticeControls(_thisVertexComponent)}else{log.info("_thisVertexNode is defined");log.info("before position ",position);log.info("before _floorBaseHeight ",_floorBaseHeight);let point=Object.assign({},position);if(_floorBaseHeight!==undefined){if(getDrawingMode()=="partition"){point={x:position.x,y:_floorBaseHeight,z:position.z}}}log.info("after position ",point);_thisVertexPath.push(Object.assign({},point));_thisVertexComponent.inputs.path=[..._thisVertexPath];createVerticeControls(_thisVertexComponent)}}function createVerticeClickSpy(){log.info("createVerticeClickSpy()");if(_isVerticeClickSpyCreated){log.info("Vertice click spy has already been created");return}const click_path=_sceneObject.addPath({id:"clicklistener",type:_atwin.Scene.PathType.EMIT,node:_navigationInputNode,component:_navigationComponent,property:"INTERACTION.CLICK"});const click_spy={path:click_path,onEvent(event_data){log.info("ClickSpy");log.info("isAltPressed ",isAltPressed);if(isAltPressed){if(_drawPolygonMode){createVertexPoints(_intersectionData.position);if(isToolbarFeatureEnabled("pipe")){pathHistory.addToHistory(_thisVertexPath)}if(isToolbarFeatureEnabled("roomCreation")){partitionHistory.addToHistory(_thisVertexPath)}dispatchSpaceEvent(SPACE_EVENTS.VERTEX_PLACED,{position:_intersectionData.position,path:_thisVertexPath})}}}};_sceneObject.spyOnEvent(click_spy);_isVerticeClickSpyCreated=true}function deleteVertex(index){log.info("deleteVertex()");if(!_thisVertexComponent){log.error("An active vertex component is required");return}if(!_thisVertexPath||_thisVertexPath.length<=0){log.error("Vertex path is empty or undefined");return}if(index!==undefined){log.info("_thisVertexPath before ",_thisVertexPath);_thisVertexPath=_thisVertexPath.slice(index,1);_thisVertexComponent.inputs.path=[..._thisVertexPath];log.info("_thisVertexPath after ",_thisVertexPath);createVerticeControls(_thisVertexComponent,true)}else{log.info("_thisVertexPath before ",_thisVertexPath);log.info("_thisVertexPath after ",_thisVertexPath);_thisVertexComponent.inputs.path=[..._thisVertexPath];createVerticeControls(_thisVertexComponent,true)}}function enableVerticeControls(component){log.info("enableVerticeControls()");if(!component){log.error("Component is undefined");return}if(_thisVertexComponent==component){log.info("This partition is already in edit mode.");return}if(!component.inputs.path||component.inputs.path.length<=0){log.error("Path of component is empty or undefined");return}const currenPath=[...component.inputs.path];const last=currenPath.pop();log.info("currenPath ",currenPath);_thisVertexPath=[...currenPath];const first=_thisVertexPath[0];const r=x=>Math.round(x*100)/100;let name="x"+r(first.x)+"y"+r(first.y)+"z"+r(first.z);name=`${name}-${uid.rnd()}`;[_thisVertexNode,_thisVertexComponent]=addVertex(name,_thisVertexPath);log.info("_thisVertexPath ",_thisVertexPath);if(visualize){_activeVertex.inputs.collider=false}_thisVertexPath.push(Object.assign({},last));_thisVertexComponent.inputs.path=[..._thisVertexPath];createVerticeControls(_thisVertexComponent);if(isToolbarFeatureEnabled("pipe")){pathHistory.setCurrent(_thisVertexPath)}if(isToolbarFeatureEnabled("roomCreation")){partitionHistory.setCurrent(_thisVertexPath)}}function getVertexPath(){log.info("getVertexPath()");return _thisVertexPath}function deleteEdge(component,endPoint){log.info("deletePolygonLine()");if(!component){log.error("Component is undefined");return}if(!endPoint){log.error("Component is undefined");return}if(!component.inputs.path||component.inputs.path.length<=0){log.error("Path of component is empty or undefined");return}const index=component.inputs.path.findIndex((path=>isEqual(path,endPoint)));if(index!=undefined){const newArr=component.inputs.path.filter(((_,i)=>i!==index));console.log("newArr",newArr);component.inputs.path=[...newArr];return}log.error("No matching coordinates in the path");return}function setDrawingConfig(config){log.info("setDrawingConfig() ",config);if(!config){log.error("config parameter is undefined");return}if(config.lineType)_pathConfig.lineType=config.lineType;if(config.verticeType)_pathConfig.verticeType=config.verticeType;if(config.lineTypeComponentConfig)_pathConfig.lineTypeComponentConfig=config.lineTypeComponentConfig;if(config.verticeTypeComponentConfig)_pathConfig.verticeTypeComponentConfig=config.verticeTypeComponentConfig}function getDrawingConfig(){log.info("getDrawingConfig() ",_pathConfig);return _pathConfig}function resetDrawingConfig(){log.info("resetDrawingConfig() ",_pathConfig);_pathConfig={lineType:tubeLineType,verticeType:verticeType,lineTypeComponentConfig:{renderPolygonOnAdd:true}}}function startDraw(config){if(config){if(config.lineType)_pathConfig.lineType=config.lineType;if(config.verticeType)_pathConfig.verticeType=config.verticeType;if(config.lineTypeComponentConfig)_pathConfig.lineTypeComponentConfig=config.lineTypeComponentConfig;if(config.verticeTypeComponentConfig)_pathConfig.verticeTypeComponentConfig=config.verticeTypeComponentConfig}_atwin.Measurements.toggleMode(false);_atwin.Settings.update("space_search",false);editMode=true;_atwin.Settings.update("features/mattertags",false);if(_thisVertexNode!==undefined){_thisVertexComponent.inputs.active=false}_drawPolygonMode=true;_atwin.Pointer.editTexture("targetPointer");_thisVertexNode=undefined;_thisVertexComponent=undefined;_thisVertexPath=new Array}function exitDraw(){_atwin.Settings.update("space_search",true);editMode=false;_atwin.Settings.update("features/mattertags",true);if(_thisVerticesNode!==undefined){_thisVerticesNode.stop()}if(visualize&&_thisVertexNode){_thisVertexComponent.inputs.collider=true}toggleSpaceNavigation(true);_drawPolygonMode=false;_currentPolygon=undefined;_polygonShapePath=undefined;_polygonWallDataPath=undefined;_polygonDataPath=undefined;_polygonWallHeightPath=undefined;_pathLineOptions=undefined;_tubeLinePath=undefined;_verticeComponentsCollection=[];_atwin.Pointer.resetTexture()}function cancelDraw(){exitDraw();if(_thisVertexNode!==undefined){_thisVertexNode.stop()}if(_thisVerticesNode!==undefined){_thisVerticesNode.stop()}if(isToolbarFeatureEnabled("pipe")){pathHistory.clearHistory()}if(isToolbarFeatureEnabled("roomCreation")){partitionHistory.clearHistory()}}function setCurrentPolygon(polygonData){_currentPolygon=polygonData}function getCurrentPolygon(){return _currentPolygon}function addVertex(name,path){console.log("addVertex()");let drawNode=_tubes.addNode(name);const options=Object.assign({name:name,label:"Connecting tube"+_tubeCounter++,node:drawNode,tubes:_tubes,path:path,active:true},_pathConfig.lineTypeComponentConfig);log.info("addVertex options",options);let drawComponent=drawNode.addComponent(_pathConfig.lineType,options);drawNode.start();console.log("drawComponent ",drawComponent);const _activeVertexPath=_tubes.addEmitPath(drawComponent,"active");_tubes.spyOnEvent({path:_activeVertexPath,onEvent(eventData){if(editMode){log.info("_activeVertexPath event triggered");if(_activeVertex!=eventData.component){_activeVertex.inputs.active=false;_activeVertex=eventData.component;_activeVertex.inputs.active=true}createVerticeControls(eventData.component)}}});const tubeDestroyed=_tubes.addEmitPath(drawComponent,"destroyed");_tubes.spyOnEvent({path:tubeDestroyed,onEvent(eventData){if(_thisVerticesNode!==undefined){_thisVerticesNode.stop()}if(drawMode){exitDraw()}}});if(_activeVertex){_activeVertex.inputs.active=false;if(_thisVerticesNode!==undefined){_thisVerticesNode.stop();_thisVerticesNode=undefined}}_activeVertex=drawComponent;return[drawNode,drawComponent]}function toggleMeshChildrenVisibility(component,name,visible){if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}component.mesh.children.forEach((child=>{if(child.name==name){child.visible=visible!==undefined?visible:!child.visible;return child.visible}}))}function setMeshChildrenProperty(component,name,key,value){if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}if(!key){log.error("key is undefined");return}component.mesh.children.forEach((child=>{if(child.name==name){if(child[key]!==undefined){child[key]=value}}}))}function setMeshChildrenMaterialProperty(component,name,key,value){if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}if(!key){log.error("key is undefined");return}component.mesh.children.forEach((child=>{if(child.name==name){if(child.material[key]!==undefined){const{r:r,g:g,b:b}=useHexToRgb(value);child.material[key].r=r;child.material[key].g=g;child.material[key].b=b}}}))}function toggleWallVisibility(component,name,visible){if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}const state=toggleMeshChildrenVisibility(component,name,visible);const wallLabelName=name.replace("wall","wallLabel");toggleMeshChildrenVisibility(component,wallLabelName,visible);return state}function toggleFloorVisibility(component,name,visible){log.info("TEST toggleFloorVisibility: ",component,name);if(!component){log.error("Component is undefined");return}if(!name){log.error("name is undefined");return}const state=toggleMeshChildrenVisibility(component,name,visible);const edgeCount=component.inputs.path.length;if(edgeCount!==undefined){let edgeLabelNames=[];const parts=name.split("_");if(parts.length>1){const uuid=parts[0];for(let index=0;index<edgeCount;index++){toggleMeshChildrenVisibility(component,`${uuid}_edgeLabel-${index}`,visible)}}else{for(let index=0;index<edgeCount;index++){edgeLabelNames.push(`edgeLabel-${index}`);toggleMeshChildrenVisibility(component,`edgeLabel-${index}`,visible)}}}return state}function getChildrenOfModel(component){if(!component){log.error("Component is undefined");return}const children=component.mesh.children;return children}function toggleVerticeRingVisibility(visibility=false){if(!_verticeComponentsCollection||_verticeComponentsCollection.length<=0){log.error("No actively visible vertices to invoke this function");return}try{_verticeComponentsCollection.forEach((component=>{if(component.mesh.children){component.mesh.children.forEach((comp=>{if(comp.name=="ring"){comp.visible=visibility}}))}}))}catch(error){log.error("Error toggling ring visibility ",error)}}function setPolygonFloorOffset(offset){log.info("setPolygonFloorOffset()");if(offset==undefined){log.error("Parameter offset is undefined");return}if(typeof offset!=="number"){log.error("Parameter offset is not a number");return}_polygonFloorOffset=offset}function getPolygonFloorOffset(){log.info("getPolygonFloorOffset()");return _polygonFloorOffset}function setFloorBaseHeight(baseHeight){log.info("setFloorBaseHeight()");if(!baseHeight||isNaN(baseHeight)){log.error("baseHeight is undefined or NaN");return}_floorBaseHeight=baseHeight;_offsetedBaseHeight=_floorBaseHeight+_polygonFloorOffset}function getFloorBaseHeight(){return _floorBaseHeight}function clearFloorBaseHeight(){_floorBaseHeight=undefined;_offsetedBaseHeight=undefined}function setWallBaseHeight(baseHeight){log.info("setWallBaseHeight()");if(!baseHeight||isNaN(baseHeight)){log.error("baseHeight is undefined or NaN");return}_wallBaseHeight=baseHeight}function getWallBaseHeight(){return _wallBaseHeight}function clearWallBaseHeight(){_wallBaseHeight=undefined}function undoDrawAction(){const path=partitionHistory.undo();console.log("undoDrawAction",path,partitionHistory.getAllHistory(),partitionHistory.canUndo(),partitionHistory.canRedo());handleHistoryUndoRedoAction(path)}function redoDrawAction(){const path=partitionHistory.redo();handleHistoryUndoRedoAction(path)}function handleHistoryUndoRedoAction(path){if(_currentPolygon&&_pathConfig.lineTypeComponentConfig.drawingMode=="window"&&getIsEditWindow()){const polyData=_pathConfig.lineTypeComponentConfig.polygonData;const parentIndex=_pathConfig.lineTypeComponentConfig.objectIndex;const wallIndex=polyData.walls.findIndex((wall=>wall.uuid==_pathConfig.lineTypeComponentConfig.targetUUID));if(wallIndex!=undefined){polyData.walls[wallIndex].windows[_pathConfig.lineTypeComponentConfig.targetIndex].path=path;setPolygonDataPath(_currentPolygon.object.id,polyData);if(parentIndex!==undefined&&_3DXObjects[parentIndex]){_3DXObjects[parentIndex].object.object_data.json_data=polyData;const partitionPayload={uuid:_3DXObjects[parentIndex].object.object_data.uuid,name:_3DXObjects[parentIndex].object.object_data.name,polygon_json:polyData};renderPolygon(partitionPayload)}}}_thisVertexComponent.inputs.path=path;createVerticeControls(_thisVertexComponent,true);toggleUndoRedoButtons(partitionHistory.canUndo(),partitionHistory.canRedo())}function handleKeyDown(event){if(event.ctrlKey){log.info("Ctrl key down");isCtrlPressed=true;toggleSpaceNavigation(false)}if(event.key=="Alt"){log.info("Alt key down");isAltPressed=true;toggleSpaceNavigation(false)}if(event.key=="F8"){log.info("F8 key down");const polygons=_3DXObjects.filter((obj=>obj.type=="POLYGON"||obj.type=="PATH"));if(polygons&&polygons.length>0){for(let i=0;i<polygons.length;i++){setModelVisibility(polygons[i].object.id)}}}if(event.shiftKey){log.info("Shift key down");isShiftPressed=true}if(isToolbarFeatureEnabled("pipe")){if(_isDrawPipe){if(event.ctrlKey&&event.key==="z"&&event.type==="keydown"){if(!pathHistory.canUndo())return;pipeForm.undoEventHandler()}if(event.ctrlKey&&event.key==="y"&&event.type==="keydown"){if(!pathHistory.canRedo())return;pipeForm.redoEventHandler()}}}if(isToolbarFeatureEnabled("roomCreation")){const isDrawing=getIsDrawing();if(isDrawing){if(event.ctrlKey&&event.key==="z"&&event.type==="keydown"){if(!partitionHistory.canUndo())return;undoDrawAction()}if(event.ctrlKey&&event.key==="y"&&event.type==="keydown"){if(!partitionHistory.canRedo())return;redoDrawAction()}}}if(isCtrlPressed)lastKeyPressed=event.key}function handleKeyUp(event){log.info("handleKeyUp() ",event);if(event.key==="Control"){log.info("Ctrl key up");isCtrlPressed=false;toggleSpaceNavigation(true)}if(event.key=="Alt"){log.info("Alt key up");isAltPressed=false;toggleSpaceNavigation(true)}if(event.key==="Shift"){log.info("Ctrl key up");isShiftPressed=false}}function setupKeybindingEventListeners(iframe){log.info("setupKeybindingEventListeners()");if(!_navigationInputNode||!_navigationComponent){log.info("Navigation node and component is undefined. Skipping key binding creation");return}iframe.contentDocument.body.addEventListener("keydown",handleKeyDown);iframe.contentDocument.body.addEventListener("keyup",handleKeyUp);window.addEventListener("keydown",handleKeyDown);window.addEventListener("keyup",handleKeyUp)}function initBimSettings(){var _a,_b,_c,_d,_e,_f,_g,_h,_j,_k,_l,_m,_o,_p;try{if(_currentSpace&&_currentSpace.json_data){const spaceJsonData=JSON.parse(_currentSpace.json_data);if((_a=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_a===void 0?void 0:_a.bim){log.info("spaceJsonData?.coordSystemCalibration?.bim",(_b=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_b===void 0?void 0:_b.bim);setCoordinateSystem((_c=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_c===void 0?void 0:_c.bim.coord_system);setScaleFactor((_d=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_d===void 0?void 0:_d.bim.scale_factor);setRotationUnit((_e=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_e===void 0?void 0:_e.bim.rotation_unit);setMeasurementUnit((_f=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_f===void 0?void 0:_f.bim.measurement_unit);setTempCoordinateSystem((_g=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_g===void 0?void 0:_g.bim.coord_system);setTempScaleFactor((_h=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_h===void 0?void 0:_h.bim.scale_factor);setTempRotationUnit((_j=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_j===void 0?void 0:_j.bim.rotation_unit);setTempMeasurementUnit((_k=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_k===void 0?void 0:_k.bim.measurement_unit);if((_l=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_l===void 0?void 0:_l.bim.project_base){setBasepoint((_m=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_m===void 0?void 0:_m.bim.project_base)}}if((_o=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_o===void 0?void 0:_o.bim.mp_project_base){console.log("THERE IS A BASEPOINT");const index=_3DXObjects.findIndex((obj=>obj.object.object_data.amazon_uri.includes("static/images/basepointmarker.png")));log.info("_3DXObjects",_3DXObjects[index],index);if(index!=-1){_3DXObjects[index].type="BASEPOINT"}setBasepointObjectPayload((_p=spaceJsonData===null||spaceJsonData===void 0?void 0:spaceJsonData.coordSystemCalibration)===null||_p===void 0?void 0:_p.bim.mp_project_base)}}}catch(error){log.error("initBimSettings error ",error)}}function initCustomMinimapSettings(){log.info("initCustomMinimapSettings()");if(_currentSpace&&_currentSpace.json_data){let data=_currentSpace.json_data;let json_data=typeof data==="string"?JSON.parse(data):data;if(!json_data.general_settings){setSelectedMap(MAP_OPTIONS.DEFAULT_MAP)}else{if(json_data.general_settings.minimap.type==MAP_OPTIONS.DEFAULT_MAP){setSelectedMap(MAP_OPTIONS.DEFAULT_MAP)}else if(json_data.general_settings.minimap.type==MAP_OPTIONS.CUSTOM_MAP){setSelectedMap(MAP_OPTIONS.CUSTOM_MAP)}}}}function setTagIcon(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== setTagIcon $",payload);const sdk=payload.iframeId?_atwinConnections[payload.iframeId]:_atwin;if(payload.iconName&&payload.iconName.trim()!==""){yield _tag.setTagIcon({sdk:sdk,tag:payload.tag,iconName:payload.iconName,iconUrl:payload.iconUrl,color:payload.color})}}))}function renderTag(payload,addTo_tags=true,iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("=== renderTag $",payload);const sdk=iframeId?_atwinConnections[iframeId]:_atwin;const mpData=JSON.parse(JSON.stringify(payload.tag));const isTagSharing=_mpConfig.restrictionConfig?_mpConfig.restrictionConfig.isTagToggleSharing:true;const tagData=yield _tag.renderTag({tag:mpData,sdk:sdk,isTagSharing:isTagSharing});if(addTo_tags){const tag=addTag(tagData);log.info("tag added to _tags array",tag)}return tagData}))}function _renderTagPaneContent(){renderTagPaneContent()}function addTag(tagData){log.info("addTag",tagData);if(_isBasicDevApi){const labels=getLabels();if(!labels||labels.length===0){log.error("No labels")}const thisTag={};thisTag.id=Number.parseInt(uid.rnd());thisTag.tag_name=tagData.label;thisTag.showcase_id=_space.id;thisTag.floor_id=_currentFloor.sequence;thisTag.color_id=getTagColorCodeID(tagColors[0]);thisTag.json_data=tagData;thisTag.sid=tagData.id;thisTag.label=labels[0].id;thisTag.created_on=new Date(Date.now()+60*60*1e3).toLocaleString("sv-SE");_tags.push(thisTag);return thisTag}const thisTag={};thisTag.id=Number.parseInt(uid.rnd());thisTag.json_data=tagData;thisTag.created_on=new Date(Date.now()+60*60*1e3).toLocaleString("sv-SE");_tags.push(thisTag);return thisTag}function getMpTags(){log.info("=== getMpTags()",_tags);return _tags.map((i=>{if(typeof i.json_data==="string"){i.json_data=JSON.parse(i.json_data)}return i}))}function getTagDataCollection(){log.info("getTagDataCollection() ",_tagDataCollection);return _tagDataCollection}function disposeTag(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== disposeTag",payload);yield _tag.disposeTag({tagId:payload.tagId,sdk:_atwin,tags:_tags});const indx=_tags.findIndex((i=>i.json_data.id===payload.tagId));if(indx===-1){log.error("Tag not found");return null}const tag=_tags[indx];log.info("__@ tag found to be remove",tag);_tags.splice(indx,1)}))}function toggleVisibilityTag(payload){return __awaiter(this,void 0,void 0,(function*(){yield _tag.toggleTagVisibility({tagId:payload.tagId,sdk:_atwin,visibility:payload.visibility})}))}function getMpTag(tagId){log.info("=== getTag()",tagId);const tag=_tags.find((i=>i.json_data.id===tagId));if(!tag){log.error("Tag not found");log.info("=== _tags",_tags);return}return tag}function getTags(space){return __awaiter(this,void 0,void 0,(function*(){log.info("getTags()");try{const response=yield _api.get(`/v1/tags/showcase-id/${space.id}`);log.info("response",response);if(response.status===200){const tags=response.data.data;if(!tags){log.error("tags is undefined")}return tags}else{log.error("Custom Error: Unable to fetch tags")}}catch(error){log.error(error)}return null}))}function setTags(tags){return __awaiter(this,void 0,void 0,(function*(){log.info("setTags()",tags);_tags=tags.map((tag=>{if(typeof tag.json_data==="string"){tag.json_data=JSON.parse(tag.json_data)}tag.json_data.id=tag.json_data["sid"]?tag.json_data["sid"]:tag.json_data.id;return tag}));setPublicTags(_tags)}))}function gotoTag(tagId){return __awaiter(this,void 0,void 0,(function*(){log.info("gotoTag(tag: tag_id)",tagId);if(!tagId){log.error("tag is undefined");return}const tags=getMpTags();log.info("__tags",tags);try{yield _atwin.Mattertag.navigateToTag(tagId,_atwin.Mattertag.Transition.FLY)}catch(error){log.error(error)}}))}function tagStateSubscriber(){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ tagStateSubscriber()");try{_atwin.Tag.openTags.subscribe({prevState:{hovered:null,docked:null,selected:null},onChanged(newState){log.info("__@ tag subscriber");const[selected=null]=newState.selected;if(selected!==this.prevState.selected){if(selected){log.info(selected,"was selected");dispatchSpaceEvent(SPACE_EVENTS.SELECTED_TAG,{tagId:selected,isSelected:true})}else{log.info(this.prevState.selected,"was deselected");dispatchSpaceEvent(SPACE_EVENTS.SELECTED_TAG,{tagId:selected,isSelected:false})}}this.prevState=Object.assign(Object.assign({},newState),{selected:selected})}})}catch(error){log.error(error)}}))}function showTags(tags,_withIcon=false,iframeId=undefined){return __awaiter(this,void 0,void 0,(function*(){log.info("showTags",tags);if(!_isBasicDevApi){log.info("!_isBasicDevApi");setTags(tags)}let renderedTagIds=[];const sdk=iframeId?_atwinConnections[iframeId]:_atwin;for(let tag of tags){log.info("tag",tag);const isDuplicate=renderedTagIds.includes(tag.json_data.id);if(isDuplicate){tag.json_data.id=rsid.rnd()}renderedTagIds.push(tag.json_data.id);const renderedTag=yield renderTag({tag:tag.json_data},false,iframeId);if(_withIcon&&tag.tag_icon_base64!==""){log.info("__@ showTags: ",tags);yield setTagIcon({tag:tag.json_data,iconName:tag.tag_icon_name,iconUrl:tag.tag_icon_base64,color:tag.json_data.color,iframeId:iframeId})}log.info("renderedTag",renderedTag);if(tag.media_url&&tag.media_url!==""){try{const attachments=[tag.media_url];yield _tag.attachTagMedia({sdk:sdk,tag:tag.json_data,attachments:attachments})}catch(error){log.warn(error)}}if(tag.sandboxId){try{yield attachSandbox({sandboxId:tag.sandboxId,tagIds:[tag.json_data.id]})}catch(error){log.error("Attach sandbox error ",error)}}}}))}function disposeTags(iframeId){return __awaiter(this,void 0,void 0,(function*(){log.info("hideTags()");const sdk=iframeId?_atwinConnections[iframeId]:_atwin;const tags=yield sdk.Mattertag.getData();if(tags){const tagIds=tags.map((i=>i.sid));yield sdk.Mattertag.remove(tagIds);log.info("Tags removed in space: ",tagIds)}}))}function attachTagMedia(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== attachTagMedia()",payload);const tag=getMpTag(payload.tagId);tag.media_url=payload.attachments[0];log.info("=== tag ===",tag);const attachments=yield _tag.attachTagMedia({sdk:_atwin,tag:tag.json_data,attachments:payload.attachments});return attachments}))}function detachTagMedia(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== detachTagMedia()",payload);const tag=getMpTag(payload.tagId);tag.media_url="";yield _tag.detachTagMedia({sdk:_atwin,tag:tag,attachmentIds:payload.attachmentIds});log.info("tag data after detach",tag)}))}function moveTag(tagId,callback){return __awaiter(this,void 0,void 0,(function*(){log.info("=== moveTag()",tagId);const tag=getMpTag(tagId);yield _tag.moveTag({sdk:_atwin,tag:tag},callback)}))}function registerSandbox(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== registerSandbox()",payload);if(!payload.content){log.error("Payload content is undefined");return}let sdk=_atwin;sdk=payload.iframeId?_atwinConnections[payload.iframeId]:_atwin;const[sandboxId,messenger]=yield _tag.registerSandbox({sdk:sdk,content:payload.content,options:payload.options});return[sandboxId,messenger]}))}function attachSandbox(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== attachSandbox()",payload);if(!payload.sandboxId||!payload.tagIds){log.error("One or more parameter value of payload is undefined");return}let sdk=_atwin;sdk=payload.iframeId?_atwinConnections[payload.iframeId]:_atwin;yield _tag.attachSandbox({sdk:sdk,sandboxId:payload.sandboxId,tagIds:payload.tagIds})}))}function editTagLabel(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagLabel()",payload);const tag=getMpTag(payload.tagId);yield _tag.editBillboard({sdk:_atwin,tag:tag,label:payload.label})}))}function editTagDescription(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagDescription()",payload);const tag=getMpTag(payload.tagId);yield _tag.editBillboard({sdk:_atwin,tag:tag,description:payload.description})}))}function editTagStem(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagStem()",payload);const tag=getMpTag(payload.tagId);yield _tag.editStem({sdk:_atwin,tag:tag,stemVisible:payload.stemVisible})}))}function editTagIcon(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagIcon()",payload);const tag=getMpTag(payload.tagId);yield _tag.setTagIcon({sdk:_atwin,tag:tag.json_data,iconName:payload.iconName,iconUrl:payload.icon,color:payload.color})}))}function editTagColor(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== editTagColor()",payload);const tag=getMpTag(payload.tagId);yield _tag.editColor({sdk:_atwin,tag:tag,color:payload.color})}))}function saveTag(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("=== saveTag",payload);const tag=getMpTag(payload.tagId);log.info("=== tag",tag);const res=yield _tag.saveTagDb({tag:tag,api:_api,showcase_id:_space.id,floor:payload.floor,label:payload.label,colorHex:payload.colorHex});log.info("=== res",res);if(res&&res["data"]&&res["data"]["id"]){return res["data"]["id"]}if(res&&res["data"]&&res["data"]["updated"]){return tag.id}log.error("No tag ID returned from api or tag not updated");return null}))}function setPublicTags($tags){log.info("setPublicTags()",$tags);const thisTags=JSON.parse(JSON.stringify($tags));tags=thisTags.map((i=>{const x={};x.id=i.json_data.id;x.name=i.json_data.label;return x}));log.info("tags",tags)}function setTagCategories(tagCategories){log.info("setTagCategories",tagCategories);_tagCategories=tagCategories;return _tagCategories}function setUserAssignedCategories(tagCategories){log.info("setUserAssignedCategories ",tagCategories);_userAssignedTagCategories=tagCategories}function getUserAssignedCategories(){return _userAssignedTagCategories}function setTagMessageRecepients(recepients){log.info("setTagMessageRecepients()",recepients);if(recepients){_tagMessageRecepients=recepients;return}log.error("Parameter recepients is undefined");return}function getTagMessageRecepients(){return _tagMessageRecepients}function setTagMessages(messages){log.info("setTagMessages()",messages);if(messages){_tagMessages=messages;return}}function getTagMessages(){log.info("getTagMessages()");if(_tagMessages){return _tagMessages}log.error("_tagMessages is undefined");return}function setSelectedTagUuid(uuid){log.info("setSelectedTag()");if(uuid&&uuid!==""){_selectedTagUuid=uuid;return}log.error("uuid is undefined");return}function getSelectedTagUuid(){if(_selectedTagUuid&&_selectedTagUuid!==""){return _selectedTagUuid}}function setCurrentSpace(space){_currentSpace=space;console.log("_currentSpace",_currentSpace);return _currentSpace}function getCurrentSpace(){return _currentSpace}function setIotCategoryTypes(payload){console.log("setIotCategoryTypes()",payload);_tagIotCategoryTypes=payload;return _tagIotCategoryTypes}function setIotDeviceTypes(payload){console.log("setIotDeviceTypes()");_tagIotDevices=payload;return _tagIotDevices}function setIoTDeviceTagIcons(payload){log.info("setIoTDeviceTagIcons",payload);_iotTagIcons=payload}function getIoTDeviceTagIcons(){return _iotTagIcons}function renderMeetingSidebar(template,templateName){log.info("renderMeetingSidebar");_zoomMeeting.showMeetingSidebar(template,templateName)}function subscribeSpaceEvent(eventType,callback,iframeId){log.info("subscribeSpaceEvent()");log.info("Custom space evevnts",_customEventTypes);if(Object.values(SPACE_EVENTS).includes(eventType)||_customEventTypes.includes(eventType)){if(Array.isArray(callback)){log.info(`Event type is valid. Inserting ${callback.length} callbacks to queue...`);const spaceEvents=callback.map((fn=>{const spaceEvent={};spaceEvent.eventType=eventType;spaceEvent.callback=fn;if(iframeId)spaceEvent.iframeId=iframeId;return spaceEvent}));spaceEventQueue.events=[...spaceEventQueue.events,...spaceEvents];return}else{log.info(`Event type is valid. Inserting callback to queue...`);const spaceEvent={eventType:eventType,callback:callback};if(iframeId)spaceEvent.iframeId=iframeId;spaceEventQueue.events.push(spaceEvent);return}}log.error(`Parameter ${eventType} does not match any valid SPACE_EVENTS.`);return}function unsubscribeSpaceEvent(eventType,callback){log.info("unsubscribeSpaceEvent()");if(Object.values(SPACE_EVENTS).includes(eventType)||_customEventTypes.includes(eventType)){if(Array.isArray(callback)){callback.forEach(((fn,index)=>{spaceEventQueue.events.forEach((event=>{if(event.eventType===eventType&&event.callback==fn){spaceEventQueue.events.splice(index,1);return}}))}));log.info(`Unsubscribed ${callback.length} callback from ${eventType} event`);return}else{spaceEventQueue.events.forEach(((event,index)=>{if(event.eventType===eventType&&event.callback==callback){spaceEventQueue.events.splice(index,1);log.info(`Unsubscribed callback from ${eventType} event`);return}}));return}}}function dispatchSpaceEvent(eventType,payload){return __awaiter(this,void 0,void 0,(function*(){log.info("dispatchSpaceEvent()",eventType);if(Object.values(SPACE_EVENTS).includes(eventType)||_customEventTypes.includes(eventType)){if(spaceEventQueue.events.length!==0){try{spaceEventQueue.events.forEach((event=>__awaiter(this,void 0,void 0,(function*(){if(event.eventType===eventType){if(event.iframeId){if(payload){payload.iframeId=event.iframeId}else{payload={iframeId:event.iframeId}}}log.info(`dispatchSpaceEvent() iframe ${event.iframeId} `,eventType);yield event.callback(payload)}}))));return}catch(error){log.error(`SNAP! One of your methods subscribed to ${eventType} event has an error`,error);return}}log.info(`No methods subscribed to ${eventType} event`);return}log.error(`Parameter ${eventType} does not match any valid SPACE_EVENTS.`);return}))}function registerCustomSpaceEvent(eventType){log.info("registerCustomSpaceEvent()");if(eventType){if(Array.isArray(eventType)){const filteredCustomEvents=eventType.filter((item=>_customEventTypes.indexOf(item)<0));const defaultEvents=Object.values(SPACE_EVENTS);const filteredDefaultEvents=eventType.filter((item=>defaultEvents.indexOf(item)<0));if(filteredCustomEvents.length!==eventType.length){log.error("Duplicate custom events detected. Operation canceled.");return}if(filteredDefaultEvents.length!==eventType.length){log.error("One of your event name is a reserved event name. Please refer to documentation for info. Operation canceled.");return}_customEventTypes=[..._customEventTypes,...eventType];log.info(`Registered ${eventType.length} new custom event types`);return}else{if(!_customEventTypes.includes(eventType)&&!Object.values(SPACE_EVENTS).includes(eventType)){_customEventTypes.push(eventType.toUpperCase());return}log.warn(`Duplicate event type detected. ${eventType} is already a registered event. Operation cancelled`);return}}log.error("Parameter is undefined");return}function clearSpaceEventQueue(iframeId){if(iframeId){const filteredEvents=spaceEventQueue.events.filter((ev=>ev.iframeId!=iframeId));spaceEventQueue.events=filteredEvents;return}spaceEventQueue={events:[]};return}function initSocketIo(meetingId="1",role="guest"){socketIo.initSocketIo(meetingId,role)}function socketEmit(payload){socketIo.socketEmit(payload)}function getSelectedObject(){return selectedObject}function renderInSpaceMediaScreen(){return __awaiter(this,void 0,void 0,(function*(){log.info("renderInSpaceMediaScreen()");const cameraPose=getCurrentCameraPose();const position={x:Math.abs(cameraPose.position.x+3),y:cameraPose.position.y,z:cameraPose.position.z};const transform={position:position,rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}};const faceCameraRotation=rotateObjectToFaceCamera(position,cameraPose.position);transform.rotation.x=faceCameraRotation.x;transform.rotation.y=-1.55;transform.rotation.z=faceCameraRotation.x;log.info("Final rotation",transform.rotation);_inSpaceMediaScreenId=Number.parseInt(uid.rnd());const payload=yield addMediaScreen("",transform,_inSpaceMediaScreenId);return payload}))}function enableHUD(objectId,screenPosition="topRight"){log.info("enableHUD()",objectId,screenPosition);const object=_3DXObjects.find((x=>x.object.id===objectId));if(!object){log.error("object not found in _3DXObjects ",_3DXObjects);return}log.info("__ object",object);if(canSetHud({screenPos:screenPosition,meshUuid:object.component["mesh"]["parent"]["uuid"]})){setHudState({outputs:object.component.outputs,mesh:object.component["mesh"],context:object.component.context,screenPos:screenPosition,screenPositions:this.screenPositions});saveMediaScreenHud({meshUuid:object.component["mesh"]["uuid"],screenPos:screenPosition})}else{log.warn("Cannot set hud state. Position is occupied")}}function canSetHud(p){log.info("canSetHud()",p);const isPositionOccupied=_mediaScreenHUDs.find((i=>i.screenPosition===p.screenPos));if(isPositionOccupied)return false;return true}function saveMediaScreenHud(p){log.info("addMediaScreenHud()",p);const mediaScreenHud=_mediaScreenHUDs.find((i=>i.meshUuid===p.meshUuid));log.info("_mediaScreenHUDs",_mediaScreenHUDs);log.info("mediaScreenHud",mediaScreenHud);if(!mediaScreenHud){_mediaScreenHUDs.push({meshUuid:p.meshUuid,screenPosition:p.screenPos});log.info("mediaScreenHud Added to _mediaScreenHUDs");return}mediaScreenHud.screenPosition=p.screenPos}function removeMediaScreenHud(p){log.info("removeMediaScreenHud()",p);const indx=_mediaScreenHUDs.findIndex((i=>i.meshUuid===p.meshUuid));if(indx===-1){log.error("mediaScreenHud not found in _mediaScreenHUDs");return}_mediaScreenHUDs.splice(indx,1)}function enableFitScreen(){isFitScreenOccupied=true}function disableFitScreen(){isFitScreenOccupied=false}function disableHUD(objectId){log.info("disableHUD()",objectId)}function getMediaScreenHUDs(){return _mediaScreenHUDs}function rotateObjectToFaceCamera(objPosition,camera){const direction={x:camera.x-objPosition.x,y:camera.y-objPosition.y,z:camera.z-objPosition.z};const yaw=Math.atan2(direction.y,direction.x);const distanceXY=Math.sqrt(direction.x*direction.x+direction.y*direction.y);const pitch=Math.atan2(-direction.y,distanceXY);const rotation={x:yaw,y:pitch};return rotation}function getParticipants(){log.info("getParticipants()");log.info("socketIo.getParticipants()",_participant.getParticipants());return _participant.getParticipants()}function followParticipant(followParticipant){log.info("followParticipant()",followParticipant);const localParticipant=_participant.getParticipant();const data={event:"PARTICIPANT_FOLLOW",participant:localParticipant,followParticipant:followParticipant};if(followParticipant.sweepId!=localParticipant.sweepId){moveToSweep(followParticipant.sweepId,followParticipant.rotation)}socketIo.socketEmit({socketEvent:"SPACE:SWEEP",data:data})}function unFollowParticipant(unFollowParticipant){log.info("unFollowParticipant()");const localParticipant=_participant.getParticipant();const data={event:"PARTICIPANT_UNFOLLOW",participant:localParticipant,unFollowParticipant:unFollowParticipant};socketIo.socketEmit({socketEvent:"SPACE:SWEEP",data:data})}function setSpacePartitionNodes(partitionNodes){return __awaiter(this,void 0,void 0,(function*(){log.info("__@ setSpacePartitionNodes");_partitionNodes=partitionNodes;log.info("__@ _partitionNodes: ",_partitionNodes)}))}function getPathBetweenSweeps(startSweepId,endSweepId,iframeId){return __awaiter(this,void 0,void 0,(function*(){try{const sdk=iframeId?_atwinConnections[iframeId]:undefined;if(!sdk)throw new Error("SDK instance not found.");console.log("Initializing pathfinding with SDK:",sdk,"iframeId:",iframeId);const sweepGraph=yield sdk.Sweep.createGraph();const startVertex=sweepGraph.vertex(startSweepId);const endVertex=sweepGraph.vertex(endSweepId);if(!startVertex||!endVertex)throw new Error("Invalid start or end sweep ID.");for(const{src:src,dst:dst,weight:weight}of sweepGraph.edges){sweepGraph.setEdge({src:src,dst:dst,weight:Math.pow(weight,2)})}const aStarRunner=sdk.Graph.createAStarRunner(sweepGraph,startVertex,endVertex);const result=aStarRunner.exec();if(result.status!==sdk.Graph.AStarStatus.SUCCESS)throw new Error(`Pathfinding failed between ${startVertex.id} and ${endVertex.id}.`);const position=result.path.map((position=>{const vertex=sweepGraph.vertex(position.id);return{x:vertex.data.position.x,y:vertex.data.position.y-.6,z:vertex.data.position.z}}));sweepGraph.dispose();return{path:result.path,position:position}}catch(error){console.error("Error in Path finding:",error)}}))}function moveAlongPath(path,iframeId,transitionTime=500){return __awaiter(this,void 0,void 0,(function*(){try{const sdk=iframeId?_atwinConnections[iframeId]:undefined;if(!sdk)throw new Error("SDK instance not found.");const transition=sdk.Sweep.Transition.FLY;let prevVertex=null;for(const vertex of path){if(vertex.id===_currentSweep.id){prevVertex=vertex;continue}const rotation=rotateCameraAlongPath(prevVertex,vertex);yield sdk.Sweep.moveTo(vertex.id,{rotation:rotation,transition:transition,transitionTime:transitionTime});prevVertex=vertex}console.log("moveAlongPath",path)}catch(error){console.error("Error moving along path:",error)}}))}function rotateCameraAlongPath(from,to){const config={x:0,y:180,z:0};if(!from)return to.data.rotation;const{x:x,y:y,z:z}=config;const dx=to.data.position.x-from.data.position.x;const dz=to.data.position.z-from.data.position.z;const angleY=Math.atan2(dx,dz)*(180/Math.PI)+y;return{x:x,y:angleY,z:z}}function setSpaceMetadata(payload){log.info("setSpaceMetadata() ",payload);_spaceMetaData=payload;if(payload&&payload!=null&&typeof payload==="string"){_spaceMetaData=JSON.parse(payload)}if(_spaceMetaData&&_spaceMetaData!=null){if(_spaceMetaData.general_settings&&_spaceMetaData.general_settings.minimap&&_spaceMetaData.general_settings.minimap.custom_floor_data){const customFloorData=_spaceMetaData.general_settings.minimap.custom_floor_data!=null?_spaceMetaData.general_settings.minimap.custom_floor_data:[];minimap.setCustomMapFloorData(customFloorData)}}}function getSpaceMetadata(){return _spaceMetaData}class ClickSpy{constructor(path,node,component,object_data,callback){this.path=path;this.node=node;this.component=component;this.object_data=object_data;this.callback=callback}onEvent(data){if(data.input.type=="click"){if(tagFormMode=="ADD"||tagFormMode=="EDIT"){log.info("tagFormMode: ",tagFormMode);return}log.info("Clicked on 3D model",data);const selectedObj={object:this.object_data,node:this.node,component:this.component};if(transformHistory.getTransformHistory(selectedObj.object.id)===undefined){transformHistory.addAction(selectedObj.object.id,selectedObj.node.position,selectedObj.node.obj3D.rotation,selectedObj.node.scale)}if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.menuItems&&_mpConfig.toolbarConfig.menuItems.models!==undefined){if(_mpConfig.toolbarConfig.menuItems.models){this.callback("CLICK",this.object_data);setSelectedObject(this.object_data,this.node,this.component,"3DX");setTransformControls(selectedObj);setActiveActionBtn("at-translate-action-btn")}}else{this.callback("CLICK",this.object_data);setSelectedObject(this.object_data,this.node,this.component,"3DX");setTransformControls(selectedObj)}}}}class DragSpy{constructor(path,node,component,data,callback){this.eventType="INTERACTION.DRAG_END";this.path=path;this.object_data=data;this.node=node;this.component=component;this.callback=callback}onEvent(payload){return __awaiter(this,void 0,void 0,(function*(){log.info("INTERACTION.DRAG_END",payload);const selectedObj={object:this.object_data,node:this.node,component:this.component};log.info("New Drag Position"+JSON.stringify(selectedObj.node.position));log.info("New Drag Rotation"+JSON.stringify(selectedObj.node.obj3D.rotation));log.info("New Drag Scale"+JSON.stringify(selectedObj.node.scale));const objectCoords={object_position:selectedObj.node.position,object_rotation:selectedObj.node.obj3D.rotation,object_scale:selectedObj.node.scale};currentObjTransform=objectCoords;const currentTranform=JSON.stringify(currentObjTransform);const{object_position:pos,object_rotation:rot,object_scale:scale}=JSON.parse(transformHistory.getTransformHistory(selectedObj.object.id).at(transformHistory.getCurrentIndex(selectedObj.object.id)));const isPositionEqual=isVec3Equal(selectedObj.node.position,pos);const isRotationEqual=isQuatEqual(selectedObj.node.obj3D.rotation,rot);const isScaleEqual=isVec3Equal(selectedObj.node.scale,scale);if(!isPositionEqual||!isRotationEqual||!isScaleEqual){actionHistory.push(currentTranform);transformHistory.addAction(selectedObj.object.id,selectedObj.node.position,selectedObj.node.obj3D.rotation,selectedObj.node.scale);if(_mpConfig.toolbarConfig){toggleActionBarButtons("at-redo-action-btn",transformHistory.canRedo(selectedObj.object.id));toggleActionBarButtons("at-undo-action-btn",transformHistory.canUndo(selectedObj.object.id))}}const showcaseObjPayload=this.object_data;showcaseObjPayload.object_position=objectCoords.object_position;const obj_rot={x:objectCoords.object_rotation._x,y:objectCoords.object_rotation._y,z:objectCoords.object_rotation._z};showcaseObjPayload.object_rotation=obj_rot;showcaseObjPayload.object_scale=objectCoords.object_scale;this.callback("DRAG_END",showcaseObjPayload);log.info("object type",this.object_data.object_data.object_type);if(this.object_data.object_data.object_type=="TEXT"&&_textDimensions.top!==null){const rotation={x:currentObjTransform.object_rotation._x,y:currentObjTransform.object_rotation._y,z:currentObjTransform.object_rotation._z};setTextDimensionPosition(_textDimensions.top.node,_textDimensions.top.component,"top",currentObjTransform.object_position,rotation);setTextDimensionPosition(_textDimensions.bottom.node,_textDimensions.bottom.component,"bottom",currentObjTransform.object_position,rotation);setTextDimensionPosition(_textDimensions.left.node,_textDimensions.left.component,"left",currentObjTransform.object_position,rotation);setTextDimensionPosition(_textDimensions.right.node,_textDimensions.right.component,"right",currentObjTransform.object_position,rotation)}}))}}class EmitSpy{constructor(path,node,component,object_data,callback){log.info("__$path",path);log.info("__$node",node);log.info("__$component",component);log.info("__$object_data",object_data);log.info("__$callback",callback);this.path=path;this.node=node;this.component=component;this.object_data=object_data;this.callback=callback}onEvent(data){log.info("onEvent()");log.info("__$data",data);const selectedObj={object:this.object_data,node:this.node,component:this.component};const excludedColliders=["expandBtn","playBtn","pauseBtn","muteBtn","unmuteBtn","nextBtn","prevBtn","_dismissBtn"];if(data.input.type=="click"){log.info("INTERACTION.CLICK",data);const selectedObj={object:this.object_data,node:this.node,component:this.component};if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.menuItems&&_mpConfig.toolbarConfig.menuItems.models!==undefined){if(_mpConfig.toolbarConfig.menuItems.models){setSelectedObject(this.object_data,this.node,this.component,"3DX");if(_viewMode==="interactive"&&!excludedColliders.includes(data.collider.name)){setTransformControls(selectedObj)}else{removeTransformControls()}this.callback("CLICK",{objectData:this.object_data,component:this.component})}}else{setSelectedObject(this.object_data,this.node,this.component,"3DX");if(_viewMode==="interactive"&&!excludedColliders.includes(data.collider.name)){setTransformControls(selectedObj)}else{removeTransformControls()}this.callback("CLICK",{objectData:this.object_data,component:this.component})}}else if(data.input.type==="drag_end"){if(_mpConfig.toolbarConfig&&_mpConfig.toolbarConfig.menuItems&&_mpConfig.toolbarConfig.menuItems.models!==undefined){if(_mpConfig.toolbarConfig.menuItems.models){this.callback("DRAG_END",this.object_data)}}else{this.callback("DRAG_END",this.object_data)}transformHistory.addAction(selectedObj.object.id,selectedObj.node.position,selectedObj.node.obj3D.rotation,selectedObj.node.scale)}}}class PolygonClickSpy{constructor(path,object_data,node,component,callback){this.path=path;this.object_data=object_data,this.node=node;this.component=component;this.callback=callback}onEvent(data){if(data.input.type=="click"){if(_drawPolygonMode==false){log.info("VerticeClickSpy");log.info("Clicked on polygon",data);this.callback("PARTITION_COLLIDER_CLICKED",data);this.callback("PARTITION_CLICKED",this.object_data);setSelectedObject(this.object_data,this.node,this.component,"POLYGON");_currentPolygon={node:this.node,component:this.component,object:this.object_data,type:"POLYGON"}}}}}function setScreenSharingHostUser(user){_screenSharingHostUser=user;renderRemoteSpaceViewing(_screenSharingHostUser);return _screenSharingHostUser}function setScreenSharingParticipantUsers(users){_screenSharingParticipantUsers=users;return _screenSharingParticipantUsers}function updatePointerTexture(textureId){return __awaiter(this,void 0,void 0,(function*(){const mpsdk=getAtwinSdk();if(!mpsdk){console.log("@___Mark NO MPSDK");return}if(!textureId){textureId="targetPointer"}if(textureId=="resetTexture"){yield mpsdk.Pointer.resetTexture()}else{yield mpsdk.Pointer.editTexture(textureId)}}))}const renderCursorMarkerPointer=(pointerIntersection,_object,markerTexture)=>__awaiter(void 0,void 0,void 0,(function*(){if(!pointerIntersection)return;const coord=pointerIntersection.position;const normal=pointerIntersection.normal;function vec3ToEuler(params){const spaceObj=_3DXObjects[0];if(!spaceObj){return{euler:{x:1,y:1,z:1},nomalizedParms:pointerIntersection.normal}}const THREE=spaceObj.component.context.three;const normal=new THREE.Vector3(params.x,params.y,params.z).normalize();const arbitrary=Math.abs(normal.x)>.9?new THREE.Vector3(0,1,0):new THREE.Vector3(1,0,0);const tangent=(new THREE.Vector3).crossVectors(arbitrary,normal).normalize();const bitangent=(new THREE.Vector3).crossVectors(normal,tangent).normalize();const rotationMatrix=(new THREE.Matrix4).makeBasis(tangent,bitangent,normal);const quaternion=(new THREE.Quaternion).setFromRotationMatrix(rotationMatrix);const euler=(new THREE.Euler).setFromQuaternion(quaternion);return{euler:euler,nomalizedParms:normal}}const{euler:euler,nomalizedParms:nomalizedParms}=vec3ToEuler(normal);const offset=.05;const adjustedPosition={x:coord.x+nomalizedParms.x*offset,y:coord.y+nomalizedParms.y*offset,z:coord.z+nomalizedParms.z*offset};const _object_scale={x:.4,y:.4,z:.4};if(_object){const newPosition={object_position:adjustedPosition,object_rotation:euler,object_scale:_object_scale};setObjectTransformation(_object.node,newPosition)}else{const _markerTexture=markerTexture!==null&&markerTexture!==void 0?markerTexture:"https://cdn.jsdelivr.net/npm/architwin@latest/static/objective.png";const objectType="PNG";const spaceObj=yield addObjectToSpace(_markerTexture,objectType,{position:{x:coord.x,y:coord.y+.1,z:coord.z},rotation:{x:euler.x,y:euler.y,z:euler.z},json_data:JSON.stringify({name:cursorMarker})});const vecEulerValue=vec3ToEuler(normal);const objects=get3DXObjects({showcase_object_name:"CURSORMARKER"});const _markerObject=objects.find((obj=>obj.object.id===spaceObj.id));const adjustedPosition={x:coord.x+vecEulerValue.nomalizedParms.x*offset,y:coord.y+vecEulerValue.nomalizedParms.y*offset,z:coord.z+vecEulerValue.nomalizedParms.z*offset};const newPosition={object_position:adjustedPosition,object_rotation:vecEulerValue.euler,object_scale:_object_scale};setObjectTransformation(_markerObject.node,newPosition);return spaceObj}}));function toggleElementVisibility(id,shouldShow){const element=document.getElementById(id);if(!element){console.warn(`Element with ID '${id}' not found.`);return}element.style.display=shouldShow?"block":"none"}function setPipeCategories(pipes){log.info("set categores",pipes);_pipeCategories=pipes;return _pipeCategories}function setSelectedPipeCategory(pipe){log.info("set pipes",pipe);_selectedPipeCategory=pipe;return _selectedPipeCategory}function getSelectedPipeCategory(){return _selectedPipeCategory}function setPipes(pipes){log.info("set pipes",pipes);_pipes=pipes;return _pipes}function setSelectedPipe(pipe){log.info("set pipes",pipe);_selectedPipe=pipe;return _selectedPipe}function getSelectedPipe(){return _selectedPipe}function setPipeIsDrawingMode(status){log.info("set pipes",status);_isDrawPipe=status;return _isDrawPipe}function setVertexPath(path){_thisVertexPath=path}function getPipeIsDrawingMode(){return _isDrawPipe}function undoPipePath(){const path=pathHistory.undo();_thisVertexPath.pop();_thisVertexComponent.inputs.path=path;createVerticeControls(_thisVertexComponent,true)}function redoPipePath(){const path=pathHistory.redo();_thisVertexComponent.inputs.path=path;createVerticeControls(_thisVertexComponent,true)}function setPointerEnabled(value){_screenShareSession.isPointerEnabled=value}function getFloorGroundLevel(floorId){return __awaiter(this,void 0,void 0,(function*(){console.log("getFloorGroundLevel() for floorId:",floorId);const screenPosition={x:window.innerWidth/2,y:window.innerHeight/2};const data=yield _atwin.Renderer.getWorldPositionData(screenPosition);console.log("data:",data);if(data.position&&data.floorInfo.id===floorId){_floorGroundLevelY=data.position.y;console.log(`the ground level y coordinate for floor ${floorId} is`,_floorGroundLevelY)}else{console.error("Could not determine ground level for floor ID",floorId);return null}}))}function getFloorGroundLevelY(){return _floorGroundLevelY}export{_atwin,_config,_mpConfig,tags,sweeps,selectedObject,previousObjTransform,currentObjTransform,actionHistory,state,_tags,_tagCategories,_tagMessageRecepients,_space,_spaceId,_api,_pointerCoord,_3DXObjects,_meetingParticipants,_generatedObjectIds,_tagIotCategoryTypes,_tagIotDevices,tagColors,domMousePosition,isFitScreenOccupied,isCdnMapDataAvailable,minimap,_modelDetails,_onMouseClickInstance,transformHistory,_partitionNodes,_currentSpace,_spaceUsers,_screenSharingHostUser,_screenSharingParticipantUsers,initAtwinApi,getAtwinSdk,connectSpace,disconnectSpace,clearActionHistory,getSweeps,getCurrentSweep,getCurrentSweepPosition,moveToSweep,getNearbySweeps,getAllSweeps,getCurrentCameraPose,getCurrentCameraZoom,getCameraPosition,getCurrentFloor,moveInDirection,cameraLookAt,cameraPan,cameraRotate,cameraSetRotation,getViewMode,setViewMode,captureSpaceScreenshot,captureScreenshotAndCameraDetails,captureCurrentView,cameraZoomBy,cameraZoomReset,cameraZoomTo,getNearbyObjects,setTransformMode,setSelectedObject,clearSelectedObject,revertTransform,setTransformControls,removeTransformControls,setRenderDistance,addObject,getObject,addObjectToSpace,renderModel,addMediaScreen,attachMediaScreenContent,updateObject,updateShowcaseObject,deleteObject,deleteShowcaseObject,copyObject,replaceObject,getTargetPosition,setObjectTransformation,setPointerCoordinates,addTextMarkupScreen,setTextMarkupScreenContent,goTo3dx,goToModel,hasTimeElapsed,getSelectedObject,renderAvatar,setSpaceAvatar,get3DXObjects,set3DXObjects,clear3DXObjects,setLibrary,getLibrary,disposeModel,disposeAllModels,renderInSpaceMediaScreen,goToPosition,goToParticipant,getNearestSweepFromObject,cancelModelPlacement,renderViewpointMarker,toggleViewpointVisibility,convertDegRotationToEuler,isToolbarFeatureEnabled,goToMPOrigin,pauseVideo,playVideo,setVideoPlayback,setAnimationState,showMinimap,hideMinimap,getMapConfig,addTag,getTags,gotoTag,renderTag,disposeTag,disposeTags,toggleVisibilityTag,getMpTags,getTagDataCollection,getMpTag,showTags,attachTagMedia,detachTagMedia,moveTag,editTagLabel,editTagDescription,editTagStem,editTagIcon,editTagColor,attachSandbox,registerSandbox,saveTag,rotateCameraToObject,setModelVisibility,tagStateSubscriber,setTagIcon,setTagCategories,setUserAssignedCategories,getUserAssignedCategories,setTagMessageRecepients,getTagMessageRecepients,setTagMessages,getTagMessages,setSelectedTagUuid,getSelectedTagUuid,setCurrentSpace,toggleFitToScreen,getFloors,getLabels,renderMeetingSidebar,createMeetingTemplate,joinMeetingTemplate,meet,dispatchSpaceEvent,subscribeSpaceEvent,unsubscribeSpaceEvent,registerCustomSpaceEvent,clearSpaceEventQueue,initSocketIo,socketEmit,getParticipants,followParticipant,unFollowParticipant,enableHUD,disableHUD,getMediaScreenHUDs,canSetHud,saveMediaScreenHud,removeMediaScreenHud,enableFitScreen,disableFitScreen,initToolbarUI,themeManager,convertToEuler,disableSweeps,enableSweeps,enableSweep,disableSweep,tubeLineType,pathLineType,_sceneObject,_tubes,drawPath,toggleSpaceNavigation,startDraw,exitDraw,cancelDraw,setPolygonPath,setPathLine,setPathLineOptions,getCurrentTubeLine,renderPolygon,toggleWallVisibility,toggleMeshChildrenVisibility,toggleFloorVisibility,getChildrenOfModel,toggleVerticeRingVisibility,setPolygonFloorOffset,getPolygonFloorOffset,setFloorBaseHeight,clearFloorBaseHeight,enableVerticeControls,deleteEdge,disposePathLine,getFloorBaseHeight,setMeshChildrenMaterialProperty,undoDrawAction,redoDrawAction,setWallBaseHeight,getWallBaseHeight,clearWallBaseHeight,getVertexPath,setSpacePartitionNodes,setCurrentPolygon,getSpaceId,getCurrentPolygon,getPathBetweenSweeps,moveAlongPath,_atwinConnections,convertZupToYup,convertYupToZup,getRelativePosition,getOriginalWorldPosition,setSpaceMetadata,getSpaceMetadata,getAssetUrl,setIotCategoryTypes,setIotDeviceTypes,setIoTDeviceTagIcons,getIoTDeviceTagIcons,setScreenSharingHostUser,setScreenSharingParticipantUsers,renderCursorMarkerPointer,updatePointerTexture,toggleElementVisibility,renderPath,setDrawingConfig,getDrawingConfig,resetDrawingConfig,_pipeCategories,_selectedPipeCategory,setPipeCategories,setSelectedPipeCategory,getSelectedPipeCategory,_pipes,_selectedPipe,setPipes,setSelectedPipe,getSelectedPipe,deleteVertex,setPipeIsDrawingMode,getPipeIsDrawingMode,setPointerEnabled,removeScreenShareSessionData,setVertexPath,_pathConfig,undoPipePath,redoPipePath,pathHistory,clearTagVisibilityStorage,partitionHistory,_renderTagPaneContent,clearActivePane,renderPreviewModal,togglePreviewModal,closePreviewModal,setPreviewModalAction,activePreviewModal,_thisVertexPath};
@@ -35,6 +35,11 @@ export declare function updateParentVisibility(isPartition: boolean, currentBtn:
35
35
  * @returns An array of room nodes.
36
36
  */
37
37
  export declare function getRoomData(): PartitionNode[];
38
+ /**
39
+ * Sets the current room data being edited based on the provided ID.
40
+ * @param id - The unique identifier of the room to be edited.
41
+ */
42
+ export declare function setCurrentEditRoomData(id: string): void;
38
43
  /**
39
44
  * Retrieves the current room data being edited.
40
45
  * @returns The current room node being edited.
@@ -550,7 +550,11 @@ export function getRoomData() {
550
550
  * Sets the current room data being edited based on the provided ID.
551
551
  * @param id - The unique identifier of the room to be edited.
552
552
  */
553
- function setCurrentEditRoomData(id) {
553
+ export function setCurrentEditRoomData(id) {
554
+ if (!id) {
555
+ currentEditRoomData = null;
556
+ return;
557
+ }
554
558
  const roomUUID = extractUUID(id);
555
559
  currentEditRoomData = getRoomData().find(room => room.uuid === roomUUID);
556
560
  }
@@ -25,7 +25,7 @@ import { isValidUrl, debounce, isElementVisible, extractUUID, showLoader, isVec3
25
25
  import log from 'loglevel';
26
26
  import * as minimap from '../minimap';
27
27
  import { clearActiveThemeCard, getSelectedTheme } from "./components/toolbar/themePane";
28
- import { getCurrentEditRoomData, displayRoomTree, updatePartitionVisibilityUI, getSelectedPartitionId, updatePolygonVisibilityData, toggleVisibilityState, setFilteredDisplay, updateRoomVisibilityUI, highlightSelectedPartitionChild, highlightSelectedWindow, getRoomData } from "./components/toolbar/spacePartition/roomTreePane";
28
+ import { getCurrentEditRoomData, displayRoomTree, updatePartitionVisibilityUI, getSelectedPartitionId, updatePolygonVisibilityData, toggleVisibilityState, setFilteredDisplay, updateRoomVisibilityUI, highlightSelectedPartitionChild, highlightSelectedWindow, getRoomData, setCurrentEditRoomData } from "./components/toolbar/spacePartition/roomTreePane";
29
29
  import { toggleDrawPartitionButton, displayPartitionFormMode, setPartitionFormMode, clearPartitionForm, setPolygonData, getPartitionFormData, getPartitionSavingMode, setPartitionSavingMode, getPartitionFormMode, getNewlyAddedPartition, getCurrentPartitionData, getTempCurrentPolygon, clearTempCurrentPolygon, toggleDrawWindowButton, getIsDrawing, getDrawingMode, getCurrentPolygonData, setTempCurrentRoomEditData, toggleUndoRedoButtons } from "./components/toolbar/spacePartition/roomFormPane";
30
30
  import { actionSettingsSelectOption, getTempCoordinateSystem, getTempMeasurementUnit, getTempRotationUnit, setCoordinateSystem, setMeasurementUnit, setRotationUnit, initSettingsValues, setTempCoordinateSystem, setTempMeasurementUnit, setTempRotationUnit, toggleActionSettingsDropdown, toggleCalibrateBasepoint, setScaleFactor, getTempScaleFactor, setTempScaleFactor, setBasepoint, getTempBasepoint, setTempBasepoint, getBasepoint, toggleActionSettings, getBasepointObjectPayload, displayConvertedCoordinates, getCoordinateSystem, getScaleFactor, getMeasurementUnit, getRotationUnit, setBasepointObjectPayload } from "./components/toolbar/actionSettingsPane";
31
31
  import { getBasepointCalibrateBpCoordinateValues, getBasepointCalibrateMpCoordinateValues, initBsepointCalibratePane, toggleBasepointCalibratePane } from "./components/toolbar/basepointCalibratePane";
@@ -65,6 +65,7 @@ let _currentSandboxId = undefined;
65
65
  let isNotyfExecuted = false; // flag for notification
66
66
  let pipeColor = "";
67
67
  let allTagsVisible = true;
68
+ let lastFloorLevel = undefined;
68
69
  function batchAddEventListenerByClassName(className, callback) {
69
70
  if (className) {
70
71
  const elements = document.querySelectorAll(`.${className}`);
@@ -2241,6 +2242,8 @@ function handleSavePartition() {
2241
2242
  clearSelectedObject();
2242
2243
  clearFloorBaseHeight();
2243
2244
  setTempCurrentRoomEditData(null);
2245
+ setCurrentEditRoomData(null);
2246
+ lastFloorLevel = undefined;
2244
2247
  notyf.success(`${i18n.t('SuccessRoomSaved')}`);
2245
2248
  });
2246
2249
  }
@@ -2342,6 +2345,15 @@ function handleCancelPartition() {
2342
2345
  obj.children = [];
2343
2346
  }
2344
2347
  if (polyJson && polyJson.path) {
2348
+ log.info("lastFloorLevel before", lastFloorLevel);
2349
+ if (lastFloorLevel) {
2350
+ setSelectedObject(obj.object, obj.node, obj.component, obj.type);
2351
+ polyJson.path = polyJson.path.map(point => {
2352
+ point.y = lastFloorLevel;
2353
+ return point;
2354
+ });
2355
+ log.info("polyJson with lastFloorLevel", polyJson);
2356
+ }
2345
2357
  const payload = {
2346
2358
  uuid: currentPartition.uuid,
2347
2359
  polygon_json: polyJson
@@ -2377,7 +2389,9 @@ function handleCancelPartition() {
2377
2389
  clearPartitionForm();
2378
2390
  clearSelectedObject();
2379
2391
  clearFloorBaseHeight();
2392
+ setCurrentEditRoomData(null);
2380
2393
  toggleDisplayPane('at-cancel-room-form-btn');
2394
+ lastFloorLevel = undefined;
2381
2395
  }));
2382
2396
  }
2383
2397
  /**
@@ -2535,18 +2549,21 @@ function handleFloorLevelInputChange() {
2535
2549
  notyf.success(`${i18n.t('SuccessBaseHeight')}`);
2536
2550
  const objects = get3DXObjects();
2537
2551
  const latestObj = objects[objects.length - 1];
2538
- const currentPartitionData = getCurrentPartitionData();
2552
+ const currentRoomData = getCurrentEditRoomData();
2539
2553
  const currentPolygon = getCurrentPolygon();
2540
2554
  log.info("latestObj ", latestObj);
2541
- if (currentPartitionData) {
2555
+ if (currentRoomData) {
2542
2556
  let partitionsUUIDs = [];
2543
- partitionsUUIDs = currentPartitionData.children.map(child => child.uuid);
2557
+ partitionsUUIDs = currentRoomData.children.map(child => child.uuid);
2544
2558
  const target = objects.find(obj => partitionsUUIDs.includes(obj.object.object_data.uuid));
2545
2559
  if (target) {
2546
2560
  setSelectedObject(target.object, target.node, target.component, target.type);
2547
2561
  const adjustedFloorBaseHeight = getFloorBaseHeight();
2548
2562
  const polyJson = target.object.object_data.json_data;
2549
- const updatedPath = polyJson.path.map(path => {
2563
+ const formMode = getPartitionFormMode();
2564
+ if (formMode == "EDIT" /* FORM_MODE.EDIT */)
2565
+ lastFloorLevel = polyJson.path[0].y;
2566
+ const updatedPath = polyJson.path.map((path, index) => {
2550
2567
  path.y = adjustedFloorBaseHeight;
2551
2568
  return path;
2552
2569
  });
@@ -2561,7 +2578,10 @@ function handleFloorLevelInputChange() {
2561
2578
  setSelectedObject(currentPolygon.object, currentPolygon.node, currentPolygon.component, currentPolygon.type);
2562
2579
  const adjustedFloorBaseHeight = getFloorBaseHeight();
2563
2580
  const polyJson = latestObj.object.object_data.json_data;
2564
- const updatedPath = polyJson.path.map(path => {
2581
+ const formMode = getPartitionFormMode();
2582
+ if (formMode == "EDIT" /* FORM_MODE.EDIT */)
2583
+ lastFloorLevel = polyJson.path[0].y;
2584
+ const updatedPath = polyJson.path.map((path, index) => {
2565
2585
  path.y = adjustedFloorBaseHeight;
2566
2586
  return path;
2567
2587
  });
@@ -2588,7 +2608,7 @@ function handleMarkFloor() {
2588
2608
  });
2589
2609
  yield getTargetPosition((coord) => {
2590
2610
  const objects = get3DXObjects();
2591
- const currentPartitionData = getCurrentPartitionData();
2611
+ const currentRoomData = getCurrentEditRoomData();
2592
2612
  const currentPolygon = getCurrentPolygon();
2593
2613
  log.info("coord ", coord);
2594
2614
  if (coord.y < -1) {
@@ -2600,14 +2620,17 @@ function handleMarkFloor() {
2600
2620
  if (Math.sign(coord.y) == 1 || coord.y > -0.9) {
2601
2621
  setFloorBaseHeight(coord.y);
2602
2622
  const adjustedHeight = getFloorBaseHeight();
2603
- if (currentPartitionData) {
2623
+ if (currentRoomData) {
2604
2624
  let partitionsUUIDs = [];
2605
- partitionsUUIDs = currentPartitionData.children.map(child => child.uuid);
2625
+ partitionsUUIDs = currentRoomData.children.map(child => child.uuid);
2606
2626
  const target = objects.find(obj => partitionsUUIDs.includes(obj.object.object_data.uuid));
2607
2627
  if (target) {
2608
2628
  setSelectedObject(target.object, target.node, target.component, target.type);
2609
2629
  const polyJson = target.object.object_data.json_data;
2610
- const updatedPath = polyJson.path.map(path => {
2630
+ const formMode = getPartitionFormMode();
2631
+ if (formMode == "EDIT" /* FORM_MODE.EDIT */)
2632
+ lastFloorLevel = polyJson.path[0].y;
2633
+ const updatedPath = polyJson.path.map((path, index) => {
2611
2634
  path.y = adjustedHeight;
2612
2635
  return path;
2613
2636
  });
@@ -2622,7 +2645,10 @@ function handleMarkFloor() {
2622
2645
  //setSelectedObject(currentPolygon.object,currentPolygon.node,currentPolygon.component,currentPolygon.type)
2623
2646
  setSelectedObject(currentPolygon.object, currentPolygon.node, currentPolygon.component, currentPolygon.type);
2624
2647
  const polyJson = currentPolygon.object.object_data.json_data;
2625
- const updatedPath = polyJson.path.map(path => {
2648
+ const formMode = getPartitionFormMode();
2649
+ if (formMode == "EDIT" /* FORM_MODE.EDIT */)
2650
+ lastFloorLevel = polyJson.path[0].y;
2651
+ const updatedPath = polyJson.path.map((path, index) => {
2626
2652
  path.y = adjustedHeight;
2627
2653
  return path;
2628
2654
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "architwin",
3
- "version": "1.16.2",
3
+ "version": "1.16.3",
4
4
  "description": "ArchiTwin Library for Matterport",
5
5
  "main": "./lib/architwin.js",
6
6
  "types": "./lib/architwin.d.ts",