private bool MatchesSearchTerm(WidgetMetadata item) { bool matchesName = item.Name != null && item.Name.ToLower().Contains(SearchTerm.ToLower()); bool matchesTag = item.Tags != null &&item.Tags.Any(s => s != null && s.ToLower().Contains(SearchTerm.ToLower())); return matchesName || matchesTag; }
public static TiltModels75[] GetTiltModels(GroupIdMapping groupIdMapping) { var widgets = WidgetManager.m_Instance.ModelWidgets.Where(w => w.gameObject.activeSelf).ToArray(); if (widgets.Length == 0 && !ModelCatalog.m_Instance.MissingModels.Any()) { return(null); } var widgetModels = widgets.Select(w => w.Model).Distinct(); Dictionary <Model.Location, List <WidgetMetadata> > modelLocationMap = new Dictionary <Model.Location, List <WidgetMetadata> >(); foreach (var model in widgetModels) { modelLocationMap[model.GetLocation()] = new List <WidgetMetadata>(); } foreach (var widget in widgets) { WidgetMetadata newEntry = new WidgetMetadata(); newEntry.xf = widget.GetSaveTransform(); newEntry.pinned = widget.Pinned; newEntry.groupId = groupIdMapping.GetId(widget.Group); modelLocationMap[widget.Model.GetLocation()].Add(newEntry); } List <TiltModels75> models = new List <TiltModels75>(); foreach (var elem in modelLocationMap) { var val = new TiltModels75 { Location = elem.Key, }; // Order and align the metadata. WidgetMetadata[] ordered = elem.Value.OrderBy(ByTranslation).ToArray(); val.PinStates = new bool[ordered.Length]; val.RawTransforms = new TrTransform[ordered.Length]; val.GroupIds = new uint[ordered.Length]; for (int i = 0; i < ordered.Length; ++i) { val.PinStates[i] = ordered[i].pinned; val.RawTransforms[i] = ordered[i].xf; val.GroupIds[i] = ordered[i].groupId; } models.Add(val); } return(models .Concat(ModelCatalog.m_Instance.MissingModels) .OrderBy(ByModelLocation).ToArray()); }
private static float ByTranslation(WidgetMetadata meta) { return(Vector3.Dot(meta.xf.translation, new Vector3(256 * 256, 256, 1))); }
public static TiltImages75[] GetTiltImages(GroupIdMapping groupIdMapping) { var imports = WidgetManager.m_Instance.ImageWidgets .Where(w => w.gameObject.activeSelf).ToArray(); if (imports.Length == 0) { return(null); } // From the list of image widgets in the sketch, create a map that contains a unique // entry per image, with associated metadata (transform and pin state) stored as arrays. Dictionary <string, List <WidgetMetadata> > imagesByFileName = new Dictionary <string, List <WidgetMetadata> >(); Dictionary <string, float> aspectRatios = new Dictionary <string, float>(); foreach (var image in imports) { string fileName = image.FileName; if (image.AspectRatio == null) { Debug.LogError("Trying to save partially-initialized image {fileName}"); } if (!imagesByFileName.ContainsKey(fileName)) { imagesByFileName[fileName] = new List <WidgetMetadata>(); aspectRatios[fileName] = image.AspectRatio ?? 1; } WidgetMetadata newEntry = new WidgetMetadata(); newEntry.xf = image.SaveTransform; newEntry.pinned = image.Pinned; newEntry.tinted = image.UseLegacyTint; newEntry.groupId = groupIdMapping.GetId(image.Group); imagesByFileName[fileName].Add(newEntry); } // Build the save metadata from our unique map. List <TiltImages75> imageIndex = new List <TiltImages75>(); foreach (var elem in imagesByFileName) { var val = new TiltImages75 { FileName = elem.Key, AspectRatio = aspectRatios[elem.Key] }; // Order and align the metadata. WidgetMetadata[] ordered = elem.Value.OrderBy(ByTranslation).ToArray(); val.PinStates = new bool[ordered.Length]; val.TintStates = new bool[ordered.Length]; val.Transforms = new TrTransform[ordered.Length]; val.GroupIds = new uint[ordered.Length]; for (int i = 0; i < ordered.Length; ++i) { val.PinStates[i] = ordered[i].pinned; val.TintStates[i] = ordered[i].tinted; val.Transforms[i] = ordered[i].xf; val.GroupIds[i] = ordered[i].groupId; } imageIndex.Add(val); } return(imageIndex.OrderBy(i => i.FileName).ToArray()); }