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); }
/// <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; }
/// <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; }
/// <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); } }