tools.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. export class Tools {
  2. public static LookForItem(item: any, selectedEntity: any): boolean {
  3. if (item === selectedEntity) {
  4. return true;
  5. }
  6. const children = item.getChildren ? item.getChildren() : item.children;
  7. if (children) {
  8. for (var child of children) {
  9. if (Tools.LookForItem(child, selectedEntity)) {
  10. return true;
  11. }
  12. }
  13. }
  14. return false;
  15. }
  16. private static _RecursiveRemoveHiddenMeshesAndHoistChildren(items: Array<any>) {
  17. let result: Array<any> = [];
  18. for (let i of items) {
  19. // 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
  20. if (i.reservedDataStore && i.reservedDataStore.hidden && i.getChildMeshes) {
  21. Tools._RecursiveRemoveHiddenMeshesAndHoistChildren(i.getChildMeshes()).forEach((m) => {
  22. result.push(m);
  23. });
  24. } else {
  25. result.push(i);
  26. }
  27. }
  28. return result;
  29. }
  30. public static SortAndFilter(parent: any, items: any[]): any[] {
  31. if (!items) {
  32. return [];
  33. }
  34. const finalArray = Tools._RecursiveRemoveHiddenMeshesAndHoistChildren(items);
  35. if (parent && parent.reservedDataStore && parent.reservedDataStore.detachedChildren) {
  36. finalArray.push(...parent.reservedDataStore.detachedChildren);
  37. }
  38. return finalArray.sort((a: any, b: any) => {
  39. const lowerCaseA = (a.name || "").toLowerCase();
  40. const lowerCaseB = (b.name || "").toLowerCase();
  41. if (lowerCaseA === lowerCaseB) {
  42. return 0;
  43. }
  44. if (lowerCaseA > lowerCaseB) {
  45. return 1;
  46. }
  47. return -1;
  48. });
  49. }
  50. }