1import { LightningElement } from 'lwc';
2import { ShowToastEvent } from 'lightning/platformShowToastEvent';
3import { getARSpaceCapture } from 'lightning/mobileCapabilities';
4
5
6export default class ArSpaceCaptureNew extends LightningElement {
7 myARSpaceCaptureScanner;
8 scanRoomDisabled = false;
9 capturedRoomsData = '';
10
11
12 // When the component is initialized, determine whether to enable the Scan Room button
13 connectedCallback() {
14 this.myARSpaceCaptureScanner = getARSpaceCapture();
15 if (this.myARSpaceCaptureScanner?.isAvailable() != true) {
16 this.scanRoomDisabled = true;
17 }
18 }
19
20
21 handleBeginScanRoomClick() {
22 // Reset capturedRoomsData to empty string before starting a new scan
23 this.capturedRoomsData = '';
24
25
26 // Make sure AR SpaceCapture is available before trying to use it.
27 // Scan Room button also disabled when scanner unavailable
28 if (this.myARSpaceCaptureScanner?.isAvailable()) {
29 let options = {};
30
31
32 // Starting the scanning process
33 this.myARSpaceCaptureScanner.scanRoom(options)
34 .then((results) => {
35 try {
36 this.refs.outputDiv.innerHTML = "";
37 } catch (ex) {
38
39
40 }
41
42
43 const capturedRooms = results.capturedRooms ?? [];
44 if (capturedRooms) {
45 // Array of Rooms
46 let summary = {};
47
48
49 try {
50 summary.isSuccess = results.isSuccess;
51 summary.wallsCount = results.capturedRooms[0].walls.length;
52 summary.floorsCount = results.capturedRooms[0].floors.length;
53 summary.openingsCount = results.capturedRooms[0].openings.length;
54 summary.doorsCount = results.capturedRooms[0].doors.length;
55 summary.windowsCount = results.capturedRooms[0].windows.length;
56
57
58 if (results.capturedRooms[0].floors.length > 0) {
59 summary.roomSizeWidth = results.capturedRooms[0].floors[0].dimensions[0];
60 summary.roomSizeHeight = results.capturedRooms[0].floors[0].dimensions[1];
61 summary.roomVolume = summary.roomSizeWidth * summary.roomSizeHeight;
62 }
63
64
65 if (results.capturedRooms[0].openings.length > 0) {
66 summary.openingSizeWidth = results.capturedRooms[0].openings[0].dimensions[0];
67 summary.openingSizeHeight = results.capturedRooms[0].openings[0].dimensions[1];
68 summary.openingVolume = summary.openingSizeWidth * summary.openingSizeHeight;
69 }
70
71
72 if (results.capturedRooms[0].doors.length > 0) {
73 summary.doorSizeWidth = results.capturedRooms[0].doors[0].dimensions[0];
74 summary.doorSizeHeight = results.capturedRooms[0].doors[0].dimensions[1];
75 summary.openingVolume = summary.doorSizeWidth * summary.doorSizeHeight;
76 }
77
78
79 this.refs.outputDivSummary.innerHTML = "<pre><code>" + JSON.stringify(summary, undefined, 2) + "</code></pre>";
80 this.refs.outputDiv.innerHTML = "<pre><code>" + JSON.stringify(results, undefined, 2) + "</code></pre>";
81 } catch (ex) {
82 this.refs.outputDivSummary.innerHTML = ex.code + "<br>" + ex.message;
83 }
84 } else {
85// Single Room
86
87
88 try {
89 let summary = {};
90
91
92 summary.isSuccess = results.isSuccess;
93 summary.wallsCount = results.capturedRoom.walls.length;
94 summary.floorsCount = results.capturedRoom.floors.length;
95 summary.openingsCount = results.capturedRoom.openings.length;
96 summary.doorsCount = results.capturedRoom.doors.length;
97 summary.windowsCount = results.capturedRoom.windows.length;
98
99
100 if (results.capturedRoom.floors.length > 0) {
101 summary.roomSizeWidth = results.capturedRoom.floors[0].dimensions[0];
102 summary.roomSizeHeight = results.capturedRoom.floors[0].dimensions[1];
103 summary.roomVolume = summary.roomSizeWidth * summary.roomSizeHeight;
104 }
105
106
107
108
109 if (results.capturedRoom.openings.length > 0) {
110 summary.openingSizeWidth = results.capturedRoom.openings[0].dimensions[0];
111 summary.openingSizeHeight = results.capturedRoom.openings[0].dimensions[1];
112 summary.openingVolume = summary.openingSizeWidth * summary.openingSizeHeight;
113 }
114
115
116 if (results.capturedRoom.doors.length > 0) {
117 summary.doorSizeWidth = results.capturedRoom.doors[0].dimensions[0];
118 summary.doorSizeHeight = results.capturedRoom.doors[0].dimensions[1];
119 summary.doorVolume = summary.doorSizeWidth * summary.doorSizeHeight;
120 }
121
122
123 this.refs.outputDivSummary.innerHTML = "<pre><code>" + JSON.stringify(summary, undefined, 2) + "</code></pre>";
124 this.refs.outputDiv.innerHTML = "<pre><code>" + JSON.stringify(results, undefined, 2) + "</code></pre>";
125 } catch (ex) {
126 this.refs.outputDivSummary.innerHTML = ex.code + "<br>" + ex.message;
127 }
128 }
129 })
130 .catch((error) => {
131 // There was an error while scanning
132 this.refs.outputDivSummary.innerHTML = error.code + "<br>" + error.message;
133 })
134 .finally({
135 // Close capture process regardless of whether we completed successfully or had an error
136 // this.myARSpaceCaptureScanner.dismiss();
137 });
138 } else {
139 this.refs.outputDivSummary.innerHTML = 'AR SpaceCapture is not available on your device.';
140 }
141 }
142}