architwin 1.16.0 → 1.16.2

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.
@@ -277,7 +277,8 @@ i18n
277
277
  "Window": "Window",
278
278
  "CannotBackDrawingMode": "Cannot go back while drawing mode is active.",
279
279
  "PleaseOffDrawingMode": "Action cannot be done, please turn off drawing mode.",
280
- "IotCategoryRequired": "IoT Category is required"
280
+ "IotCategoryRequired": "IoT Category is required",
281
+ "SuccessUpdatedFloorLevel": "Updated the partition's floor level"
281
282
  }
282
283
  },
283
284
  ja: {
@@ -549,7 +550,8 @@ i18n
549
550
  "CannotBackDrawingMode": "描画モードがアクティブな間は戻ることができません。",
550
551
  "PleaseOffDrawingMode": "操作を行う前に、描画モードをオフにしてください。",
551
552
  "Successfully Deleted Tag": "タグを削除しました",
552
- "IotCategoryRequired": "IoTカテゴリは必須です"
553
+ "IotCategoryRequired": "IoTカテゴリは必須です",
554
+ "SuccessUpdatedFloorLevel": "区画のフロアオフセット値が更新されました"
553
555
  }
554
556
  }
555
557
  },
@@ -1,7 +1,4 @@
1
- import { FORM_MODE, PartitionNode, PolygonData, WallPolyData, IObjectData, WindowPolyData } from "../../../../types";
2
- export declare let isEditWindow: boolean;
3
- export declare let currentEditWindowIndex: number;
4
- export declare let currentWindow: WindowPolyData;
1
+ import { FORM_MODE, PartitionNode, PolygonData, WallPolyData, IObjectData } from "../../../../types";
5
2
  export declare function renderRoomFormPane(): HTMLDivElement;
6
3
  /**
7
4
  * Toggles the state of the partition drawing functionality.
@@ -33,6 +30,7 @@ export declare function displayPartitionFormMode(): void;
33
30
  */
34
31
  export declare function handlePartitionRowEditBtnClickEvent(partitions: Array<PartitionNode>, targetElement: HTMLElement): void;
35
32
  export declare function displayWall(wall: WallPolyData): HTMLElement;
33
+ export declare function setDrawConfig(drawMode: 'window' | 'partition'): void;
36
34
  /**
37
35
  * Clears the partition form by resetting UI elements and internal data.
38
36
  * - Navigates back to the partition list view.
@@ -105,7 +103,7 @@ export declare function getCurrentPolygonData(): PolygonData;
105
103
  * Sets the partition data, including updating the floor level and generating a new
106
104
  * partition with its corresponding UUID, space UUID, and polygon data.
107
105
  */
108
- export declare function setCurrentPartitionData(): Promise<void>;
106
+ export declare function setCurrentPartitionData(payload: PolygonData | undefined): Promise<void>;
109
107
  export declare function removeWindow(index?: number): void;
110
108
  export declare function toggleUndoRedoButtons(undo: boolean, redo: boolean): void;
111
109
  export declare function getCurrentPartitionData(): PartitionNode;
@@ -125,3 +123,6 @@ export declare function handlePartitionWallEditBtn(wallUuid: string): Promise<vo
125
123
  export declare function getTempCurrentRoomEditData(): Array<PartitionNode>;
126
124
  export declare function setTempCurrentRoomEditData(roomEditData: Array<PartitionNode>): void;
127
125
  export declare function getCurrentWall(): WallPolyData;
126
+ export declare function getIsEditWindow(): boolean;
127
+ export declare function setIsEditWindow(value: boolean): void;
128
+ export declare function setCurrentEditWindowIndex(value: number): void;
@@ -41,10 +41,10 @@ let inputFloorMaterial;
41
41
  let floorMaterial = '';
42
42
  let inputWallMaterial;
43
43
  let wallMaterial = '';
44
- export let isEditWindow = false;
45
- export let currentEditWindowIndex = null;
46
- export let currentWindow = null;
44
+ let currentEditWindowIndex = null;
45
+ let currentWindowIndex = null;
47
46
  let tempCurrentEditRoom = null;
47
+ let isEditWindow = false;
48
48
  export function renderRoomFormPane() {
49
49
  log.info("__@ renderRoomFormPane: ", roomFormMode);
50
50
  const element = document.createElement('div');
@@ -228,10 +228,11 @@ export function toggleDrawPartitionButton() {
228
228
  isEditPartition = false;
229
229
  previousPartitionData = null;
230
230
  }
231
- // toggleUndoRedoButtons(false, false)
231
+ partitionHistory.clearHistory();
232
+ toggleUndoRedoButtons(false, false);
232
233
  }
