// create a standard format path, coordinates are floats (VG_PATH_DATATYPE_F) path0 = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL); writeInt(f, vgGetError(), "vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL)"); // append some data pathSegs[0] = VG_MOVE_TO_ABS; pathData[0] = -2.0f; pathData[1] = 1.0f; pathSegs[1] = VG_LINE_TO_ABS; pathData[2] = -4.0f; pathData[3] = 3.0f; pathSegs[2] = VG_HLINE_TO_ABS; pathData[4] = -7.0f; pathSegs[3] = VG_VLINE_TO_ABS; pathData[5] = 8.0f; pathSegs[4] = VG_QUAD_TO_ABS; pathData[6] = -4.0f; pathData[7] = 12.0f; pathData[8] = 2.0f; pathData[9] = 12.0f; pathSegs[5] = VG_CUBIC_TO_ABS; pathData[10] = 2.0f; pathData[11] = 8.0f; pathData[12] = 4.0f; pathData[13] = 6.0f; pathData[14] = 7.0f; pathData[15] = 6.0f; pathSegs[6] = VG_SQUAD_TO_ABS; pathData[16] = 10.0f; pathData[17] = 4.0f; pathSegs[7] = VG_SCUBIC_TO_ABS; pathData[18] = 7.0f; pathData[19] = 2.0f; pathData[20] = 7.0f; pathData[21] = 0.0f; // rx, ry, rot, x0, y0 pathSegs[8] = VG_LCWARC_TO_ABS; pathData[22] = 1.5f; pathData[23] = 3.0f; pathData[24] = 0.0f; pathData[25] = 4.0f; pathData[26] = 0.0f; pathSegs[9] = VG_LCCWARC_TO_ABS; pathData[27] = 2.1213f; pathData[28] = 3.5355f; pathData[29] = 135.0f; pathData[30] = 1.0f; pathData[31] = 3.0f; pathSegs[10] = VG_SCWARC_TO_ABS; pathData[32] = 2.0f; pathData[33] = 1.0f; pathData[34] = 0.0f; pathData[35] = 1.0f; pathData[36] = 1.0f; pathSegs[11] = VG_SCCWARC_TO_ABS; pathData[37] = 4.2426f; pathData[38] = 2.8284f; pathData[39] = 225.0f; pathData[40] = -5.0f; pathData[41] = -5.0f; pathSegs[12] = VG_CLOSE_PATH; vgAppendPathData(path0, 13, pathSegs, pathData); writeInt(f, vgGetError(), "vgAppendPathData(path0, 24, pathSegs, pathData)"); writePathParameters(f, path0); // get untransformed bound vgPathBounds(path0, &minX, &minY, &width, &height); writeFloat(f, minX, "PathBound.minX"); writeFloat(f, minY, "PathBound.minY"); writeFloat(f, width, "PathBound.width"); writeFloat(f, height, "PathBound.height"); vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE); // now load some matrixes and get transformed bounds vgLoadIdentity(); vgScale(0.5f, -0.8f); vgPathTransformedBounds(path0, &minX, &minY, &width, &height); writeFloat(f, minX, "TransformedBound.minX"); writeFloat(f, minY, "TransformedBound.minY"); writeFloat(f, width, "TransformedBound.width"); writeFloat(f, height, "TransformedBound.height"); vgLoadIdentity(); vgRotate(30.0f); vgPathTransformedBounds(path0, &minX, &minY, &width, &height); writeFloat(f, minX, "TransformedBound.minX"); writeFloat(f, minY, "TransformedBound.minY"); writeFloat(f, width, "TransformedBound.width"); writeFloat(f, height, "TransformedBound.height"); vgLoadIdentity(); vgShear(0.1f, 1.2f); vgPathTransformedBounds(path0, &minX, &minY, &width, &height); writeFloat(f, minX, "TransformedBound.minX"); writeFloat(f, minY, "TransformedBound.minY"); writeFloat(f, width, "TransformedBound.width"); writeFloat(f, height, "TransformedBound.height"); vgLoadIdentity(); vgTranslate(-5.0f, -2.0f); vgShear(-0.4f, 0.5f); vgRotate(-40.0f); vgTranslate(15.0f, 1.0f); vgScale(0.5f, -0.8f); vgPathTransformedBounds(path0, &minX, &minY, &width, &height); writeFloat(f, minX, "TransformedBound.minX"); writeFloat(f, minY, "TransformedBound.minY"); writeFloat(f, width, "TransformedBound.width"); writeFloat(f, height, "TransformedBound.height"); // destroy path vgDestroyPath(path0); writeInt(f, vgGetError(), "vgDestroyPath(path0)");