340 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			340 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.ComponentModel;
 | |
| using System.Collections.Generic;
 | |
| using System.Diagnostics;
 | |
| using System.Text;
 | |
| using System.Drawing;
 | |
| 
 | |
| namespace TrendCtrlII
 | |
| {
 | |
|     [TypeConverterAttribute(typeof(ExpandableObjectConverter))]
 | |
|     public class ChartStyle
 | |
|     {
 | |
| 
 | |
|         //X축의 원본 값
 | |
|         private Int64 _X1;
 | |
|         private Int64 _X2;
 | |
| 
 | |
|         //실제화면에 표시되는 데이터
 | |
|         private Int64 _XV1;
 | |
|         private Int64 _XV2;
 | |
| 
 | |
|         //실제화면에 표시되는 데이터의 원본값
 | |
|         public Int64 XV1o;
 | |
|         public Int64 XV2o;
 | |
| 
 | |
|         //Y축의 원본값
 | |
|         private Single _Y1;
 | |
|         private Single _Y2;
 | |
| 
 | |
|         //실제화면에 표시되는 데이터
 | |
|         private Single _YV1 = 1;
 | |
|         private Single _YV2 = 3;
 | |
| 
 | |
|         //실제화면에 표시되는 데이터의 원본값
 | |
|         public Single YV1o = 1;
 | |
|         public Single YV2o = 3;
 | |
| 
 | |
|         //
 | |
|         private Boolean _datapoint = false;
 | |
| 
 | |
|         private Font _yfont = new Font("나눔고딕", 12, FontStyle.Bold);
 | |
|         public int _ZoneMarginX = 50;
 | |
|         public int _ZoneMarginY = 50;
 | |
| 
 | |
|         //public Color design_backcolor = Color.White;
 | |
|         public Color design_mouseinfocolor = Color.Black;
 | |
| 
 | |
|        // public int _xterm = 1800;
 | |
|         private Font _xfont = new Font("나눔고딕", 8, FontStyle.Bold);
 | |
| 
 | |
|         public Font _mouseinfofont = new Font("나눔고딕", 12, FontStyle.Bold);
 | |
|         private Boolean showdebug = false;
 | |
|        // private short defaultviewhour = 3;
 | |
| 
 | |
|         public event OnUpdateinfoHandler OnUpdateinfo; //UPDATE USER CURSOR
 | |
|         public delegate void OnUpdateinfoHandler();
 | |
| 
 | |
|         public Boolean UseZoomX { get; set; }
 | |
|         public Boolean UseZoomY { get; set; }
 | |
| 
 | |
|         public UInt16 MaxZoomX { get; set; }
 | |
|         public Single MaxZoomY { get; set; }
 | |
| 
 | |
|         public String UnitY { get; set; }
 | |
|         public String UnitX { get; set; }
 | |
| 
 | |
|         public ChartStyle()
 | |
|         {
 | |
|             MaxZoomX = 10;
 | |
|             MaxZoomY = 0.01f;
 | |
|             UseZoomX = true;
 | |
|             UseZoomY = true;
 | |
|             UnitY = "Volt";
 | |
|             UnitX = "Sec";
 | |
|             X표시범위 = 0;  //기본전체표시모드로 전환
 | |
|             XGap = 0; //기본 X축 표시간격은 자동으로
 | |
|             YGap = 0;   //기본 Y축 표시간격은 자동으로
 | |
|         }
 | |
| 
 | |
| 
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("X축(시간)"), Description("X축에 표시되는 시간의 표시간격 (0은 자동)")]
 | |
|         public int XGap { get; set; }
 | |
| 
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축"), Description("Y축에 표시되는 표시간격 (0은 자동)")]
 | |
|         public Single YGap { get; set; }
 | |
| 
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 표시간격을 입력하세요.")]
 | |
|         public Font FontY
 | |
|         {
 | |
|             get { return _yfont; }
 | |
|             set
 | |
|             {
 | |
|                 _yfont = value;
 | |
|                 if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("X축(시간)"), Description("가로축에 표시되는 글꼴을 선택하세요.")]
 | |
|         public Font FontX
 | |
|         {
 | |
|             get { return _xfont; }
 | |
|             set
 | |
|             {
 | |
|                 _xfont = value;
 | |
|                 if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private Int32 _xterm = 0;
 | |
|         
 | |
|         /// <summary>
 | |
|         /// X축의 표시범위값(초) 지정된 시간(초)의 데이터만 화면에 표시됩니다. 이 값이 0일 경우 제한이 없음이 되며 만약 이 값이 설정되어있다면 실시간모드처럼 작동하게 됩니다.
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("조회"), Description("X축의 표시범위값(초) 지정된 시간(초)의 데이터만 화면에 표시됩니다. 이 값이 0일 경우 제한이 없음이 되며 만약 이 값이 설정되어있다면 실시간모드처럼 작동하게 됩니다.")]
 | |
|         public Int32 X표시범위 {
 | |
|             get { return _xterm; }
 | |
|             set {
 | |
|                 _xterm = value;
 | |
|                 
 | |
|                 //현재 영역을 확인하고 넘는다면 앞부분을 자른다.
 | |
| 
 | |
|                 if(value != 0 )
 | |
|                 {
 | |
|                     TimeSpan ts = DateTime.FromFileTime(X2) - DateTime.FromFileTime(X1);
 | |
|                     if (ts.TotalSeconds > value) {
 | |
|                         DateTime NewEd = DateTime.FromFileTime(X2);
 | |
|                         DateTime NewSd = NewEd.AddSeconds(-1 * value);
 | |
|                         
 | |
|                         if (NewSd > DateTime.Now)
 | |
|                         {
 | |
|                             NewSd = DateTime.Now;
 | |
|                             NewEd = NewSd.AddSeconds(value);
 | |
|                         } 
 | |
|                         X1 = NewSd.ToFileTime();
 | |
|                         X2 = NewEd.ToFileTime();                        
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("기타"), Description("데이터포인터를 표시합니다.")]
 | |
|         public Boolean Show_DataPoint {
 | |
|             get { return _datapoint; }
 | |
|             set { _datapoint = value;
 | |
|             if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("개발자정보"), Description("Debug Message")]
 | |
|         public Boolean Show_DebugMsg
 | |
|         {
 | |
|             get { return this.showdebug; }
 | |
|             set { this.showdebug = value;
 | |
|             if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("마우스정보"), Description("마우스정보를 표시하는 창의 글자색")]
 | |
|         public Color 마우스글자색
 | |
|         {
 | |
|             get { return design_mouseinfocolor; }
 | |
|             set { design_mouseinfocolor = value;
 | |
|             if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("마우스정보"), Description("마우스정보를 표시하는 창의 글꼴")]
 | |
|         public Font 마우스글꼴
 | |
|         {
 | |
|             get { return _mouseinfofont; }
 | |
|             set { _mouseinfofont = value;
 | |
|             if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Y축값을 표시영역을 최초의 값으로 변경합니다.
 | |
|         /// </summary>
 | |
|         public void ResetYxis()
 | |
|         {
 | |
|             YV1 = Y1;
 | |
|             YV2 = Y2;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// X축값의 표시영역을 최초의 값으로 변경합니다.
 | |
|         /// </summary>
 | |
|         public void ResetXxis()
 | |
|         {
 | |
|             XV1 = X1;
 | |
|             XV2 = X2;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 가로축의 종료값(현재 표시되는 값은 XV2를 참고하세요)
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 최대값을 입력하세요.")]
 | |
|         public Int64 X2
 | |
|         {
 | |
|             get { return _X2; }
 | |
|             set
 | |
|             {
 | |
|                 _X2 = value;
 | |
|                 _XV2 = value;
 | |
|                 XV2o = value;
 | |
|                 if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 가로축의시작값(현재 표시되는 값은 XV1을 참고하세요)
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 최소값을 입력하세요.")]
 | |
|         public Int64 X1
 | |
|         {
 | |
|             get { return _X1; }
 | |
|             set
 | |
|             {
 | |
|                 _X1 = value;
 | |
|                 _XV1 = value;
 | |
|                 XV1o = value;
 | |
|                 if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 현재 표시되는 가로축의 시작값입니다.
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 최소값을 입력하세요.")]
 | |
|         public Int64 XV1
 | |
|         {
 | |
|             get { return _XV1; }
 | |
|             set
 | |
|             {
 | |
|                 //뷰값의 한계치 체크
 | |
|                 if (value < X1) _XV1 = X1;
 | |
|                 else if (value >= XV2 && XV2 > 0) _XV1 = DateTime.FromFileTime(XV2).AddSeconds(-1).ToFileTime();
 | |
|                 else _XV1 = value;
 | |
|                 XV1o = _XV1;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 현재 표시되는 가로축의 종료값입니다.
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 최소값을 입력하세요.")]
 | |
|         public Int64 XV2
 | |
|         {
 | |
|             get { return _XV2; }
 | |
|             set
 | |
|             {
 | |
|                 //뷰값의 한계치 체크
 | |
|                 if (value > X2) _XV2 = X2;
 | |
|                 else if (value <= XV1 && XV1 > 0) _XV2 = DateTime.FromFileTime(XV1).AddSeconds(1).ToFileTime();
 | |
|                 else _XV2 = value;
 | |
|                 XV2o = _XV2;
 | |
|             }
 | |
|         }
 | |
|                 
 | |
|         /// <summary>
 | |
|         /// 세로축의 종료값(현재 표시되는 값은 YV2를 참고하세요)
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 최대값을 입력하세요.")]        
 | |
|         public Single Y2
 | |
|         {
 | |
|             get { return _Y2; }
 | |
|             set {
 | |
|                 _Y2 = value;
 | |
|                 _YV2 = value;
 | |
|                 YV2o = value;
 | |
|                 if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 현재표시되는 세로축의 종료값입니다.
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 최대값을 입력하세요.")]
 | |
|         public Single YV2
 | |
|         {
 | |
|             get { return _YV2; }
 | |
|             set
 | |
|             {                
 | |
|                 _YV2 = value;
 | |
|                 YV2o = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 세로축의 시작값(현재 표시되는 값은 YV1을 참고하세요)
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 최소값을 입력하세요.")]
 | |
|         public Single Y1
 | |
|         {
 | |
|             get { return _Y1; }
 | |
|             set {
 | |
|                 _Y1 = value;
 | |
|                 _YV1 = value;
 | |
|                 YV1o = value;
 | |
|                 if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 세로축의 시작값
 | |
|         /// </summary>
 | |
|         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Browsable(false), Category("Y축(VOLT)"), Description("Y축에 표시되는 VOLT의 최소값을 입력하세요.")]
 | |
|         public Single YV1
 | |
|         {
 | |
|             get { return _YV1; }
 | |
|             set
 | |
|             {                
 | |
|                 _YV1 = value;
 | |
|                 YV1o = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|       
 | |
|         //[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("여백"), Description("차트가표시되는 영역의 상단 여백")]
 | |
|         //public int 왼쪽여백
 | |
|         //{
 | |
|         //    get { return _ZoneMarginX; }
 | |
|         //    set { _ZoneMarginX = value;
 | |
|         //    if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|         //    }
 | |
|         //}
 | |
| 
 | |
|         //[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("여백"), Description("차트가표시되는 영역의 하단 여백")]
 | |
|         //public int 위쪽여백
 | |
|         //{
 | |
|         //    get { return _ZoneMarginY; }
 | |
|         //    set { _ZoneMarginY = value;
 | |
|         //    if (OnUpdateinfo != null) OnUpdateinfo();
 | |
|         //    }
 | |
|         //}
 | |
|      
 | |
|     }
 | |
| 
 | |
| }
 | 
