public FormPeriodVisualProp(PeriodVisual source) { this.VisualSource = source; InitializeComponent(); this.TBBeg.Text = VisualSource.Source.Beg.ToString(); this.TBPer.Text = VisualSource.Source.Per.ToString(); this.TBN.Text = VisualSource.Source.N; foreach (Change ch in VisualSource.Source.Changes) Changes.Add(ch.Copy()); }
public override void Redraw() { int i, j, BeginTakt = wnd.BeginTakt, EndTakt = wnd.EndTakt; Sig = Signal;// getDrawChanges(wnd.TaktCount, BeginTakt, EndTakt); ChPrev = Sig.Changes[0]; Canvas Can = CanLine; int TTakt = Project.TTakt; int TaktsDraw = EndTakt - BeginTakt + 1; int TimeWidth = TaktsDraw * Project.TTakt; CanWidth = (Can.Parent as TreeViewItem).ActualWidth; if (CanWidth <= 0) CanWidth = wnd.LBSigCans.ActualWidth; double TaktWidth = CanWidth * 1.0 / TaktsDraw * 1.0; double pixK = CanWidth * 1.0 / TimeWidth * 1.0; double timeK = TimeWidth * 1.0 / CanWidth * 1.0; int LineHeight = Settings.LineHeight; for (i = 0; i < PChangesGens.Count; i++) { Can.Children.Remove(PChangesGens[i]); } //Can.Children.Clear(); PChangesGens.Clear(); foreach (PeriodVisual pv in PeriodVisuals) { wnd.GSVSignals.Children.Remove(pv.Can); } PeriodVisuals.Clear(); //Change ChCurrent; int CurrentVal = ChPrev.Value; double CurrentX = 0; Polyline PLine; PeriodVisual Pv; foreach (Period p in Signal.Periods) { Pv = new PeriodVisual(p, Parent, wnd); Pv.Redraw(); PeriodVisuals.Add(Pv); } int GEN_DRAW_TYPE = (Gen.Type == Generator.RZ) ? Generator.R0 : Gen.Type; // заменяет тип RZ на R0 (для упрощения switch) switch (GEN_DRAW_TYPE) { case Generator.DNRZ: for (i=0; i<Sig.Changes.Count; i++) { PLine = new Polyline(); PLine.StrokeThickness = (isSelected) ? Settings.SelectedThickness : Settings.SignalThickness; PLine.Stroke = Sig.ChangeBrushes[CurrentVal]; PLine.Points.Add(new Point { X = CurrentX - 1, Y = Change.GetHeightDelta(CurrentVal, LineHeight) }); CurrentX = (Sig.Changes[i].Takt - BeginTakt) * TaktWidth; if (CurrentX < 0) CurrentX = 0; PLine.Points.Add(new Point { X = CurrentX, Y = Change.GetHeightDelta(CurrentVal, LineHeight) }); CurrentVal = Sig.Changes[i].Value; PLine.Points.Add(new Point { X = CurrentX, Y = Change.GetHeightDelta(CurrentVal, LineHeight) }); PChangesGens.Add(PLine); } PLine = new Polyline(); PLine.StrokeThickness = (isSelected) ? Settings.SelectedThickness : Settings.SignalThickness; PLine.Stroke = Sig.ChangeBrushes[CurrentVal]; PLine.Points.Add(new Point { X = CurrentX, Y = Change.GetHeightDelta(CurrentVal, LineHeight) }); PLine.Points.Add(new Point { X = CanWidth, Y = Change.GetHeightDelta(CurrentVal, LineHeight) }); PChangesGens.Add(PLine); foreach (Polyline P in PChangesGens) Can.Children.Add(P); return; case Generator.NRZ: return; case Generator.R0: return; case Generator.R1: return; } }