C および c は、3 点が定義された曲線を意味します。
S と s は、2 点が定義された曲線を意味します。
関連する関数は (monkSVG + monkVG/openVG) です。
void OpenVG_SVGHandler::onPathCubic( float x1, float y1, float x2, float y2, float x3, float y3 ) {
VGubyte seg = VG_CUBIC_TO | openVGRelative();
VGfloat data[6];
data[0] = x1; data[1] = y1;
data[2] = x2; data[3] = y2;
data[4] = x3; data[5] = y3;
vgAppendPathData( _current_group->current_path->path, 1, &seg, data);
}
void OpenVG_SVGHandler::onPathSCubic( float x2, float y2, float x3, float y3 ) {
VGubyte seg = VG_SCUBIC_TO | openVGRelative();
VGfloat data[4];
data[0] = x2; data[1] = y2;
data[2] = x3; data[3] = y3;
vgAppendPathData( _current_group->current_path->path, 1, &seg, data);
}
問題は、2 番目の関数 (2 ポイント) の結果イメージが正しくないように見えることです。だから私はそれを実行可能に見える関数に置き換えたいと思っています。
前のステップからポイントを保存しようとしましたが、間違った結果が得られました:
float x2 = d_string_to_float( c, &c );
float y2 = d_string_to_float( c, &c );
float x3 = d_string_to_float( c, &c );
float y3 = d_string_to_float( c, &c );
float x1 = 2 * prevX - x2;
float y1 = 2 * prevY - x2;
_handler->onPathCubic(x1, y1, x2, y2, x3, y3);
prevX = x3;
prevY = y3;