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;
        }
Exemple #2
0
        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());
        }
Exemple #3
0
 private static float ByTranslation(WidgetMetadata meta)
 {
     return(Vector3.Dot(meta.xf.translation, new Vector3(256 * 256, 256, 1)));
 }
Exemple #4
0
        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());
        }