/// <summary> /// Отрисовать время /// </summary> /// <param name="drawter">Область на которой осуществляется отрисовка</param> protected void DrawTimeValues(GraphicDrawter drawter) { if (parent != null) { DateTime now = StartTime; SolidBrush brush = new SolidBrush(Color.Black); PointF pt = point; pt.X += 3; float countLinesInGrig = size.Height / parent.GridHeight; float koef = size.Height / countLinesInGrig; for (int i = 0; i <= (int)countLinesInGrig; i++) { if (i == (int)countLinesInGrig) { drawter.Graphics.DrawString(now.ToLongTimeString(), font, brush, pt); } else { drawter.Graphics.DrawString(now.ToLongTimeString(), font, brush, pt); now = now.Add(parent.IntervalInCell); pt.Y += koef; } } parent.FinishTime = now; } }
/// <summary> /// Отрисовать время /// </summary> /// <param name="drawter">Область на которой осуществляется отрисовка</param> protected void DrawTimeValues(GraphicDrawter drawter) { if (parent != null) { DateTime now = StartTime; SolidBrush brush = new SolidBrush(Color.Black); PointF pt = point; pt.X += 3; Panel panel = parent as Panel; if (panel != null) { float countLinesInGrig = size.Height / parent.GridHeight; float koef = size.Height / countLinesInGrig; for (int i = 0; i <= (int)countLinesInGrig; i++) { if (i == (int)countLinesInGrig) { drawter.Graphics.DrawString(now.ToLongTimeString(), font, brush, pt); } else { drawter.Graphics.DrawString(now.ToLongTimeString(), font, brush, pt); now = now.Add(parent.IntervalInCell); pt.Y += koef; } } float fCount = panel.RectangleGraphics.Height / panel.GridHeight; parent.FinishTime = new DateTime(StartTime.Ticks + (long)(fCount * parent.IntervalInCell.Ticks)); // поправит старттайм } } }
/// <summary> /// Область вывода изменила размер /// </summary> /// <param name="sender">Источник события</param> /// <param name="e">Параметры события</param> private void sheet_Resize(object sender, EventArgs e) { bool blocked = false; try { if (drawMutex.WaitOne(300)) { blocked = true; if (sheet != null) { if (sheet.Size.IsEmpty == false) { // общий графический объект на всю область вывода drawter = new GraphicDrawter(sheet.CreateGraphics(), sheet.ClientRectangle); if (Orientation == Orientation.Horizontal) { drawter.Graphics.RotateTransform(270.0f); drawter.Graphics.TranslateTransform(-sheet.ClientRectangle.Height, 0); } InitializePanel(); sheet.Invalidate(); } } } } finally { if (blocked) { drawMutex.ReleaseMutex(); } } }
/// <summary> /// Восстановить оюласть осечения для страницы /// </summary> /// <param name="drawter">Область на которой осуществляется отрисовка</param> protected void RestoreRegion(GraphicDrawter drawter) { try { drawter.Graphics.Clip = based; self.Dispose(); based.Dispose(); } catch { } }
/// <summary> /// Инициализировать регион отсечения для страницы /// </summary> /// <param name="drawter">Область на которой осуществляется отрисовка</param> protected void InitializeRegion(GraphicDrawter drawter) { RectangleF rect = RectangleF.Empty; try { based = drawter.Graphics.Clip; rect = new RectangleF(point, size); self = new Region(rect); drawter.Graphics.Clip = self; } catch { } }
/// <summary> /// Инициализировать регион отсечения для страницы /// </summary> /// <param name="drawter">Область на которой осуществляется отрисовка</param> protected void InitializeRegion(GraphicDrawter drawter) { RectangleF rect = RectangleF.Empty; try { based = drawter.Graphics.Clip; rect = new RectangleF(point.X - 2, point.Y - 1, size.Width + 6, size.Height + 3); self = new Region(rect); drawter.Graphics.Clip = self; } finally { } }
/// <summary> /// Отрисовать панель /// </summary> protected void Paint() { if (parent != null) { GraphicDrawter drawter = parent.Drawter; if (drawter != null) { InitializeRegion(drawter); // ---- выполняем отрисовку ---- drawter.Graphics.Clear(color); DrawGraphics(); // ----------------------------- RestoreRegion(drawter); } } }
/// <summary> /// Инициализировать регион отсечения для страницы /// </summary> /// <param name="drawter">Область на которой осуществляется отрисовка</param> protected void InitializeRegion(GraphicDrawter drawter) { Matrix matrix = null; RectangleF rect = RectangleF.Empty; try { based = drawter.Graphics.Clip; rect = new RectangleF(point, size); self = new Region(rect); drawter.Graphics.Clip = self; } finally { if (matrix != null) { matrix.Dispose(); } } }
/// <summary> /// Отрисовать панель /// </summary> protected void PaintTimer(DateTime currentTime) { if (parent != null) { GraphicDrawter drawter = parent.Drawter; if (drawter != null) { InitializeRegion(drawter); // ---- выполняем отрисовку ---- //drawter.Graphics.Clear(SystemColors.Control); // очистить область вывода графиков //DrawAreaRectangle(); DrawAreaGridTimer(currentTime); DrawGraphicsTimer(currentTime); // ----------------------------- RestoreRegion(drawter); } } }
/// <summary> /// Инициализирует новый экземпляр класса /// </summary> /// <param name="_sheet"></param> public Panel(GraphicsSheet _sheet) { try { bufRect = RectangleF.Empty; drawMutex = new Mutex(); locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); graphics = new List <Graphic>(); g_locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); if (_sheet != null) { sheet = _sheet; sheet.Resize += new EventHandler(sheet_Resize); sheet.Paint += new PaintEventHandler(sheet_Paint); interval = new TimeSpan(0, 3, 0); // интервал времени в одной клетке drawter = new GraphicDrawter(sheet.CreateGraphics(), sheet.ClientRectangle); panels = new List <IElement>(); panels.Add(CreateTimePanel()); panels.Add(CreateScalePanel()); panels.Add(CreateGraphicsPanel()); orientation = Orientation.Vertical; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Инициализировать регион отсечения для страницы /// </summary> /// <param name="drawter">Область на которой осуществляется отрисовка</param> protected void InitializeRegion(GraphicDrawter drawter) { Matrix matrix = null; RectangleF rect = RectangleF.Empty; try { based = drawter.Graphics.Clip; rect = new RectangleF(point, size); self = new Region(rect); drawter.Graphics.Clip = self; } finally { if (matrix != null) matrix.Dispose(); } }
/// <summary> /// Область вывода изменила размер /// </summary> /// <param name="sender">Источник события</param> /// <param name="e">Параметры события</param> private void sheet_Resize(object sender, EventArgs e) { bool blocked = false; try { if (drawMutex.WaitOne(300)) { blocked = true; if (sheet != null) { if (sheet.Size.IsEmpty == false) { // общий графический объект на всю область вывода drawter = new GraphicDrawter(sheet.CreateGraphics(), sheet.ClientRectangle); if (Orientation == Orientation.Horizontal) { drawter.Graphics.RotateTransform(270.0f); drawter.Graphics.TranslateTransform(-sheet.ClientRectangle.Height, 0); } InitializePanel(); sheet.Invalidate(); } } } } finally { if (blocked) drawMutex.ReleaseMutex(); } }
protected SizeF timeSizeF; // размер области в которую выводится метка времени #endregion Fields #region Constructors /// <summary> /// Инициализирует новый экземпляр класса /// </summary> /// <param name="_sheet"></param> public Panel(GraphicsSheet _sheet) { try { bufRect = RectangleF.Empty; drawMutex = new Mutex(); locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); graphics = new List<Graphic>(); g_locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); if (_sheet != null) { sheet = _sheet; sheet.Resize += new EventHandler(sheet_Resize); sheet.Paint += new PaintEventHandler(sheet_Paint); interval = new TimeSpan(0, 0, 10); // интервал времени в одной клетке drawter = new GraphicDrawter(sheet.CreateGraphics(), sheet.ClientRectangle); panels = new List<IElement>(); panels.Add(CreateTimePanel()); panels.Add(CreateScalePanel()); panels.Add(CreateGraphicsPanel()); orientation = Orientation.Vertical; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }