int SkChopCubicAtInflections(const SkPoint src[], SkPoint dst[10]) { SkScalar tValues[2]; int count = SkFindCubicInflections(src, tValues); if (dst) { if (count == 0) { memcpy(dst, src, 4 * sizeof(SkPoint)); } else { SkChopCubicAt(src, dst, tValues, count); } } return count + 1; }
static void oneOff(skiatest::Reporter* reporter, size_t x) { const SkDCubic& cubic = locals[x]; const SkPoint skcubic[4] = { {static_cast<float>(cubic[0].fX), static_cast<float>(cubic[0].fY)}, {static_cast<float>(cubic[1].fX), static_cast<float>(cubic[1].fY)}, {static_cast<float>(cubic[2].fX), static_cast<float>(cubic[2].fY)}, {static_cast<float>(cubic[3].fX), static_cast<float>(cubic[3].fY)} }; SkScalar skinflect[2]; int skin = SkFindCubicInflections(skcubic, skinflect); if (false) SkDebugf("%s %d %1.9g\n", __FUNCTION__, skin, skinflect[0]); SkTDArray<SkDQuad> quads; double precision = cubic.calcPrecision(); CubicToQuads(cubic, precision, quads); if (false) SkDebugf("%s quads=%d\n", __FUNCTION__, quads.count()); }