プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

C++/CLIでグラフを描画する

この記事は2020年06月11日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. C++/CLIでグラフを描画する
  3. おわりに

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC++/CLIでグラフを描画する方法についてです。

目次へ

2. C++/CLIでグラフを描画する/a>

C++/CLIでグラフを描画するには、Chartクラスを使用します。

実装例

MainForm.h

#pragma once

namespace CLIChart {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace System::Windows::Forms::DataVisualization::Charting;

    /// <summary>
    /// MainForm の概要
    /// </summary>
    public ref class MainForm : public System::Windows::Forms::Form
    {
    public:
        MainForm(void)
        {
            InitializeComponent();

            // チャートをフォームのクライアントサイズに合わせます。
            auto size = this->ClientSize;
            chart->ClientSize = size;

            // チャートの各項目を一旦クリアします。
            chart->Titles->Clear();
            chart->ChartAreas->Clear();
            chart->Series->Clear();

            // チャートのタイトルを設定します。
            auto title = gcnew Title("タイトル");
            chart->Titles->Add(title);

            // チャートのエリアを追加します。
            auto area = gcnew ChartArea();
            area->AxisX->Title = "X軸";
            area->AxisY->Title = "Y軸";
            chart->ChartAreas->Add(area);

            // 折れ線グラフを追加します。
            auto random = gcnew Random();
            auto seriesLine = gcnew Series();
            seriesLine->ChartType = SeriesChartType::Line;
            seriesLine->LegendText = "凡例:折れ線グラフ";
            seriesLine->BorderWidth = 2;
            seriesLine->MarkerStyle = MarkerStyle::Circle;
            seriesLine->MarkerSize = 12;
            for (auto i = 0; i < 10; ++i)
            {
                seriesLine->Points->Add(gcnew DataPoint(i, random->Next(0, 210)));
            }
            chart->Series->Add(seriesLine);

            // 棒グラフを追加します。
            auto seriesColumn = gcnew Series();
            seriesColumn->LegendText = "凡例:棒グラフ";
            seriesColumn->ChartType = SeriesChartType::Column;
            for (auto i = 0; i < 10; ++i)
            {
                seriesColumn->Points->Add(gcnew DataPoint(i, random->Next(0, 210)));
            }
            chart->Series->Add(seriesColumn);
        }

        (以降省略)
    };
}
main.cpp
#include "MainForm.h"

using namespace CLIChart;

[STAThreadAttribute]
int main()
{
    auto form = gcnew MainForm();
    form->ShowDialog();
    return 0;
}

実行結果

f:id:paveway:20200611050956p:plain

API Reference

Chartクラス

目次へ

3. おわりに

グラフを表示するアプリがあり、実装を見ながらサンプルを作成してみました。
グラフ表示は難しいイメージでしたが、案外簡単でした。

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