LoginSignup
0
0

More than 1 year has passed since last update.

MFC から SVG クラスの基本図形呼び出しコードサンプル(2/2)

Last updated at Posted at 2022-12-17

MFC(GDI+) と SvgImage の四角形出力

MFC(GDI+) の場合以下のようになります。

	Gdiplus::RectF rect;
	rect.X = 100;
	rect.Y = 100;
	rect.Width = 200;
	rect.Height = 100;
    Gdiplus::Pen pen(Color(255, 0, 0, 0));
	pGraphics->DrawRectangle(pen, rect);

SvgImage に書き出すと以下のようになります。

    pImage->AddRect(100, 100, 200, 100, 0, 0);
    pImage->AddAttrStroke(RGB(0, 0, 0), 1, PS_SOLID);

角は丸くする必要がないため Rx, Ry の値はいずれも "0" に設定しています。

MFC(GDI+) と SvgImage の円、楕円出力

MFC(GDI+) の場合以下のようになります。

	Gdiplus::RectF rect;
	rect.X = 100;
	rect.Y = 100;
	rect.Width = 200;
	rect.Height = 100;
    Gdiplus::Pen pen(Color(255, 0, 0, 0));
	pGraphics->DrawEllipse(pen, rect);

SvgImage に書き出すと以下のようになります。

    pImage->AddEllipse(200, 150, 100, 50);
    pImage->AddAttrStroke(RGB(0, 0, 0), 1, PS_SOLID);

MFC(GDI+) に合わせて SvgImage に書き出したい場合は AddEllipse 関数をオーバーロードします。

円、楕円出力を MFC(GDI+) に合わせてオーバーロード

MFC(GDI+) に合わせて SvgImage に書き出すためのオーバーロード関数です。

SvgImage.h
class SvgImage
{
public:
    void AddEllipse(double dCx, double dCy, double dRx, double dRy, int nDepth = 0);
+   void AddEllipse(Gdiplus::RectF rect, int nDepth = 0);
}
SvgImage.cpp
void SvgImage::AddEllipse(Gdiplus::RectF rect, int nDepth)
{
    double dRx = rect.Widht / 2;
    double dRy = rect.Height / 2;
	double dCx = rect.X + dRx;
    double dCy = rect.Y + dRy;
	
    AddEllipse(dCx, dCy, dRx, dRy);
}

座標変換だけを行い、基本関数を呼ぶ形です。
実際に MFC から書き出しを行うと以下のようになります。

	Gdiplus::RectF rect;
	rect.X = 100;
	rect.Y = 100;
	rect.Width = 200;
	rect.Height = 100;
    pImage->AddEllipse(rect);
    pImage->AddAttrStroke(RGB(0, 0, 0), 1, PS_SOLID);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0