/// <summary> /// ラベル系列からデータを作成します /// </summary> /// <param name="labelSequence">ラベル系列</param> /// <param name="title">このデータに与えるタイトル</param> /// <param name="colorPalette">ラベル名からラベルの色を生成するディクショナリ</param> /// <returns></returns> public static SequenceData FromLabelSequence(ICSLabelSequence labelSequence, string title, IDictionary <string, Color> colorPalette) { if (labelSequence == null) { throw new ArgumentNullException("labelSequence", "'labelSequence' cannot be null"); } TimeSeriesValues newSeqeunce = new TimeSeriesValues(title); LabelingBorders newBorder = new LabelingBorders(); foreach (var label in labelSequence.EnumerateLabels()) { newSeqeunce[label.BeginTime] = new decimal?[] { label.BeginTime }; newBorder.SetBorder(label.BeginTime, label.LabelText); } newSeqeunce[labelSequence.Duration] = new decimal?[] { labelSequence.Duration }; newBorder.SetBorder(labelSequence.Duration, newBorder.DefaultName); if (colorPalette != null) { foreach (var pair in colorPalette) { newBorder.SetColor(pair.Key, pair.Value); } } SequenceData ret = new SequenceData(newSeqeunce, newBorder, title); ret.Type = SequenceType.Label; return(ret); }
/// <summary> /// ラベル系列を返します. /// </summary> /// <returns></returns> public ICSLabelSequence GetLabelSequence() { if (this.IsDisposed) { throw new ObjectDisposedException(this.GetType().ToString()); } using (this.Lock.GetReadLock()) { if (this.Values.ColumnCount == 0) { return(new ICSLabelSequence()); } if (this.Borders.TargetColumnIndex >= this.Values.ColumnCount) { this.Borders.TargetColumnIndex = this.Values.ColumnCount - 1; } decimal span = this.Values.EndTime; if (span <= 0) { span = 1; } ICSLabelSequence ret = new ICSLabelSequence(span); string preLabel = null; int prevBorderIndex = -1; foreach (var pair in this.Values.Enumerate()) { decimal?value = pair.Value[this.Borders.TargetColumnIndex]; int borderIndex; if (value.HasValue) { borderIndex = this.Borders.GetIndexFromValue(value.Value); } else { borderIndex = -1; } string label = this.Borders.GetLabelByValue(value); if (prevBorderIndex != borderIndex) { if (pair.Key < span) { ret.SetLabel(pair.Key, span, label); } preLabel = label; } prevBorderIndex = borderIndex; } return(ret); } }
/// <summary> /// ラベル系列からデータを作成します /// </summary> /// <param name="labelSequence">ラベル系列</param> /// <param name="title">このデータに与えるタイトル</param> /// <returns></returns> public static SequenceData FromLabelSequence(ICSLabelSequence labelSequence, string title) { return(FromLabelSequence(labelSequence, title, null)); }