public void AddDimension(string dimensionName, float minVal, float maxVal)
        {
            var dataArray = GetDefaultArray();

            dimenstionDataArrays.Add(dataArray);
            lastIndices.Add(0);

            //what are categories?
            var metaData = new DimensionData.Metadata();

            metaData.minValue = minVal;
            metaData.maxValue = maxVal;
            metaData.type     = DataType.Float; //maybe make that adjustable
            int newIndex = dimensionData.Count;

            //for testing
            if (!textualDimensionsList.ContainsKey(dimensionName))
            {
                textualDimensionsList.Add(dimensionName, new Dictionary <int, string>());
                textualDimensionsListReverse.Add(dimensionName, new Dictionary <string, int>());
            }

            var dd = new DimensionData(dimensionName, newIndex, metaData);

            dd.setData(dataArray, textualDimensionsList);
            dimensionData.Add(dd);
            //dataCount += dimensionSizeLimit;
            dataCount = dimensionSizeLimit;
            Debug.Log("AddDimension => " + dd.Identifier + ", " + dd.Index);
        }
        //This important for extern bindinds which might not support
        //operator overloading or runtime reflection resolution
        public bool AddDataByStr(string dimensionName, float val)
        {
            var dirty = false;

            try
            {
                var dd = this[dimensionName];
                if (dd != null)
                {
                    var index     = dd.Index;
                    var nextIndex = GetNextIndexForDimensionAndInc(index);
                    if (nextIndex >= 0)
                    {
                        //data shift
                        for (var i = dimensionSizeLimit - 1; i >= 1; i--)
                        {
                            dd.Data[i] = dd.Data[i - 1];
                        }

                        var minV = dd.MetaData.minValue;
                        var maxV = dd.MetaData.minValue;
                        if (dd.MetaData.minValue > val)
                        {
                            minV  = val;
                            dirty = true;
                        }

                        if (dd.MetaData.maxValue < val)
                        {
                            maxV  = val;
                            dirty = true;
                        }

                        if (dirty)
                        {
                            var metaData = new DimensionData.Metadata();
                            metaData.minValue = minV;
                            metaData.maxValue = maxV;
                            metaData.type     = DataType.Float; //maybe make that adjustable
                            dd.setMetadata(metaData);
                        }

                        if (dd.Data.Length > nextIndex && nextIndex >= 0)
                        {
                            dd.Data[nextIndex] = normaliseValue(val, dd.MetaData.minValue, dd.MetaData.maxValue, 0f, 1f);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Debug.Log("AddDataByStr ERROR => " + e);
            }
            return(dirty);
        }
Beispiel #3
0
        /// <summary>
        /// Returns the orginal value from the data dimension range
        /// </summary>
        /// <param name="normalisedValue"></param>
        /// <param name="identifier"></param>
        /// <returns></returns>
        public override object getOriginalValuePrecise(float normalisedValue, string identifier)
        {
            DimensionData.Metadata meta = this[identifier].MetaData;

            float normValue = normaliseValue(normalisedValue, 0f, 1f, meta.minValue, meta.maxValue);

            if (meta.type == DataType.String)
            {
                return textualDimensionsList[this[identifier].Identifier][(int)normValue];
            }
            else return normValue;
        }
Beispiel #4
0
        /// <summary>
        /// Returns the orginal value from the data dimension range
        /// </summary>
        /// <param name="normalisedValue"></param>
        /// <param name="identifier"></param>
        /// <returns></returns>
        public override object getOriginalValue(float normalisedValue, string identifier)
        {
            DimensionData.Metadata meta = this[identifier].MetaData;

            float normValue = normaliseValue(normalisedValue, 0f, 1f, meta.minValue, meta.maxValue);

            if (meta.type == DataType.String)
            {
                normValue = normaliseValue(valueClosestTo(this[identifier].Data, normalisedValue), 0f, 1f, meta.minValue, meta.maxValue);
                return textualDimensionsList[identifier][(int)Mathf.Round(normValue)]; // textualDimensions[(int)normValue];
            }
            else return normValue;
        }
Beispiel #5
0
        /// <summary>
        /// Loads the header impl.
        /// </summary>
        /// <returns><c>true</c>, if header was loaded, <c>false</c> otherwise.</returns>
        private bool loadHeaderImpl(string[] lines)
        {
            //1: read types
            if (lines.Length > 0)
            {
                string[] identifiers = lines[0].Split(split);

                // create metadata
                DimensionData.Metadata[] metadata = new DimensionData.Metadata[identifiers.Count()];

                //clean identifiers strings
                for (int i = 0; i < identifiers.Length; i++)
                {
                    string id = identifiers[i].Replace("\r", string.Empty);
                    identifiers[i] = id;
                }
                int nbDimensions = identifiers.Length;

                if (lines.Length > 1)
                {
                    string[] typesToRead = lines[1].Split(split);

                    //type reading
                    for (int i = 0; i < typesToRead.Length; i++)
                    {
                        if (i < metadata.Length)
                        {
                            metadata[i].type = DataTypeExtension.inferFromString(cleanDataString(typesToRead[i]));
                        }
                        else
                        {
                            Debug.Log("CSVDataSource: More data in a row than dimensions in header!");
                        }
                    }
                }

                // Populate data structure
                for (int i = 0; i < nbDimensions; ++i)
                {
                    dimensionData.Add(new DimensionData(identifiers[i], i, metadata[i]));
                }

                return true;
            }

            return false;
        }
        public void AddStringDimension(string dimensionName)
        {
            if (!textualDimensionsList.ContainsKey(dimensionName))
            {
                textualDimensionsList.Add(dimensionName, new Dictionary <int, string>());
                textualDimensionsListReverse.Add(dimensionName, new Dictionary <string, int>());

                var metaData = new DimensionData.Metadata();
                metaData.type     = DataType.String; //maybe make that adjustable
                metaData.minValue = 0;
                metaData.maxValue = dimensionSizeLimit;
                int newIndex = dimensionData.Count;

                var dataArray = GetDefaultArray();
                dimenstionDataArrays.Add(dataArray);
                lastIndices.Add(0);

                var dd = new DimensionData(dimensionName, newIndex, metaData);
                dd.setData(dataArray, textualDimensionsList);
                dimensionData.Add(dd);
                dataCount = dimensionSizeLimit;
                Debug.Log("AddDimension => " + dd.Identifier + ", " + dd.Index);
            }
        }