c# 실시간 그래프 예제

계열이 차트에 추가되면 데이터로 채울 수 있습니다. 이 작업을 수행하는 방법에는 한 블록에 데이터를 설정하거나 점별로 추가하는 두 가지 방법이 있습니다. 후자는 동적 데이터가 있을 때 사용됩니다: 함수가 호출될 때마다 차트가 업데이트됩니다. 이 호출은 빠르지만(일부 특정 조건에서) 가능하면 한 블록에서 점을 설정하는 것이 좋습니다. 다음은 차트에서 두 개의 계열을 만들고 데이터로 채우는 작은 코드 예제입니다. Them_pLineSeries, m_pPointsSeries 및 m_ChartCtrl은 CMyClass 클래스의 멤버 변수입니다. 컨트롤은 포인터의 소유권을 차지하지 않으므로 더 이상 필요하지 않은 경우 삭제하는 것이 사용자의 책임입니다. 위의 예에서는 일반적으로 CMyClass 소멸자에서 삭제됩니다. 위의 예에서는 물론 추가하려는 모든 레이블에 대해 동일한 레이블 공급자를 다시 사용할 수 있습니다. 런타임시 레이블의 형식을 변경하려면 CustomLabelProvider에 코드를 추가하기만 하면 됩니다. 모든 기존 레이블을 넘기고 텍스트를 변경할 필요가 없습니다. 물론 이 경우 레이블을 다시 그려야 하기 때문에 컨트롤을 새로 고쳐야 합니다. 또한 컨트롤에서 제공하는 형식 def인 TChartStringStream 클래스의 사용법(TChartString과 유사)도 참고하십시오.

유니코드가 정의될 때 std::wstringstream으로 확인되고 유니코드가 정의되지 않은 경우 std::stringstream로 확인됩니다. 실시간 작업 에서 y 축을 업데이트하기 위해 그래프가 필요한 경우 타이머 이벤트가 끝날 때 PeFunction.ReintializeResetImage() 및 새로 고침()을 호출합니다. 이것은 느린 실시간 프로세스가 될 것입니다. 두 번째 방법은 좀 더 복잡하지만 더 많은 유연성을 제공합니다: 예를 들어 레이블에 점 속성을 표시할 수 있습니다(예: X 값, Y 값, …) 더 쉬운 방법으로. 이를 위해 CChartLabelProvider 상속하는 클래스를 만들고 레이블을 만들 때 이 클래스의 인스턴스를 제공해야 합니다. 이 클래스는 레이블이 연결된 계열의 포인트 유형인 템플릿 매개 변수가 있는 템플릿 클래스입니다. 이 클래스는 TChartString GetText(CChartSerieBase* pSerie, 서명되지 않은 uPtIndex) 메서드를 재정의해야 하는 간단한 인터페이스입니다. 이 함수는 레이블에 표시해야 하는 텍스트를 반환해야 합니다. 레이블이 연결된 계열 및 점 인덱스에 대한 포인터를 받습니다.

다음은 이러한 레이블 공급자 클래스의 예입니다: 계열이 다른 종류의 점을 조작하는 경우 먼저 다음 메서드를 포함하는 지점에 대한 구조를 만들어야 합니다: Double GetX(), double GetXMin(), double GetXMax(), double GetXMax(), double GetY() GetYMin) 및 더블 게티맥스(). 이 작업이 완료되면 CChartSerieBaseand에서 이 점을 템플릿 매개 변수로 상속해야 합니다. 그런 다음 필요한 가상 함수를 제공해야 합니다. CChartCandlestickSerie 및 CChartGanttSerie : 구체적인 예에 대한 다음 시리즈를 살펴 보십시오. 다음으로 그래프의 y축이 수동으로 구성됩니다. 이는 컨트롤의 실시간 작업 중에 저울이 자동으로 조정되지 않기 때문입니다. 그러나 실시간 중에 차트의 규모를 조정하려면 이 것이 가능하며 나중에 설명합니다. ManualMaxDataString 및 ManualMaxPointLabel은 테이블 또는 PointLabels에서 각각 가장 큰 문자열을 나타내는 문자열을 설정하는 데 사용됩니다. 이는 개체의 이미지 구성 과정에서 겹치는 텍스트를 방지하기 위해 공간을 예약하는 데 사용됩니다. 참고: 다음 예제에서는 간단한 프로젝트, 하나의 양식, 하나의 페고 컨트롤 및 양식에 하나의 타이머 컨트롤을 가정합니다. 다음은 스트립 차트를 생성하는 예제 코드입니다.

첫 번째 섹션은 실시간 작업을 준비하면서 차트를 초기화하는 데 사용됩니다.