tools.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. export class Tools {
  2. public static StoreLocalBooleanSettings(key: string, value: boolean) {
  3. if (typeof (Storage) !== "undefined") {
  4. localStorage.setItem(key, value ? "true" : "false");
  5. }
  6. }
  7. public static ReadLocalBooleanSettings(key: string, defaultValue: boolean): boolean {
  8. if (typeof (Storage) !== "undefined" && localStorage.getItem(key) !== null) {
  9. return localStorage.getItem(key) === "true";
  10. } else {
  11. return defaultValue;
  12. }
  13. }
  14. public static LookForItem(item: any, selectedEntity: any): boolean {
  15. if (item === selectedEntity) {
  16. return true;
  17. }
  18. const children = item.getChildren ? item.getChildren() : item.children;
  19. if (children) {
  20. for (var child of children) {
  21. if (Tools.LookForItem(child, selectedEntity)) {
  22. return true;
  23. }
  24. }
  25. }
  26. return false;
  27. }
  28. private static _RecursiveRemoveHiddenMeshesAndHoistChildren(items: Array<any>) {
  29. let result: Array<any> = [];
  30. for (let i of items) {
  31. // If the mesh is hidden, add it's children that are not hidden, this will handle the case of bounding box parenting for bounding box gizmo
  32. if (i.reservedDataStore && i.reservedDataStore.hidden && i.getChildMeshes) {
  33. Tools._RecursiveRemoveHiddenMeshesAndHoistChildren(i.getChildMeshes()).forEach((m) => {
  34. result.push(m);
  35. });
  36. } else if (!i.reservedDataStore || !i.reservedDataStore.hidden) {
  37. result.push(i);
  38. }
  39. }
  40. return result;
  41. }
  42. public static SortAndFilter(parent: any, items: any[]): any[] {
  43. if (!items) {
  44. return [];
  45. }
  46. const finalArray = Tools._RecursiveRemoveHiddenMeshesAndHoistChildren(items);
  47. if (parent && parent.reservedDataStore && parent.reservedDataStore.detachedChildren) {
  48. finalArray.push(...parent.reservedDataStore.detachedChildren);
  49. }
  50. return finalArray.sort((a: any, b: any) => {
  51. const lowerCaseA = (a.name || "").toLowerCase();
  52. const lowerCaseB = (b.name || "").toLowerCase();
  53. if (lowerCaseA === lowerCaseB) {
  54. return 0;
  55. }
  56. if (lowerCaseA > lowerCaseB) {
  57. return 1;
  58. }
  59. return -1;
  60. });
  61. }
  62. }