MFC と SvgImage のパス出力
MFC(GDI+) の場合以下のようになります。
Gdiplus::Point poly[8];
int nPoints = 8;
poly[0] = Gdiplus::PointF(50,50);
poly[1] = Gdiplus::PointF(100,100);
poly[2] = Gdiplus::PointF(150,50);
poly[3] = Gdiplus::PointF(200,100);
poly[4] = Gdiplus::PointF(250,50);
poly[5] = Gdiplus::PointF(300,100);
poly[6] = Gdiplus::PointF(350,50);
poly[7] = Gdiplus::PointF(400,100);
Gdiplus::Pen pen(Color(255, 0, 0, 0));
Gdiplus::GraphicsPath path;
path.AddCurve(poly, nPoints, 0.5f);
pGraphics->DrawPath(&pen, &path);
SvgImage への書き出しは Gdiplus::PathData クラスを利用するため、 Gdiplus::GraphicsPath を生成してそこから PathData を取得する形になります。
パスは GraphicsPath に書き出しを行うという手順を必要としますが、サンプルコードのカーディナルスプライン曲線だけでなく直線や円形なども同じ GraphicsPath オブジェクトに書き出しできるため、汎用性は高いといえます。
SvgImage に書き出すと以下のようになります。
Gdiplus::Point poly[8];
int nPoints = 8;
poly[0] = Gdiplus::PointF(50,50);
poly[1] = Gdiplus::PointF(100,100);
poly[2] = Gdiplus::PointF(150,50);
poly[3] = Gdiplus::PointF(200,100);
poly[4] = Gdiplus::PointF(250,50);
poly[5] = Gdiplus::PointF(300,100);
poly[6] = Gdiplus::PointF(350,50);
poly[7] = Gdiplus::PointF(400,100);
Gdiplus::GraphicsPath path;
path.AddCurve(poly, nPoints, 0.5f);
Gdiplus::PathData pathData;
path.GetPathData(&pathData);
pImage->AddPathData(&pathData);
pImage->AddAttrStroke(RGB(0, 0, 255), 1, PS_SOLID);