32 {{{{30.6499996,25.6499996}, {30.6499996,20.6499996}, {25.6499996,20.6499996}}}, 0.707107008f},
33 {{{25.6499996,20.6499996}, {45.6500015,20.6499996}}},
35 {{25.6499996,20.6499996}, {0,0}}
45 if (line[0].fX == line[1].fX) {
46 double top = line[0].fY;
47 double bottom = line[1].fY;
48 flipped = top > bottom;
53 result = intersections.
vertical(conic, top, bottom, line[0].fX, flipped);
54 }
else if (line[0].fY == line[1].fY) {
55 double left = line[0].fX;
56 double right = line[1].fX;
74 {{{{{30.6499996,25.6499996}, {30.6499996,20.6499996}, {25.6499996,20.6499996}}}, 0.707107008f},
75 {{{25.6499996,20.6499996}, {45.6500015,20.6499996}}}}
91 for (
int inner = 0; inner <
result; ++inner) {
92 double conicT = intersections[0][inner];
93 SkDPoint conicXY = conic.ptAtT(conicT);
94 double lineT = intersections[1][inner];
110 int iIndex =
static_cast<int>(index);
118 SkPoint pts[3] = { conic.fPts.fPts[0].asSkPoint(), conic.fPts.fPts[1].asSkPoint(),
119 conic.fPts.fPts[2].asSkPoint() };
122 floatConic.
set(pts, conic.fWeight);
125 SkDebugf(
"%s [%d] conic verb=%d\n", __FUNCTION__, iIndex, order1);
128 int order2 = reducer.
reduce(line);
130 SkDebugf(
"%s [%d] line order=%d\n", __FUNCTION__, iIndex, order2);
134 bool flipped =
false;
137 if (intersections.
used() <= 0) {
140 for (
int pt = 0; pt <
result; ++pt) {
141 double tt1 = intersections[0][pt];
144 double tt2 = intersections[1][pt];
148 SkDebugf(
"%s [%d,%d] x!= t1=%1.9g (%1.9g,%1.9g) t2=%1.9g (%1.9g,%1.9g)\n",
149 __FUNCTION__, iIndex, pt, tt1, t1.
fX, t1.
fY, tt2, t2.
fX, t2.
fY);
155 SkDebugf(
"%s t1=(%1.9g,%1.9g)\n", __FUNCTION__, t1.
fX, t1.
fY);
static struct oneLineConic oneOffs[]
static void testOneOffs(skiatest::Reporter *reporter)
static size_t lineConicTests_count
static struct lineConic lineConicTests[]
static size_t oneOffs_count
static int doIntersect(SkIntersections &intersections, const SkDConic &conic, const SkDLine &line, bool &flipped)
bool ValidConic(const SkDConic &conic)
bool ValidLine(const SkDLine &line)
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
static bool left(const SkPoint &p0, const SkPoint &p1)
static bool right(const SkPoint &p0, const SkPoint &p1)
void swap(sk_sp< T > &a, sk_sp< T > &b)
#define DEF_TEST(name, reporter)
#define REPORTER_ASSERT(r, cond,...)
int intersect(const SkDLine &, const SkDLine &)
int vertical(const SkDLine &, double top, double bottom, double x, bool flipped)
int horizontal(const SkDLine &, double left, double right, double y, bool flipped)
SkDPoint fPts[kPointCount]
void set(const SkPoint pts[3], SkScalar w)
bool approximatelyEqual(const SkDPoint &a) const
static SkPath::Verb Conic(const SkConic &conic, SkPoint *reducePts)
int reduce(const SkDCubic &cubic, Quadratics)