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);