ScottPlot (Growing Data - #2)
Software/C#2023. 2. 16. 13:23
반응형
지난 포스팅에서 ScottPlot 의 Growing Data 사용 방법에 대해 기술했습니다. 그러나 기본적으로 제공하는 사용방법이 불편하기도 할 뿐더러 코드도 길고 메모리 Overflow 의 위험성도 있어서 사용 방법을 변경해서 기술해 보았습니다.
* 데이타 버퍼로 배열을 사용하지 않고 List 를 사용하여 메모리 누수를 예방했습니다.
* 지난번의 문제점으로 지적된 X 축의 증가 Step을 조정할 수 없는 단점을 제거하였습니다.
* 코드도 훨씬 간결해 졌습니다.
1. 데이타저장을 위한 클래스를 하나 구현해 놓습니다. 지난번과는 다르게 데이타 갯수를 알려주는 Index 가 없어졌고 X축의 값을 저장하기 위한 버퍼가 추가 되었습니다.
public class MeasuredData
{
public readonly List<double> XAxis; // X축 데이타 저장 버퍼
public readonly List<double> YAxis; // Y축 데이타 저장 버퍼
public MeasuredData()
{
XAxis = new List<double>();
YAxis = new List<double>();
}
public void Reset()
{
XAxis.Clear();
YAxis.Clear();
}
}
2. 타이머를 이용하여 랜덤으로 데이타를 생성하게 하였습니다.
* 기본 기능과 다른 점은 X축의 간격을 임의로 넣을 수 있다는 점 입니다.
* 코드량도 작아지고 사용도 편리해 졌습니다.
public partial class Form1 : Form
{
private readonly MeasuredData measuredData = new MeasuredData();
private Random random = new Random();
private double XValue = 0; // X 축의 값을 임의로 만들기 위해 임시로 만든 변수 입니다. (실제로는 측정 상황에서의 값이 되겠네요)
public Form1() // 지난번과 다르게 생성자에서 특별히 구현해 줄게 없습니다.
{
InitializeComponent();
}
//---------------------------------------------------------------------------------------------------
private void timer1_Tick(object sender, EventArgs e)
{
formsPlot1.Plot.Clear(); // graph 출력을 클리어 합니다.
measuredData.XAxis.Add(XValue); // X 축 데이타 입력
measuredData.YAxis.Add(random.NextDouble()); // Y 축 데이타 입력
formsPlot1.Plot.AddScatterLines(measuredData.XAxis.ToArray(), measuredData.YAxis.ToArray()); // List 를 Array 로 변경하여 그래프 출력
formsPlot1.Render(); // 그래프 출력 화면 갱신
XValue += 0.3;
}
private void button1_Click(object sender, EventArgs e)
{
measuredData.Reset(); // 그래프 데이타 초기화
timer1.Enabled = true; // 타이머 시작
}
//---------------------------------------------------------------------------------------------------
}
3. 출력 결과 화면 입니다.
그런데 매번 그래프를 갱신하면서 그리는 것이라 속도면에서는 어떨지 잘모르겠네요.. 그런데 ScottPlot 가 그리는 속도가 꽤 빠르긴 합니다. 크게 속도를 요하는 것이 아니라면 이 방법도 괜찮아 보입니다.
반응형
'Software > C#' 카테고리의 다른 글
OpenCVSharp 카메라 제어 #1 ( 카메라 영상 출력 ) (0) | 2023.03.05 |
---|---|
Ocean Optics 사의 OmniDriver 제어코드 - C# (0) | 2023.02.17 |
ScottPlot (Growing Data - #1) (0) | 2023.02.16 |
C# TCP/IP 를 이용한 Client 클래스 (0) | 2023.02.13 |
C# Multi Thread를 이용한 다중 Client 접속 Server (1) | 2023.02.11 |
댓글()