233
234
  export function toggleDrawWindowButton() {
234
- var _a, _b;
235
+ var _a, _b, _c;
235
236
  log.info("toggleDrawWindowButton()", getCurrentPolygon(), _3DXObjects);
236
237
  setCurrentPolygon(undefined);
237
238
  const addDoorButton = document.getElementById('at-add-window-door-btn');
@@ -246,6 +247,7 @@ export function toggleDrawWindowButton() {
246
247
  ${i18n.t('DoneDrawing')}
247
248
  <span class="mdi mdi-check-bold"></span>
248
249
  `;
250
+ currentWindowIndex = (_a = currentWall.windows) === null || _a === void 0 ? void 0 : _a.length;
249
251
  }
250
252
  const objectIndex = _3DXObjects.findIndex(obj => obj.object.id == currentObject.object.id);
251
253
  log.info("objectIndex", objectIndex);
@@ -253,7 +255,7 @@ export function toggleDrawWindowButton() {
253
255
  lineTypeComponentConfig: {
254
256
  renderPolygonOnAdd: false,
255
257
  drawingMode: drawingMode,
256
- targetIndex: (_b = currentEditWindowIndex !== null && currentEditWindowIndex !== void 0 ? currentEditWindowIndex : (_a = currentWall.windows) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,
258
+ targetIndex: (_c = currentEditWindowIndex !== null && currentEditWindowIndex !== void 0 ? currentEditWindowIndex : (_b = currentWall.windows) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0,
257
259
  polygonData: currentPolygonData,
258
260
  targetUUID: currentWall.uuid,
259
261
  objectIndex: objectIndex
@@ -266,6 +268,7 @@ export function toggleDrawWindowButton() {
266
268
  else {
267
269
  isDrawing = false;
268
270
  drawingMode = null;
271
+ currentWindowIndex = null;
269
272
  currentPartitionData.polygon_json = JSON.stringify(currentPolygonData);
270
273
  addDoorButton.classList.remove('at_add_window_door_btn_active');
271
274
  addDoorButton.classList.add('at_add_window_door_btn');
@@ -290,16 +293,17 @@ export function toggleDrawWindowButton() {
290
293
  log.info("objectIndex", objectIndex);
291
294
  if (_3DXObjects[objectIndex].children) {
292
295
  _3DXObjects[objectIndex].children.map((win) => __awaiter(this, void 0, void 0, function* () {
293
- var _c;
296
+ var _d;
294
297
  log.info("WIND", win);
295
- if (win.index == ((_c = currentWall.windows) === null || _c === void 0 ? void 0 : _c.length) - 1 && win.wallUUID == currentWall.uuid) {
298
+ if (win.index == ((_d = currentWall.windows) === null || _d === void 0 ? void 0 : _d.length) - 1 && win.wallUUID == currentWall.uuid) {
296
299
  yield disposeModel(win);
297
300
  }
298
301
  }));
299
302
  }
300
303
  }
301
304
  }
302
- // toggleUndoRedoButtons(false, false)
305
+ partitionHistory.clearHistory();
306
+ toggleUndoRedoButtons(false, false);
303
307
  }
304
308
  /**
305
309
  * Displays the partition form based on the current form mode.
@@ -919,7 +923,6 @@ function setupEditWindow(element, window) {
919
923
  const confirmBtn = element.querySelector(`#at-confirm-edit-window-${window.index}`);
920
924
  if (!editBtn || !editNameContainer || !inputName || !nameLabel || !editMaterialContainer || !inputMaterial)
921
925
  return;
922
- currentWindow = window;
923
926
  // Show inputs when edit icon is clicked
924
927
  editBtn.addEventListener("click", () => {
925
928
  if (isDrawing) {
@@ -936,18 +939,7 @@ function setupEditWindow(element, window) {
936
939
  currentEditWindowIndex = window.index;
937
940
  drawingMode = 'window';
938
941
  toggleDrawWindowButton();
939
- log.info("currentObject ", currentObject);
940
- setCurrentPolygon(currentObject);
941
- const drawConfig = {
942
- lineTypeComponentConfig: {
943
- renderPolygonOnAdd: false,
944
- drawingMode: drawingMode,
945
- polygonData: currentObject.object.object_data.json_data,
946
- targetUUID: currentWall.uuid,
947
- targetIndex: currentEditWindowIndex
948
- }
949
- };
950
- setDrawingConfig(drawConfig);
942
+ setDrawConfig('window');
951
943
  // @ts-ignore
952
944
  const windowComponent = {
953
945
  inputs: {
@@ -956,17 +948,7 @@ function setupEditWindow(element, window) {
956
948
  };
957
949
  enableVerticeControls(windowComponent);
958
950
  isDrawing = true;
959
- let data;
960
- if (currentPartitionData) {
961
- data = {
962
- polygon: {
963
- uuid: currentPartitionData.uuid,
964
- polygon_json: currentPolygonData
965
- },
966
- verticePath: window.path,
967
- };
968
- }
969
- // partitionHistory.setCurrent(data)
951
+ // partitionHistory.setCurrent(window.path)
970
952
  });
971
953
  // // Confirm edit name and material
972
954
  confirmBtn.addEventListener("click", () => {
@@ -977,7 +959,7 @@ function setupEditWindow(element, window) {
977
959
  nameLabel.textContent = window.name;
978
960
  editNameContainer.style.display = "none";
979
961
  const newMaterial = inputMaterial.value.trim();
980
- window.material = newMaterial || window.material;
962
+ window.material = newMaterial;
981
963
  editMaterialContainer.style.display = "none";
982
964
  editBtn.style.display = "flex";
983
965
  confirmBtn.style.display = "none";
@@ -1001,9 +983,23 @@ function setupEditWindow(element, window) {
1001
983
  isDrawing = false;
1002
984
  isEditWindow = false;
1003
985
  partitionHistory.clearHistory();
1004
- // toggleUndoRedoButtons(false, false)
986
+ toggleUndoRedoButtons(false, false);
1005
987
  });
1006
988
  }
989
+ export function setDrawConfig(drawMode) {
990
+ log.info("currentObject ", currentObject);
991
+ setCurrentPolygon(currentObject);
992
+ const drawConfig = {
993
+ lineTypeComponentConfig: {
994
+ renderPolygonOnAdd: false,
995
+ drawingMode: drawMode,
996
+ polygonData: currentObject.object.object_data.json_data,
997
+ targetUUID: currentWall.uuid,
998
+ targetIndex: currentEditWindowIndex
999
+ }
1000
+ };
1001
+ setDrawingConfig(drawConfig);
1002
+ }
1007
1003
  function saveWallChanges() {
1008
1004
  log.info("currentWall", currentWall);
1009
1005
  updateWallInPolygon(currentWall);
@@ -1457,38 +1453,42 @@ export function clearTempCurrentPolygon() {
1457
1453
  */
1458
1454
  export function setPolygonData(payload) {
1459
1455
  console.log('setPolygonData()', payload);
1460
- // Helper function to round numbers to 2 decimals
1461
- function roundToFourDecimals(value) {
1462
- if (typeof value === "number") {
1463
- return Math.round(value * 10000) / 10000; // Round to 4 decimals
1456
+ if (payload != undefined) {
1457
+ // Helper function to round numbers to 2 decimals
1458
+ function roundToFourDecimals(value) {
1459
+ if (typeof value === "number") {
1460
+ return Math.round(value * 10000) / 10000; // Round to 4 decimals
1461
+ }
1462
+ else if (Array.isArray(value)) {
1463
+ return value.map(roundToFourDecimals); // Recursively round each item in the array
1464
+ }
1465
+ else if (typeof value === "object" && value !== null) {
1466
+ return Object.keys(value).reduce((acc, key) => {
1467
+ acc[key] = roundToFourDecimals(value[key]); // Recursively process each object property
1468
+ return acc;
1469
+ }, {});
1470
+ }
1471
+ return value;
1464
1472
  }
1465
- else if (Array.isArray(value)) {
1466
- return value.map(roundToFourDecimals); // Recursively round each item in the array
1473
+ // Round numbers in the polygon JSON recursively
1474
+ if (payload) {
1475
+ payload = roundToFourDecimals(payload);
1467
1476
  }
1468
- else if (typeof value === "object" && value !== null) {
1469
- return Object.keys(value).reduce((acc, key) => {
1470
- acc[key] = roundToFourDecimals(value[key]); // Recursively process each object property
1471
- return acc;
1472
- }, {});
1477
+ // Set floor UUID and name
1478
+ if (payload.floor) {
1479
+ payload.floor.uuid = payload.floor.uuid || generateUUID();
1480
+ payload.floor.name = `floor`;
1473
1481
  }
1474
- return value;
1475
- }
1476
- // Round numbers in the polygon JSON recursively
1477
- if (payload) {
1478
- payload = roundToFourDecimals(payload);
1479
- }
1480
- // Set floor UUID and name
1481
- if (payload.floor) {
1482
- payload.floor.uuid = payload.floor.uuid || generateUUID();
1483
- payload.floor.name = `floor`;
1482
+ // Iterate over walls to set UUID and names
1483
+ if (payload.walls && payload.walls.length > 0) {
1484
+ payload.walls = payload.walls.map((wall, index) => (Object.assign(Object.assign({}, roundToFourDecimals(wall)), { name: `wall-${index}`, uuid: wall.uuid || generateUUID() })));
1485
+ }
1486
+ currentPolygonData = payload;
1487
+ setCurrentPartitionData(payload);
1484
1488
  }
1485
- // Iterate over walls to set UUID and names
1486
- if (payload.walls && payload.walls.length > 0) {
1487
- payload.walls = payload.walls.map((wall, index) => (Object.assign(Object.assign({}, roundToFourDecimals(wall)), { name: `wall-${index}`, uuid: wall.uuid || generateUUID() })));
1489
+ else {
1490
+ setCurrentPartitionData(undefined);
1488
1491
  }
1489
- currentPolygonData = payload;
1490
- console.log("setPolygonData() currentPolygonData:", currentPolygonData);
1491
- setCurrentPartitionData();
1492
1492
  }
1493
1493
  /**
1494
1494
  * Returns current polygon data
@@ -1501,10 +1501,10 @@ export function getCurrentPolygonData() {
1501
1501
  * Sets the partition data, including updating the floor level and generating a new
1502
1502
  * partition with its corresponding UUID, space UUID, and polygon data.
1503
1503
  */
1504
- export function setCurrentPartitionData() {
1504
+ export function setCurrentPartitionData(payload) {
1505
1505
  var _a;
1506
1506
  return __awaiter(this, void 0, void 0, function* () {
1507
- console.log('setCurrentPartitionData()');
1507
+ console.log('setCurrentPartitionData()', payload);
1508
1508
  const floorLevel = ((_a = document.getElementById('at-room-floor-level-input')) === null || _a === void 0 ? void 0 : _a.value) || null;
1509
1509
  const currentUrl = window.location.href;
1510
1510
  const spaceUUID = extractUUID(currentUrl);
@@ -1519,7 +1519,9 @@ export function setCurrentPartitionData() {
1519
1519
  resolve();
1520
1520
  }
1521
1521
  if (currentObjectData == undefined) {
1522
- currentPolygonData = null;
1522
+ if (drawingMode === 'partition') {
1523
+ currentPolygonData = null;
1524
+ }
1523
1525
  clearInterval(interval);
1524
1526
  resolve();
1525
1527
  }
@@ -1530,7 +1532,7 @@ export function setCurrentPartitionData() {
1530
1532
  }
1531
1533
  }, 50); // Check every 50ms
1532
1534
  });
1533
- if (currentPolygonData) {
1535
+ if (payload) {
1534
1536
  let polygonData = currentPolygonData;
1535
1537
  polygonData.floor.floor_level = Number(floorLevel); // Set the floor level from the input
1536
1538
  // Create a new partition data payload
@@ -1546,13 +1548,11 @@ export function setCurrentPartitionData() {
1546
1548
  }
1547
1549
  if (isEditPartition) {
1548
1550
  newPayload.name = currentPartitionData.name;
1549
- console.log("newPayload.name", newPayload.name);
1550
1551
  }
1551
1552
  if (currentHighlightedFace) {
1552
1553
  setMeshChildrenMaterialProperty(currentHighlightedFace.component, currentHighlightedFace.name, currentHighlightedFace.type, currentHighlightedFace.value);
1553
1554
  }
1554
1555
  updatePartitionDataArray(newPayload, currentPartitionDataArray);
1555
- log.info("if currentPartitionDataArray", currentPartitionDataArray);
1556
1556
  if (drawingMode === 'partition') {
1557
1557
  displayFaces(currentPolygonData);
1558
1558
  }
@@ -1569,13 +1569,19 @@ export function setCurrentPartitionData() {
1569
1569
  else {
1570
1570
  const faceVertexContainer = document.getElementById('at-face-vertex-container');
1571
1571
  faceVertexContainer.innerHTML = '';
1572
- if (currentPartitionData) {
1573
- const target = _3DXObjects.find(obj => obj.object.object_data.uuid === currentPartitionData.uuid);
1574
- disposeModel(target);
1575
- currentPartitionDataArray = currentPartitionDataArray.filter(partition => partition.uuid != currentPartitionData.uuid);
1576
- dispatchSpaceEvent(SPACE_EVENTS.PARTITION_DISPOSED, currentPartitionData);
1577
- currentPartitionData = null;
1578
- log.info("else currentPartitionDataArray", currentPartitionDataArray);
1572
+ if (drawingMode === 'partition') {
1573
+ if (currentPartitionData) {
1574
+ currentPartitionDataArray = currentPartitionDataArray.filter(partition => partition.uuid != currentPartitionData.uuid);
1575
+ dispatchSpaceEvent(SPACE_EVENTS.PARTITION_DISPOSED, currentPartitionData);
1576
+ currentPartitionData = null;
1577
+ log.info("else currentPartitionDataArray", currentPartitionDataArray);
1578
+ }
1579
+ }
1580
+ else if (drawingMode === 'window') {
1581
+ if (currentWall === null || currentWall === void 0 ? void 0 : currentWall.windows) {
1582
+ currentWall.windows.splice(currentWindowIndex, 1);
1583
+ faceVertexContainer.append(displayWall(currentWall));
1584
+ }
1579
1585
  }
1580
1586
  }
1581
1587
  });
@@ -1605,7 +1611,7 @@ function updatePartitionDataArray(payload, currentPartitionDataArray) {
1605
1611
  else if (drawingMode === 'window') {
1606
1612
  log.info("currentPartitionData", currentPartitionData);
1607
1613
  // Update current partition data
1608
- currentPartitionData.polygon_json = JSON.stringify(payload.polygon_json);
1614
+ currentPartitionData.polygon_json = payload.polygon_json;
1609
1615
  // Update current partition data array
1610
1616
  const currentPartitionDataIndex = currentPartitionDataArray.findIndex(partitionData => partitionData.uuid == currentPartitionData.uuid);
1611
1617
  currentPartitionDataArray[currentPartitionDataIndex] = currentPartitionData;
@@ -1819,3 +1825,12 @@ export function setTempCurrentRoomEditData(roomEditData) {
1819
1825
  export function getCurrentWall() {
1820
1826
  return currentWall;
1821
1827
  }
1828
+ export function getIsEditWindow() {
1829
+ return isEditWindow;
1830
+ }
1831
+ export function setIsEditWindow(value) {
1832
+ isEditWindow = value;
1833
+ }
1834
+ export function setCurrentEditWindowIndex(value) {
1835
+ currentEditWindowIndex = value;
1836
+ }
@@ -10,9 +10,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { getBundleVersion, extractUUID } from "../../../../utils";
11
11
  import { batchAddEventListenerByClassName, handleDeletePartition, handlePartitionVisibility, handlePolygonVisibility, handleWindowVisibility, toggleDisplayPane } from "../../../events";
12
12
  import i18n from "../i18n";
13
- import { getCurrentPolygonData, handlePartitionRowEditBtnClickEvent, handlePartitionWallEditBtn, setPartitionFormMode } from "./roomFormPane";
13
+ import { getCurrentPolygonData, handlePartitionRowEditBtnClickEvent, handlePartitionWallEditBtn, setCurrentEditWindowIndex, setDrawConfig, setDrawingMode, setIsEditWindow, setPartitionFormMode } from "./roomFormPane";
14
14
  import { SPACE_EVENTS } from "../../../../types";
15
- import { _3DXObjects, dispatchSpaceEvent, getChildrenOfModel, goToModel, goToPosition, renderPolygon, setSelectedObject } from "../../../../architwin";
15
+ import { _3DXObjects, dispatchSpaceEvent, enableVerticeControls, getChildrenOfModel, goToModel, goToPosition, renderPolygon, setSelectedObject } from "../../../../architwin";
16
16
  import log from 'loglevel';
17
17
  import { getShortcutTooltipHTML } from "../static/common";
18
18
  let roomDataArray = [];
@@ -773,11 +773,13 @@ function displayWindows(wall, partitionId, parentId) {
773
773
  if (!window.options.is_deleted) {
774
774
  const windowCoords = JSON.stringify(window.edges);
775
775
  const windowCoordsEncoded = btoa(windowCoords);
776
+ const windowPath = JSON.stringify(window.path);
777
+ const windowPathEncoded = btoa(windowPath);
776
778
  itemsHTML += `
777
779
  <li window-coords="${windowCoordsEncoded}" partition-id="${partitionId}" id="window-${wall.uuid}-${window.index}" wall-id="${wall.uuid}" window-name="${window.name}" window-index="${window.index}" class="at_window_row_item">
778
780
  <div>${window.name}</div>
779
781
  <div>
780
- <span window-coords="${windowCoordsEncoded}" partition-id="${partitionId}" partition-parent-uuid="${parentId}" polygon-item-id="${wall.uuid}" index="${window.index}" class="mdi mdi-pencil at_window_edit_btn"></span>
782
+ <span window-path="${windowPathEncoded}" window-coords="${windowCoordsEncoded}" partition-id="${partitionId}" partition-parent-uuid="${parentId}" polygon-item-id="${wall.uuid}" index="${window.index}" class="mdi mdi-pencil at_window_edit_btn"></span>
781
783
  <span id="${window.name}" partition-id="${partitionId}" partition-parent-uuid="${parentId}" polygon-item-id="${wall.uuid}" class="mdi ${window.options.is_visible ? 'mdi-eye ' : 'mdi-eye-off'} at_child_visible_btn"></span>
782
784
  </div>
783
785
  </li>
@@ -818,6 +820,9 @@ function openPartitionChildEdit(targetElement, parentRoomElement, parentRoomUuid
818
820
  function openWindowEdit(targetElement, parentRoomElement, parentRoomUuid, partitionId) {
819
821
  return __awaiter(this, void 0, void 0, function* () {
820
822
  const index = targetElement.getAttribute('index');
823
+ const windowPathEncoded = targetElement.getAttribute('window-path');
824
+ const windowPathJSON = atob(windowPathEncoded);
825
+ const windowPath = JSON.parse(windowPathJSON);
821
826
  yield openPartitionChildEdit(targetElement, parentRoomElement, parentRoomUuid, partitionId, true);
822
827
  yield new Promise(resolve => requestAnimationFrame(resolve));
823
828
  const editBtn = document.querySelector(`#at-edit-window-btn-${index}`);
@@ -834,6 +839,17 @@ function openWindowEdit(targetElement, parentRoomElement, parentRoomUuid, partit
834
839
  editBtn.style.display = "none";
835
840
  confirmBtn.style.display = "flex";
836
841
  inputName.focus();
842
+ setIsEditWindow(true);
843
+ setCurrentEditWindowIndex(Number(index));
844
+ setDrawConfig('window');
845
+ // @ts-ignore
846
+ const windowComponent = {
847
+ inputs: {
848
+ path: windowPath
849
+ }
850
+ };
851
+ enableVerticeControls(windowComponent);
852
+ setDrawingMode(true);
837
853
  }
838
854
  });
839
855
  }
@@ -414,7 +414,7 @@ export function renderTagRow(tag, tagIconUrl, tag_type = null) {
414
414
  <td>
415
415
  <div class="at_table_button_row">
416
416
  <span class="mdi mdi-eye at_visibility_tag_btn ${isGenerallyDisabled ? 'at_disabled' : ''}" id="at-visibility-tag-${tag.id}" data-cy="at-visibility-tag-${tag.id}" tag-id="${tag.id}" tag-id="${tag.id}"></span>
417
- <span class="mdi mdi-pencil at_edit_tag_btn ${isGenerallyDisabled ? 'at_disabled' : ''}" id="at-edit-tag-${tag.id}" data-cy="at-edit-tag-${tag.id}" tag-id="${tag.id}" target-pane="at-tag-form-pane"></span>
417
+ <span class="mdi mdi-pencil at_edit_tag_btn ${isGenerallyDisabled ? 'at_disabled' : ''}" id="at-edit-tag-${tag.id}" data-cy="at-edit-tag-${tag.id}" tag-id="${tag.id}" target-pane="${isIoT ? 'at-tag-iot-form-pane' : 'at-tag-form-pane'}"></span>
418
418
  <span class="mdi mdi-content-copy at_copy_tag_btn ${isTagReadOnly ? 'at_disabled' : ''} id="at-edit-tag-${tag.id}"" id="at-copy-tag-${tag.id}" data-cy="at-copy-tag-${tag.id}" tag-id="${tag.id}"></span>
419
419
  <span class="mdi mdi-message at_message_tag_btn ${isIoT ? 'at_hidden' : ''}" id="at-message-tag-${tag.id}" data-cy="at-message-tag-${tag.id}" tag-id="${tag.id}" target-pane="at-tag-messaging-pane"></span>
420
420
  <span class="mdi mdi-map-marker at_locate_tag_btn ${!isIoT ? 'at_hidden' : ''} ${isIotTagReadOnly ? 'at_disabled' : ''}" id="at-relocate-tag-${tag.id}" data-cy="at-relocate-tag-${tag.id}" tag-id="${tag.id}"></span>
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { actionBar, renderObjectCards, renderLibraryCards, renderTags, renderTagRow, getTagFormData, addClickEventToTagRow, setActiveCard, setActiveMenu, removeObjectCard, clearActiveMenu, setTagCategoriesOption, toggleDropdown, tagFormMode, selectedTag, renderRecepientOptions, renderTagMessages, createTagMessage, setTagLink, setTagMessagingDetails, renderCategoryDropdownOptions, clearTagFormDropdown, clearActiveActionBtn, clearActiveCard, toggleActionBarButtons, selectedCategoryFilterId, selectedSubCategoryFilterId, filterTagList, toggleModal, setModalAction, } from "./components/toolbar";
11
- import { getTargetPosition, addMediaScreen, _3DXObjects, selectedObject, setTransformControls, copyObject, revertTransform, clearSelectedObject, removeTransformControls, getLibrary, getMpTags, renderTag, captureSpaceScreenshot, moveTag, subscribeSpaceEvent, setModelVisibility, disposeModel, disposeTag, _tags, _tagCategories, dispatchSpaceEvent, editTagLabel, editTagDescription, setTagMessageRecepients, setTagMessages, setSelectedTagUuid, renderMeetingSidebar, setTagIcon, setObjectTransformation, getSelectedObject, _atwin, isCdnMapDataAvailable, captureScreenshotAndCameraDetails, _mpConfig, cancelModelPlacement, _modelDetails, actionHistory, get3DXObjects, transformHistory, goToModel, themeManager, _partitionNodes, setSpacePartitionNodes, getSpaceId, setFloorBaseHeight, toggleWallVisibility, getChildrenOfModel, toggleFloorVisibility, renderPolygon, getCurrentPolygon, getFloorBaseHeight, setSelectedObject, redoDrawAction, undoDrawAction, setWallBaseHeight, clearWallBaseHeight, clearFloorBaseHeight, isToolbarFeatureEnabled, captureCurrentView, getCurrentFloor, _spaceUsers, setPipeCategories, setPipes, detachTagMedia, getTagDataCollection, setVertexPath, _screenSharingHostUser, toggleVisibilityTag, _tagIotCategoryTypes, getIoTDeviceTagIcons, toggleMeshChildrenVisibility, set3DXObjects, partitionHistory,
11
+ import { getTargetPosition, addMediaScreen, _3DXObjects, selectedObject, setTransformControls, copyObject, revertTransform, clearSelectedObject, removeTransformControls, getLibrary, getMpTags, renderTag, captureSpaceScreenshot, moveTag, subscribeSpaceEvent, setModelVisibility, disposeModel, disposeTag, _tags, _tagCategories, dispatchSpaceEvent, editTagLabel, editTagDescription, setTagMessageRecepients, setTagMessages, setSelectedTagUuid, renderMeetingSidebar, setTagIcon, setObjectTransformation, getSelectedObject, _atwin, isCdnMapDataAvailable, captureScreenshotAndCameraDetails, _mpConfig, cancelModelPlacement, _modelDetails, actionHistory, get3DXObjects, transformHistory, goToModel, themeManager, _partitionNodes, setSpacePartitionNodes, getSpaceId, setFloorBaseHeight, toggleWallVisibility, getChildrenOfModel, toggleFloorVisibility, renderPolygon, getCurrentPolygon, getFloorBaseHeight, setSelectedObject, redoDrawAction, undoDrawAction, setWallBaseHeight, clearWallBaseHeight, clearFloorBaseHeight, isToolbarFeatureEnabled, captureCurrentView, getCurrentFloor, _spaceUsers, setPipeCategories, setPipes, detachTagMedia, getTagDataCollection, setVertexPath, _screenSharingHostUser, toggleVisibilityTag, _tagIotCategoryTypes, getIoTDeviceTagIcons, toggleMeshChildrenVisibility, set3DXObjects, partitionHistory, _thisVertexPath,
12
12
  // polygonHistory
13
13
  } from "../architwin";
14
14
  import { Notyf } from 'notyf';
@@ -26,7 +26,7 @@ import log from 'loglevel';
26
26
  import * as minimap from '../minimap';
27
27
  import { clearActiveThemeCard, getSelectedTheme } from "./components/toolbar/themePane";
28
28
  import { getCurrentEditRoomData, displayRoomTree, updatePartitionVisibilityUI, getSelectedPartitionId, updatePolygonVisibilityData, toggleVisibilityState, setFilteredDisplay, updateRoomVisibilityUI, highlightSelectedPartitionChild, highlightSelectedWindow, getRoomData } from "./components/toolbar/spacePartition/roomTreePane";
29
- import { toggleDrawPartitionButton, displayPartitionFormMode, setPartitionFormMode, clearPartitionForm, setPolygonData, getPartitionFormData, getPartitionSavingMode, setPartitionSavingMode, getPartitionFormMode, getNewlyAddedPartition, setCurrentPartitionData, getCurrentPartitionData, getTempCurrentPolygon, clearTempCurrentPolygon, toggleDrawWindowButton, getIsDrawing, getDrawingMode, getCurrentPolygonData, setTempCurrentRoomEditData, toggleUndoRedoButtons, getCurrentWall, currentWindow } from "./components/toolbar/spacePartition/roomFormPane";
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";
32
32
  import { toggleGeneralMapOptions, initGeneralSelectedMap, getSelectedMapOption } from './components/toolbar/generalSettingsMenuPane';
@@ -40,7 +40,6 @@ import { PipeForm } from "./components/toolbar/pipeFormPane";
40
40
  import { toggleIoTCategoryOptions, toggleIoTDevicesOptions, setSelectedIoTSystemRadio, clearIoTDropdowns, initIoTFormData, setIotCategoryOptions, getIotTagFormData, iotTagFormMode, selectedIotTag, clearIotFields, getIotCategoryOption } from './components/toolbar/tagIotFormPane';
41
41
  import { getTheseTagMessages, timedoutComment, unsendComment } from "./components/toolbar/tagMessagingPane";
42
42
  import { handleScreenShareResponsiveChanges, handleScreenShareAcceptRequest, handleScreenShareBackUserListPane, handleScreenShareEndSessionEvent, handleScreenShareUsersUpdated, renderScreenShareLeaveConfirmationModal } from "./components/toolbar/screenSharePane";
43
- import _ from "lodash";
44
43
  const pipeList = new PipeList();
45
44
  const pipeForm = new PipeForm();
46
45
  let activeToolbarItem, activeActionItem, activePane, activeActionPane, cancelTagPlacementPrompt, cancelModelPlacementPrompt;
@@ -1584,28 +1583,9 @@ function setupSpaceEventSubscriptions() {
1584
1583
  }
1585
1584
  function handleVertexDragEnd(payload) {
1586
1585
  log.info("handleVertexDragEnd()", payload);
1587
- setCurrentPartitionData();
1588
1586
  if (isToolbarFeatureEnabled("roomCreation")) {
1589
- let data;
1590
- const currentPartitionData = _.cloneDeep(getCurrentPartitionData());
1591
- const currentPolygonData = _.cloneDeep(getCurrentPolygonData());
1592
- const currentWall = getCurrentWall();
1593
- const wallIndex = currentPolygonData.walls.findIndex(w => w.uuid == currentWall.uuid);
1594
- if (currentPartitionData) {
1595
- data = {
1596
- polygon: {
1597
- uuid: currentPartitionData.uuid,
1598
- polygon_json: currentPolygonData
1599
- },
1600
- verticePath: currentPolygonData.walls[wallIndex].windows[currentWindow.index].path
1601
- };
1602
- partitionHistory.addToHistory(JSON.parse(JSON.stringify(data)));
1603
- }
1604
- log.info("all history", partitionHistory.getAllHistory());
1587
+ partitionHistory.addToHistory([..._thisVertexPath]);
1605
1588
  }
1606
- // partitionHistory.addToHistory(data)
1607
- // polygonHistory.addToHistory(payload)
1608
- // toggleUndoRedoButtons(polygonHistory.canUndo(), polygonHistory.canRedo())
1609
1589
  }
1610
1590
  function handlePartitionColiderClickSelected(payload) {
1611
1591
  return __awaiter(this, void 0, void 0, function* () {
@@ -1678,6 +1658,9 @@ function handleDragEnd(payload) {
1678
1658
  function handleVertexPlace(payload) {
1679
1659
  console.log("handleVertexPlace ==>", payload);
1680
1660
  if (isToolbarFeatureEnabled('roomCreation')) {
1661
+ if (payload.path.length <= 2) {
1662
+ setPolygonData(undefined);
1663
+ }
1681
1664
  toggleUndoRedoButtons(partitionHistory.canUndo(), partitionHistory.canRedo());
1682
1665
  }
1683
1666
  if (isToolbarFeatureEnabled('pipe')) {
@@ -1685,6 +1668,7 @@ function handleVertexPlace(payload) {
1685
1668
  }
1686
1669
  }
1687
1670
  function handlePathUpdated(payload) {
1671
+ log.info("handlePathUpdated", payload);
1688
1672
  setVertexPath(payload.path);
1689
1673
  handleVertexPlace(payload);
1690
1674
  }
@@ -2551,7 +2535,7 @@ function handleFloorLevelInputChange() {
2551
2535
  notyf.success(`${i18n.t('SuccessBaseHeight')}`);
2552
2536
  const objects = get3DXObjects();
2553
2537
  const latestObj = objects[objects.length - 1];
2554
- const currentPartitionData = getCurrentEditRoomData();
2538
+ const currentPartitionData = getCurrentPartitionData();
2555
2539
  const currentPolygon = getCurrentPolygon();
2556
2540
  log.info("latestObj ", latestObj);
2557
2541
  if (currentPartitionData) {
@@ -2567,7 +2551,7 @@ function handleFloorLevelInputChange() {
2567
2551
  return path;
2568
2552
  });
2569
2553
  renderPolygon(updatedPath);
2570
- notyf.success("Updated the partition's floor level");
2554
+ notyf.success(`${i18n.t('SuccessUpdatedFloorLevel')}`);
2571
2555
  }
2572
2556
  else {
2573
2557
  log.error("No matching uuid for the polygon");
@@ -2582,7 +2566,7 @@ function handleFloorLevelInputChange() {
2582
2566
  return path;
2583
2567
  });
2584
2568
  renderPolygon(updatedPath);
2585
- notyf.success("Updated the partition's floor level");
2569
+ notyf.success(`${i18n.t('SuccessUpdatedFloorLevel')}`);
2586
2570
  }
2587
2571
  else {
2588
2572
  log.warn("currentPartitionData and latestObj value is undefined or its type is not valid");
@@ -2604,7 +2588,7 @@ function handleMarkFloor() {
2604
2588
  });
2605
2589
  yield getTargetPosition((coord) => {
2606
2590
  const objects = get3DXObjects();
2607
- const currentPartitionData = getCurrentEditRoomData();
2591
+ const currentPartitionData = getCurrentPartitionData();
2608
2592
  const currentPolygon = getCurrentPolygon();
2609
2593
  log.info("coord ", coord);
2610
2594
  if (coord.y < -1) {
@@ -2621,6 +2605,7 @@ function handleMarkFloor() {
2621
2605
  partitionsUUIDs = currentPartitionData.children.map(child => child.uuid);
2622
2606
  const target = objects.find(obj => partitionsUUIDs.includes(obj.object.object_data.uuid));
2623
2607
  if (target) {
2608
+ setSelectedObject(target.object, target.node, target.component, target.type);
2624
2609
  const polyJson = target.object.object_data.json_data;
2625
2610
  const updatedPath = polyJson.path.map(path => {
2626
2611
  path.y = adjustedHeight;
@@ -2635,13 +2620,14 @@ function handleMarkFloor() {
2635
2620
  }
2636
2621
  else if (currentPolygon) {
2637
2622
  //setSelectedObject(currentPolygon.object,currentPolygon.node,currentPolygon.component,currentPolygon.type)
2623
+ setSelectedObject(currentPolygon.object, currentPolygon.node, currentPolygon.component, currentPolygon.type);
2638
2624
  const polyJson = currentPolygon.object.object_data.json_data;
2639
2625
  const updatedPath = polyJson.path.map(path => {
2640
2626
  path.y = adjustedHeight;
2641
2627
  return path;
2642
2628
  });
2643
2629
  renderPolygon(updatedPath);
2644
- notyf.success("Updated the partition's floor level");
2630
+ notyf.success(`${i18n.t('SuccessUpdatedFloorLevel')}`);
2645
2631
  }
2646
2632
  else {
2647
2633
  log.warn("currentPolygon is undefined");
@@ -539,10 +539,10 @@ class PlaneVideo {
539
539
  });
540
540
  // socketEmit({socketEvent: IO_SPACE_EVENTS.MEDIA_SCREEN, data: {event: IO_MEDIASCREEN_EVENTS.PAUSE, mediaViewerId: this.inputs.mediaViewerId }})
541
541
  }
542
- else if (this.audio === 'unmuted' && eventData['collider'].name == 'muteBtn') {
542
+ else if (this.audio === 'unmuted' && eventData['collider'].name == 'unmuteBtn') {
543
543
  this.planeElement.muted = true;
544
- this.muteButtonModel.visible = false;
545
- this.unmuteButtonModel.visible = true;
544
+ this.muteButtonModel.visible = true;
545
+ this.unmuteButtonModel.visible = false;
546
546
  this.audio = 'muted';
547
547
  const { duration, currentTime } = getVideoMetadata(this.planeElement);
548
548
  dispatchSpaceEvent(SPACE_EVENTS.MEDIA_MUTE, {
@@ -555,10 +555,10 @@ class PlaneVideo {
555
555
  });
556
556
  // socketEmit({socketEvent: IO_SPACE_EVENTS.MEDIA_SCREEN, data: {event: IO_MEDIASCREEN_EVENTS.MUTE, mediaViewerId: this.inputs.mediaViewerId }})
557
557
  }
558
- else if (this.audio === 'muted' && eventData['collider'].name == 'unmuteBtn') {
558
+ else if (this.audio === 'muted' && eventData['collider'].name == 'muteBtn') {
559
559
  this.planeElement.muted = false;
560
- this.muteButtonModel.visible = true;
561
- this.unmuteButtonModel.visible = false;
560
+ this.muteButtonModel.visible = false;
561
+ this.unmuteButtonModel.visible = true;
562
562
  this.audio = 'unmuted';
563
563
  const { duration, currentTime } = getVideoMetadata(this.planeElement);
564
564
  dispatchSpaceEvent(SPACE_EVENTS.MEDIA_UNMUTE, {
@@ -692,6 +692,7 @@ class PlaneVideo {
692
692
  transparent: true,
693
693
  alphaTest: 0.5
694
694
  }));
695
+ this.muteButtonModel.visible = false;
695
696
  this.muteButtonModel.name = "muteBtn";
696
697
  this.mesh.add(this.muteButtonModel);
697
698
  }
@@ -707,7 +708,6 @@ class PlaneVideo {
707
708
  transparent: true,
708
709
  alphaTest: 0.5
709
710
  }));
710
- this.unmuteButtonModel.visible = false;
711
711
  this.unmuteButtonModel.name = "unmuteBtn";
712
712
  this.mesh.add(this.unmuteButtonModel);
713
713
  }
@@ -63,7 +63,9 @@ export class TubeLine {
63
63
  //this.renderGUI();
64
64
  }
65
65
  if (this.inputs.path.length > 1) {
66
- this.renderTubeLine();
66
+ if (isToolbarFeatureEnabled('pipes')) {
67
+ this.renderTubeLine();
68
+ }
67
69
  }
68
70
  };
69
71
  this.onInputsUpdated = (prevInputs) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "architwin",
3
- "version": "1.16.0",
3
+ "version": "1.16.2",
4
4
  "description": "ArchiTwin Library for Matterport",
5
5
  "main": "./lib/architwin.js",
6
6
  "types": "./lib/architwin.d.ts",