Reland of path ops: fix conic weight and partial coincidence (patchset #1 id:1 of https://codereview.chromium.org/1408923003/ )
Reason for revert: suppressions have landed in chrome Original issue's description: > Revert of path ops: fix conic weight and partial coincidence (patchset #5 id:80001 of https://codereview.chromium.org/1413763002/ ) > > Reason for revert: > path ops change breaks svg clipping layout tests -- conic is now more accurate, changing edge of circle in clip > > These need to be rebaselined > > svg/clip-path/clip-path-child-clipped.svg > svg/clip-path/clip-path-nonzero.svg > svg/clip-path/clip-path-evenodd-nonzero.svg > svg/clip-path/clip-path-nonzero-evenodd.svg > > Original issue's description: > > The remaining 1m skp bugs are asserts that can be harmlessly > > suppressed and bugs around conics. > > > > The conic calculation for a subdivided w was just wrong. > > > > Also added debugging to template intersection to initialize > > reused structures and dump additional data. > > > > TBR=reed@google.com > > > > Committed: https://skia.googlesource.com/skia/+/ef33b1e739b23a1201100ff17a572da85b03d9af > > TBR= > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Committed: https://skia.googlesource.com/skia/+/f428df1be3e96d3f8970d0f7f415b862f7da5404 TBR= NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/1407003016
This commit is contained in:
parent
7f53819ea9
commit
ed0935a28a
@ -205,7 +205,7 @@ bool SkOpCoincidence::addIfMissing(const SkOpPtT* over1s, const SkOpPtT* over1e,
|
||||
SkASSERT(cs != ce);
|
||||
SkOpPtT* os = oppSeg->addMissing(oppTs, coinSeg, allocator);
|
||||
SkOpPtT* oe = oppSeg->addMissing(oppTe, coinSeg, allocator);
|
||||
SkASSERT(os != oe);
|
||||
// SkASSERT(os != oe);
|
||||
cs->addOpp(os);
|
||||
ce->addOpp(oe);
|
||||
this->add(cs, ce, os, oe, allocator);
|
||||
|
@ -96,7 +96,27 @@ SkDPoint SkDConic::ptAtT(double t) const {
|
||||
return result;
|
||||
}
|
||||
|
||||
/* see quad subdivide for rationale */
|
||||
/* see quad subdivide for point rationale */
|
||||
/* w rationale : the mid point between t1 and t2 could be determined from the computed a/b/c
|
||||
values if the computed w was known. Since we know the mid point at (t1+t2)/2, we'll assume
|
||||
that it is the same as the point on the new curve t==(0+1)/2.
|
||||
|
||||
d / dz == conic_poly(dst, unknownW, .5) / conic_weight(unknownW, .5);
|
||||
|
||||
conic_poly(dst, unknownW, .5)
|
||||
= a / 4 + (b * unknownW) / 2 + c / 4
|
||||
= (a + c) / 4 + (bx * unknownW) / 2
|
||||
|
||||
conic_weight(unknownW, .5)
|
||||
= unknownW / 2 + 1 / 2
|
||||
|
||||
d / dz == ((a + c) / 2 + b * unknownW) / (unknownW + 1)
|
||||
d / dz * (unknownW + 1) == (a + c) / 2 + b * unknownW
|
||||
unknownW = ((a + c) / 2 - d / dz) / (d / dz - b)
|
||||
|
||||
Thus, w is the ratio of the distance from the mid of end points to the on-curve point, and the
|
||||
distance of the on-curve point to the control point.
|
||||
*/
|
||||
SkDConic SkDConic::subDivide(double t1, double t2) const {
|
||||
double ax, ay, az;
|
||||
if (t1 == 0) {
|
||||
@ -133,11 +153,13 @@ SkDConic SkDConic::subDivide(double t1, double t2) const {
|
||||
double bx = 2 * dx - (ax + cx) / 2;
|
||||
double by = 2 * dy - (ay + cy) / 2;
|
||||
double bz = 2 * dz - (az + cz) / 2;
|
||||
double dt = t2 - t1;
|
||||
double dt_1 = 1 - dt;
|
||||
SkScalar w = SkDoubleToScalar((1 + dt * (fWeight - 1))
|
||||
/ sqrt(dt * dt + 2 * dt * dt_1 * fWeight + dt_1 * dt_1));
|
||||
SkDConic dst = {{{{ax / az, ay / az}, {bx / bz, by / bz}, {cx / cz, cy / cz}}}, w };
|
||||
SkDConic dst = {{{{ax / az, ay / az}, {bx / bz, by / bz}, {cx / cz, cy / cz}}}, 0 };
|
||||
SkDPoint dMidAC = { (dst.fPts[0].fX + dst.fPts[2].fX) / 2,
|
||||
(dst.fPts[0].fY + dst.fPts[2].fY) / 2 };
|
||||
SkDPoint dMid = { dx / dz, dy / dz };
|
||||
SkDVector dWNumer = dMidAC - dMid;
|
||||
SkDVector dWDenom = dMid - dst.fPts[1];
|
||||
dst.fWeight = dWNumer.length() / dWDenom.length();
|
||||
return dst;
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,7 @@ struct SkDConic {
|
||||
return result;
|
||||
}
|
||||
|
||||
static bool IsCubic() { return false; }
|
||||
static bool IsConic() { return true; }
|
||||
|
||||
const SkDConic& set(const SkPoint pts[kPointCount], SkScalar weight) {
|
||||
fPts.set(pts);
|
||||
|
@ -41,7 +41,7 @@ struct SkDCubic {
|
||||
return v03.dot(v01) > 0 && v03.dot(v02) > 0 && v03.dot(v13) > 0 && v03.dot(v23) > 0;
|
||||
}
|
||||
|
||||
static bool IsCubic() { return true; }
|
||||
static bool IsConic() { return false; }
|
||||
|
||||
const SkDPoint& operator[](int n) const { SkASSERT(n >= 0 && n < kPointCount); return fPts[n]; }
|
||||
SkDPoint& operator[](int n) { SkASSERT(n >= 0 && n < kPointCount); return fPts[n]; }
|
||||
|
@ -404,6 +404,10 @@ SkDCubic SkDQuad::debugToCubic() const {
|
||||
return cubic;
|
||||
}
|
||||
|
||||
void SkDRect::debugInit() {
|
||||
fLeft = fTop = fRight = fBottom = SK_ScalarNaN;
|
||||
}
|
||||
|
||||
#include "SkOpAngle.h"
|
||||
#include "SkOpSegment.h"
|
||||
|
||||
@ -1113,7 +1117,9 @@ void SkOpCoincidence::debugAddExpanded(const char* id, SkPathOpsDebug::GlitchLog
|
||||
if (!coin) {
|
||||
coin = this->fTop;
|
||||
}
|
||||
SkASSERT(coin);
|
||||
if (!coin) {
|
||||
return;
|
||||
}
|
||||
do {
|
||||
const SkOpPtT* startPtT = coin->fCoinPtTStart;
|
||||
const SkOpPtT* oStartPtT = coin->fOppPtTStart;
|
||||
|
@ -74,7 +74,7 @@
|
||||
#define DEBUG_ALIGNMENT 0
|
||||
#define DEBUG_ANGLE 1
|
||||
#define DEBUG_ASSEMBLE 1
|
||||
#define DEBUG_COINCIDENCE 1
|
||||
#define DEBUG_COINCIDENCE 0
|
||||
#define DEBUG_CUBIC_BINARY_SEARCH 0
|
||||
#define DEBUG_CUBIC_SPLIT 1
|
||||
#define DEBUG_DUMP_SEGMENTS 1
|
||||
@ -85,9 +85,9 @@
|
||||
#define DEBUG_PERP 1
|
||||
#define DEBUG_SHOW_TEST_NAME 1
|
||||
#define DEBUG_SORT 1
|
||||
#define DEBUG_T_SECT 1
|
||||
#define DEBUG_T_SECT_DUMP 1
|
||||
#define DEBUG_T_SECT_LOOP_COUNT 1
|
||||
#define DEBUG_T_SECT 0
|
||||
#define DEBUG_T_SECT_DUMP 0
|
||||
#define DEBUG_T_SECT_LOOP_COUNT 0
|
||||
#define DEBUG_VALIDATE 1
|
||||
#define DEBUG_WINDING 1
|
||||
#define DEBUG_WINDING_AT_T 1
|
||||
|
@ -45,7 +45,7 @@ struct SkDQuad {
|
||||
return result;
|
||||
}
|
||||
|
||||
static bool IsCubic() { return false; }
|
||||
static bool IsConic() { return false; }
|
||||
|
||||
const SkDQuad& set(const SkPoint pts[kPointCount]) {
|
||||
fPts[0] = pts[0];
|
||||
|
@ -24,6 +24,8 @@ struct SkDRect {
|
||||
&& approximately_between(fTop, pt.fY, fBottom);
|
||||
}
|
||||
|
||||
void debugInit();
|
||||
|
||||
bool intersects(const SkDRect& r) const {
|
||||
SkASSERT(fLeft <= fRight);
|
||||
SkASSERT(fTop <= fBottom);
|
||||
|
@ -11,6 +11,12 @@
|
||||
#include "SkIntersections.h"
|
||||
#include "SkTSort.h"
|
||||
|
||||
#ifdef SK_DEBUG
|
||||
typedef uint8_t SkOpDebugBool;
|
||||
#else
|
||||
typedef bool SkOpDebugBool;
|
||||
#endif
|
||||
|
||||
/* TCurve and OppCurve are one of { SkDQuadratic, SkDConic, SkDCubic } */
|
||||
template<typename TCurve, typename OppCurve>
|
||||
class SkTCoincident {
|
||||
@ -19,10 +25,20 @@ public:
|
||||
this->init();
|
||||
}
|
||||
|
||||
void debugInit() {
|
||||
#ifdef SK_DEBUG
|
||||
this->fPerpPt.fX = this->fPerpPt.fY = SK_ScalarNaN;
|
||||
this->fPerpT = SK_ScalarNaN;
|
||||
this->fCoincident = 0xFF;
|
||||
#endif
|
||||
}
|
||||
|
||||
char dumpIsCoincidentStr() const;
|
||||
void dump() const;
|
||||
|
||||
bool isCoincident() const {
|
||||
return fCoincident;
|
||||
SkASSERT(!!fCoincident == fCoincident);
|
||||
return SkToBool(fCoincident);
|
||||
}
|
||||
|
||||
void init() {
|
||||
@ -51,7 +67,7 @@ public:
|
||||
private:
|
||||
SkDPoint fPerpPt;
|
||||
double fPerpT; // perpendicular intersection on opposite curve
|
||||
bool fCoincident;
|
||||
SkOpDebugBool fCoincident;
|
||||
};
|
||||
|
||||
template<typename TCurve, typename OppCurve> class SkTSect;
|
||||
@ -185,11 +201,11 @@ private:
|
||||
double fStartT;
|
||||
double fEndT;
|
||||
double fBoundsMax;
|
||||
bool fCollapsed;
|
||||
bool fHasPerp;
|
||||
bool fIsLinear;
|
||||
bool fIsLine;
|
||||
bool fDeleted;
|
||||
SkOpDebugBool fCollapsed;
|
||||
SkOpDebugBool fHasPerp;
|
||||
SkOpDebugBool fIsLinear;
|
||||
SkOpDebugBool fIsLine;
|
||||
SkOpDebugBool fDeleted;
|
||||
SkDEBUGCODE_(SkTSect<TCurve, OppCurve>* fDebugSect);
|
||||
PATH_OPS_DEBUG_T_SECT_CODE(int fID);
|
||||
friend class SkTSect<TCurve, OppCurve>;
|
||||
@ -269,6 +285,7 @@ private:
|
||||
SkTSpan<TCurve, OppCurve>** lastPtr);
|
||||
int intersects(SkTSpan<TCurve, OppCurve>* span, SkTSect<OppCurve, TCurve>* opp,
|
||||
SkTSpan<OppCurve, TCurve>* oppSpan, int* oppResult);
|
||||
bool isParallel(const SkDLine& thisLine, const SkTSect<OppCurve, TCurve>* opp) const;
|
||||
int linesIntersect(SkTSpan<TCurve, OppCurve>* span, SkTSect<OppCurve, TCurve>* opp,
|
||||
SkTSpan<OppCurve, TCurve>* oppSpan, SkIntersections* );
|
||||
void markSpanGone(SkTSpan<TCurve, OppCurve>* span);
|
||||
@ -828,21 +845,29 @@ SkTSpan<TCurve, OppCurve>* SkTSect<TCurve, OppCurve>::addOne() {
|
||||
SkTSpan<TCurve, OppCurve>* result;
|
||||
if (fDeleted) {
|
||||
result = fDeleted;
|
||||
result->reset();
|
||||
fDeleted = result->fNext;
|
||||
} else {
|
||||
result = new (fHeap.allocThrow(sizeof(SkTSpan<TCurve, OppCurve>)))(
|
||||
SkTSpan<TCurve, OppCurve>);
|
||||
result->fBounded = nullptr;
|
||||
#if DEBUG_T_SECT
|
||||
++fDebugAllocatedCount;
|
||||
#endif
|
||||
}
|
||||
result->reset();
|
||||
result->fHasPerp = false;
|
||||
result->fDeleted = false;
|
||||
++fActiveCount;
|
||||
PATH_OPS_DEBUG_T_SECT_CODE(result->fID = fDebugCount++ * 2 + fID);
|
||||
SkDEBUGCODE(result->fDebugSect = this);
|
||||
#ifdef SK_DEBUG
|
||||
result->fPart.debugInit();
|
||||
result->fCoinStart.debugInit();
|
||||
result->fCoinEnd.debugInit();
|
||||
result->fPrev = result->fNext = nullptr;
|
||||
result->fBounds.debugInit();
|
||||
result->fStartT = result->fEndT = result->fBoundsMax = SK_ScalarNaN;
|
||||
result->fCollapsed = result->fIsLinear = result->fIsLine = 0xFF;
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -1277,6 +1302,31 @@ int SkTSect<TCurve, OppCurve>::intersects(SkTSpan<TCurve, OppCurve>* span,
|
||||
return *oppResult = 1;
|
||||
}
|
||||
|
||||
template<typename TCurve>
|
||||
static bool is_parallel(const SkDLine& thisLine, const TCurve& opp) {
|
||||
if (!opp.IsConic()) {
|
||||
return false; // FIXME : breaks a lot of stuff now
|
||||
}
|
||||
int finds = 0;
|
||||
SkDLine thisPerp;
|
||||
thisPerp.fPts[0].fX = thisLine.fPts[1].fX + (thisLine.fPts[1].fY - thisLine.fPts[0].fY);
|
||||
thisPerp.fPts[0].fY = thisLine.fPts[1].fY + (thisLine.fPts[0].fX - thisLine.fPts[1].fX);
|
||||
thisPerp.fPts[1] = thisLine.fPts[1];
|
||||
SkIntersections perpRayI;
|
||||
perpRayI.intersectRay(opp, thisPerp);
|
||||
for (int pIndex = 0; pIndex < perpRayI.used(); ++pIndex) {
|
||||
finds += perpRayI.pt(pIndex).approximatelyEqual(thisPerp.fPts[1]);
|
||||
}
|
||||
thisPerp.fPts[1].fX = thisLine.fPts[0].fX + (thisLine.fPts[1].fY - thisLine.fPts[0].fY);
|
||||
thisPerp.fPts[1].fY = thisLine.fPts[0].fY + (thisLine.fPts[0].fX - thisLine.fPts[1].fX);
|
||||
thisPerp.fPts[0] = thisLine.fPts[0];
|
||||
perpRayI.intersectRay(opp, thisPerp);
|
||||
for (int pIndex = 0; pIndex < perpRayI.used(); ++pIndex) {
|
||||
finds += perpRayI.pt(pIndex).approximatelyEqual(thisPerp.fPts[0]);
|
||||
}
|
||||
return finds >= 2;
|
||||
}
|
||||
|
||||
// while the intersection points are sufficiently far apart:
|
||||
// construct the tangent lines from the intersections
|
||||
// find the point where the tangent line intersects the opposite curve
|
||||
@ -1303,7 +1353,7 @@ int SkTSect<TCurve, OppCurve>::linesIntersect(SkTSpan<TCurve, OppCurve>* span,
|
||||
ptMatches += thisRayI.pt(tIndex).approximatelyEqual(thisLine.fPts[lIndex]);
|
||||
}
|
||||
}
|
||||
if (ptMatches == 2) {
|
||||
if (ptMatches == 2 || is_parallel(thisLine, opp->fCurve)) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
@ -1314,7 +1364,7 @@ int SkTSect<TCurve, OppCurve>::linesIntersect(SkTSpan<TCurve, OppCurve>* span,
|
||||
ptMatches += oppRayI.pt(oIndex).approximatelyEqual(oppLine.fPts[lIndex]);
|
||||
}
|
||||
}
|
||||
if (ptMatches == 2) {
|
||||
if (ptMatches == 2|| is_parallel(oppLine, this->fCurve)) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
@ -287,7 +287,7 @@ bool SkOpSpan::sortableTop(SkOpContour* contourHead) {
|
||||
return false;
|
||||
}
|
||||
bool ccw = ccw_dxdy(hit->fSlope, dir);
|
||||
SkASSERT(!approximately_zero(hit->fT) || !hit->fValid);
|
||||
// SkASSERT(!approximately_zero(hit->fT) || !hit->fValid);
|
||||
SkOpSpan* span = hit->fSpan;
|
||||
SkOpSegment* hitSegment = span->segment();
|
||||
if (!span) {
|
||||
|
@ -3786,7 +3786,6 @@ path.cubicTo(SkBits2Float(0x44467fa9), SkBits2Float(0x455cde82), SkBits2Float(0x
|
||||
}
|
||||
|
||||
static void skpwww_gorcraft_ru_1(skiatest::Reporter* reporter, const char* filename) {
|
||||
return; // FIXME : triggers conic/conic sort error
|
||||
SkPath path;
|
||||
path.setFillType((SkPath::FillType) 1);
|
||||
path.moveTo(SkBits2Float(0x44924000), SkBits2Float(0x458e7800)); // 1170, 4559
|
||||
@ -3974,18 +3973,677 @@ path.cubicTo(75.713f, 27.393f, 75.83f, 27.61f, 75.88f, 27.873f);
|
||||
testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
|
||||
}
|
||||
|
||||
static void http___www_emuleteca_cl_26(skiatest::Reporter* reporter, const char* filename) {
|
||||
SkPath path;
|
||||
path.setFillType((SkPath::FillType) 1);
|
||||
path.moveTo(SkBits2Float(0x3f800000), SkBits2Float(0x44370000)); // 1, 732
|
||||
path.conicTo(SkBits2Float(0x3f800000), SkBits2Float(0x4428c000), SkBits2Float(0x42680000), SkBits2Float(0x4428c000), SkBits2Float(0x3f3504f3)); // 1, 675, 58, 675, 0.707107f
|
||||
path.conicTo(SkBits2Float(0x40400000), SkBits2Float(0x4428c000), SkBits2Float(0x40400000), SkBits2Float(0x44370000), SkBits2Float(0x3f3504f3)); // 3, 675, 3, 732, 0.707107f
|
||||
path.conicTo(SkBits2Float(0x40400000), SkBits2Float(0x44444000), SkBits2Float(0x42680000), SkBits2Float(0x44444000), SkBits2Float(0x3f3504f3)); // 3, 785, 58, 785, 0.707107f
|
||||
path.lineTo(SkBits2Float(0x446d0000), SkBits2Float(0x44444000)); // 948, 785
|
||||
path.conicTo(SkBits2Float(0x447ac000), SkBits2Float(0x44444000), SkBits2Float(0x447ac000), SkBits2Float(0x44370000), SkBits2Float(0x3f3504f3)); // 1003, 785, 1003, 732, 0.707107f
|
||||
path.conicTo(SkBits2Float(0x447ac000), SkBits2Float(0x4428c000), SkBits2Float(0x446d0000), SkBits2Float(0x4428c000), SkBits2Float(0x3f3504f3)); // 1003, 675, 948, 675, 0.707107f
|
||||
path.conicTo(SkBits2Float(0x447b4000), SkBits2Float(0x4428c000), SkBits2Float(0x447b4000), SkBits2Float(0x44370000), SkBits2Float(0x3f3504f3)); // 1005, 675, 1005, 732, 0.707107f
|
||||
path.conicTo(SkBits2Float(0x447b4000), SkBits2Float(0x44454000), SkBits2Float(0x446d0000), SkBits2Float(0x44454000), SkBits2Float(0x3f3504f3)); // 1005, 789, 948, 789, 0.707107f
|
||||
path.lineTo(SkBits2Float(0x42680000), SkBits2Float(0x44454000)); // 58, 789
|
||||
path.conicTo(SkBits2Float(0x3f800000), SkBits2Float(0x44454000), SkBits2Float(0x3f800000), SkBits2Float(0x44370000), SkBits2Float(0x3f3504f3)); // 1, 789, 1, 732, 0.707107f
|
||||
path.close();
|
||||
|
||||
SkPath path1(path);
|
||||
path.reset();
|
||||
path.setFillType((SkPath::FillType) 0);
|
||||
path.moveTo(SkBits2Float(0x3f800000), SkBits2Float(0x4428c000)); // 1, 675
|
||||
path.lineTo(SkBits2Float(0x42680000), SkBits2Float(0x4428c000)); // 58, 675
|
||||
path.lineTo(SkBits2Float(0x3fc8f676), SkBits2Float(0x44454000)); // 1.57002f, 789
|
||||
path.lineTo(SkBits2Float(0x3f800000), SkBits2Float(0x44454000)); // 1, 789
|
||||
|
||||
SkPath path2(path);
|
||||
testPathOp(reporter, path1, path2, (SkPathOp) 1, filename);
|
||||
}
|
||||
|
||||
static void http___www_emuleteca_cl_27(skiatest::Reporter* reporter, const char* filename) {
|
||||
SkPath path;
|
||||
path.setFillType((SkPath::FillType) 1);
|
||||
path.moveTo(SkBits2Float(0x42680000), SkBits2Float(0x4428c000)); // 58, 675
|
||||
path.conicTo(SkBits2Float(0x3f800000), SkBits2Float(0x4428c000), SkBits2Float(0x3f800000), SkBits2Float(0x44370000), SkBits2Float(0x3f3504f3)); // 1, 675, 1, 732, 0.707107f
|
||||
path.conicTo(SkBits2Float(0x3f800000), SkBits2Float(0x443bd045), SkBits2Float(0x414acf56), SkBits2Float(0x443fa420), SkBits2Float(0x3f778612)); // 1, 751.254f, 12.6756f, 766.564f, 0.96689f
|
||||
path.lineTo(SkBits2Float(0x41606e3d), SkBits2Float(0x443ef569)); // 14.0269f, 763.835f
|
||||
path.conicTo(SkBits2Float(0x40400000), SkBits2Float(0x443b6c34), SkBits2Float(0x40400000), SkBits2Float(0x44370000), SkBits2Float(0x3f77ac46)); // 3, 749.691f, 3, 732, 0.967472f
|
||||
path.conicTo(SkBits2Float(0x40400000), SkBits2Float(0x4428c000), SkBits2Float(0x42680000), SkBits2Float(0x4428c000), SkBits2Float(0x3f3504f3)); // 3, 675, 58, 675, 0.707107f
|
||||
path.close();
|
||||
|
||||
SkPath path1(path);
|
||||
path.reset();
|
||||
path.setFillType((SkPath::FillType) 0);
|
||||
path.moveTo(SkBits2Float(0x3f800000), SkBits2Float(0x4428c000)); // 1, 675
|
||||
path.lineTo(SkBits2Float(0x4c4a3de6), SkBits2Float(0xccca3d89)); // 5.30165e+07f, -1.06032e+08f
|
||||
path.lineTo(SkBits2Float(0x41a71147), SkBits2Float(0x443b4eec)); // 20.8834f, 749.233f
|
||||
path.lineTo(SkBits2Float(0x3f800000), SkBits2Float(0x44454000)); // 1, 789
|
||||
|
||||
SkPath path2(path);
|
||||
testPathOp(reporter, path1, path2, (SkPathOp) 1, filename);
|
||||
}
|
||||
|
||||
static void http___www_emuleteca_cl_28(skiatest::Reporter* reporter, const char* filename) {
|
||||
SkPath path;
|
||||
path.setFillType(SkPath::kEvenOdd_FillType);
|
||||
|
||||
SkPath path1(path);
|
||||
path.reset();
|
||||
path.setFillType(SkPath::kWinding_FillType);
|
||||
path.moveTo(SkBits2Float(0x3f800000), SkBits2Float(0x4428c000)); // 1, 675
|
||||
path.lineTo(SkBits2Float(0x4c4a3de6), SkBits2Float(0xccca3d89)); // 5.30165e+07f, -1.06032e+08f
|
||||
path.lineTo(SkBits2Float(0x41a71147), SkBits2Float(0x443b4eec)); // 20.8834f, 749.233f
|
||||
path.lineTo(SkBits2Float(0x3f800000), SkBits2Float(0x44454000)); // 1, 789
|
||||
SkPath path2(path);
|
||||
testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
|
||||
}
|
||||
|
||||
static void http___www_project2061_org(skiatest::Reporter* reporter, const char* filename) {
|
||||
SkPath path;
|
||||
path.setFillType(SkPath::kEvenOdd_FillType);
|
||||
path.moveTo(751, 62);
|
||||
path.lineTo(497, 62);
|
||||
path.lineTo(497, 138);
|
||||
path.lineTo(751, 138);
|
||||
path.lineTo(751, 62);
|
||||
path.close();
|
||||
SkPath path1(path);
|
||||
path.reset();
|
||||
path.setFillType(SkPath::kWinding_FillType);
|
||||
path.moveTo(699.889f, 115.29f);
|
||||
path.cubicTo(699.889f, 114.913f, 699.627f, 114.723f, 699.111f, 114.723f);
|
||||
path.cubicTo(698.604f, 114.723f, 697.843f, 114.671f, 697.096f, 114.423f);
|
||||
path.cubicTo(695.94f, 114.094f, 694.53f, 113.168f, 692.746f, 108.775f);
|
||||
path.cubicTo(690.469f, 103.12f, 685.644f, 90.563f, 682.761f, 83.061f);
|
||||
path.lineTo(680.541f, 77.301f);
|
||||
path.cubicTo(679.927f, 75.721f, 679.67f, 75.261f, 679.151f, 75.261f);
|
||||
path.cubicTo(678.636f, 75.261f, 678.392f, 75.73f, 677.759f, 77.464f);
|
||||
path.lineTo(665.868f, 109.881f);
|
||||
path.cubicTo(664.861f, 112.669f, 663.852f, 114.339f, 661.675f, 114.622f);
|
||||
path.cubicTo(661.675f, 114.622f, 661.551f, 114.631f, 661.378f, 114.642f);
|
||||
path.cubicTo(661.072f, 114.597f, 660.75f, 114.531f, 660.427f, 114.424f);
|
||||
path.cubicTo(659.272f, 114.095f, 657.861f, 113.169f, 656.078f, 108.776f);
|
||||
path.cubicTo(653.797f, 103.112f, 648.967f, 90.541f, 646.08f, 83.029f);
|
||||
path.lineTo(643.873f, 77.302f);
|
||||
path.cubicTo(643.259f, 75.722f, 643.002f, 75.262f, 642.484f, 75.262f);
|
||||
path.cubicTo(641.968f, 75.262f, 641.724f, 75.731f, 641.092f, 77.465f);
|
||||
path.lineTo(629.2f, 109.879f);
|
||||
path.cubicTo(628.193f, 112.667f, 627.184f, 114.337f, 625.007f, 114.62f);
|
||||
path.cubicTo(625.007f, 114.62f, 624.884f, 114.629f, 624.71f, 114.64f);
|
||||
path.cubicTo(624.404f, 114.595f, 624.081f, 114.529f, 623.759f, 114.422f);
|
||||
path.cubicTo(622.603f, 114.093f, 621.193f, 113.167f, 619.409f, 108.774f);
|
||||
path.cubicTo(617.132f, 103.119f, 612.307f, 90.562f, 609.424f, 83.06f);
|
||||
path.lineTo(607.204f, 77.3f);
|
||||
path.cubicTo(606.59f, 75.72f, 606.333f, 75.26f, 605.815f, 75.26f);
|
||||
path.cubicTo(605.3f, 75.26f, 605.055f, 75.729f, 604.423f, 77.463f);
|
||||
path.lineTo(592.531f, 109.879f);
|
||||
path.cubicTo(591.524f, 112.667f, 590.514f, 114.337f, 588.338f, 114.62f);
|
||||
path.cubicTo(588.337f, 114.62f, 586.852f, 114.722f, 586.852f, 114.722f);
|
||||
path.cubicTo(586.418f, 114.722f, 586.126f, 114.95f, 586.126f, 115.289f);
|
||||
path.cubicTo(586.126f, 115.96f, 586.97f, 115.96f, 587.376f, 115.96f);
|
||||
path.lineTo(592.101f, 115.843f);
|
||||
path.lineTo(593.295f, 115.804f);
|
||||
path.lineTo(594.624f, 115.86f);
|
||||
path.lineTo(597.381f, 115.961f);
|
||||
path.cubicTo(598.241f, 115.961f, 598.422f, 115.596f, 598.422f, 115.29f);
|
||||
path.cubicTo(598.422f, 115.078f, 598.321f, 114.723f, 597.643f, 114.723f);
|
||||
path.lineTo(597.119f, 114.723f);
|
||||
path.cubicTo(596.448f, 114.723f, 595.383f, 114.381f, 595.383f, 113.463f);
|
||||
path.cubicTo(595.383f, 112.545f, 595.638f, 111.334f, 596.101f, 110.052f);
|
||||
path.cubicTo(596.103f, 110.048f, 599.246f, 100.809f, 599.246f, 100.809f);
|
||||
path.cubicTo(599.337f, 100.583f, 599.435f, 100.564f, 599.528f, 100.564f);
|
||||
path.lineTo(610.791f, 100.564f);
|
||||
path.cubicTo(610.929f, 100.564f, 610.958f, 100.585f, 611.035f, 100.737f);
|
||||
path.cubicTo(611.035f, 100.741f, 615.896f, 113.554f, 615.896f, 113.554f);
|
||||
path.cubicTo(615.972f, 113.754f, 616.01f, 113.942f, 616.01f, 114.105f);
|
||||
path.cubicTo(616.01f, 114.228f, 615.988f, 114.338f, 615.945f, 114.429f);
|
||||
path.cubicTo(615.876f, 114.573f, 615.779f, 114.619f, 615.741f, 114.631f);
|
||||
path.cubicTo(615.272f, 114.748f, 615.2f, 115.061f, 615.2f, 115.237f);
|
||||
path.cubicTo(615.2f, 115.766f, 615.792f, 115.796f, 616.772f, 115.844f);
|
||||
path.lineTo(617.012f, 115.857f);
|
||||
path.cubicTo(618.978f, 115.913f, 621.359f, 115.948f, 623.835f, 115.958f);
|
||||
path.cubicTo(623.912f, 115.961f, 623.984f, 115.961f, 624.045f, 115.961f);
|
||||
path.lineTo(624.118f, 115.959f);
|
||||
path.cubicTo(624.494f, 115.961f, 624.871f, 115.961f, 625.25f, 115.961f);
|
||||
path.cubicTo(625.47f, 115.961f, 625.662f, 115.946f, 625.827f, 115.917f);
|
||||
path.lineTo(628.77f, 115.844f);
|
||||
path.lineTo(629.965f, 115.805f);
|
||||
path.lineTo(631.293f, 115.861f);
|
||||
path.lineTo(634.051f, 115.962f);
|
||||
path.cubicTo(634.911f, 115.962f, 635.092f, 115.597f, 635.092f, 115.291f);
|
||||
path.cubicTo(635.092f, 115.079f, 634.991f, 114.724f, 634.313f, 114.724f);
|
||||
path.lineTo(633.789f, 114.724f);
|
||||
path.cubicTo(633.118f, 114.724f, 632.053f, 114.382f, 632.053f, 113.464f);
|
||||
path.cubicTo(632.053f, 112.546f, 632.308f, 111.335f, 632.771f, 110.053f);
|
||||
path.cubicTo(632.773f, 110.049f, 635.916f, 100.81f, 635.916f, 100.81f);
|
||||
path.cubicTo(636.007f, 100.584f, 636.105f, 100.565f, 636.198f, 100.565f);
|
||||
path.lineTo(647.46f, 100.565f);
|
||||
path.cubicTo(647.598f, 100.565f, 647.627f, 100.586f, 647.704f, 100.737f);
|
||||
path.cubicTo(647.704f, 100.741f, 652.565f, 113.554f, 652.565f, 113.554f);
|
||||
path.cubicTo(652.641f, 113.754f, 652.679f, 113.942f, 652.679f, 114.105f);
|
||||
path.cubicTo(652.679f, 114.228f, 652.657f, 114.338f, 652.613f, 114.43f);
|
||||
path.cubicTo(652.544f, 114.574f, 652.447f, 114.619f, 652.409f, 114.632f);
|
||||
path.cubicTo(651.94f, 114.749f, 651.868f, 115.062f, 651.868f, 115.238f);
|
||||
path.cubicTo(651.868f, 115.767f, 652.46f, 115.797f, 653.44f, 115.845f);
|
||||
path.lineTo(653.681f, 115.858f);
|
||||
path.cubicTo(655.647f, 115.914f, 658.028f, 115.949f, 660.503f, 115.959f);
|
||||
path.cubicTo(660.58f, 115.962f, 660.652f, 115.962f, 660.713f, 115.962f);
|
||||
path.lineTo(660.787f, 115.96f);
|
||||
path.cubicTo(661.162f, 115.962f, 661.54f, 115.962f, 661.918f, 115.962f);
|
||||
path.cubicTo(662.139f, 115.962f, 662.33f, 115.947f, 662.496f, 115.918f);
|
||||
path.lineTo(665.439f, 115.845f);
|
||||
path.lineTo(666.633f, 115.806f);
|
||||
path.lineTo(667.962f, 115.862f);
|
||||
path.lineTo(670.719f, 115.963f);
|
||||
path.cubicTo(671.579f, 115.963f, 671.76f, 115.598f, 671.76f, 115.292f);
|
||||
path.cubicTo(671.76f, 115.08f, 671.659f, 114.725f, 670.981f, 114.725f);
|
||||
path.lineTo(670.457f, 114.725f);
|
||||
path.cubicTo(669.786f, 114.725f, 668.721f, 114.383f, 668.721f, 113.465f);
|
||||
path.cubicTo(668.721f, 112.547f, 668.976f, 111.336f, 669.439f, 110.054f);
|
||||
path.cubicTo(669.441f, 110.05f, 672.584f, 100.811f, 672.584f, 100.811f);
|
||||
path.cubicTo(672.675f, 100.585f, 672.773f, 100.566f, 672.866f, 100.566f);
|
||||
path.lineTo(684.128f, 100.566f);
|
||||
path.cubicTo(684.266f, 100.566f, 684.295f, 100.587f, 684.372f, 100.739f);
|
||||
path.cubicTo(684.372f, 100.743f, 689.233f, 113.556f, 689.233f, 113.556f);
|
||||
path.cubicTo(689.309f, 113.756f, 689.347f, 113.944f, 689.347f, 114.107f);
|
||||
path.cubicTo(689.347f, 114.23f, 689.325f, 114.34f, 689.281f, 114.431f);
|
||||
path.cubicTo(689.212f, 114.575f, 689.115f, 114.621f, 689.077f, 114.633f);
|
||||
path.cubicTo(688.608f, 114.75f, 688.536f, 115.063f, 688.536f, 115.239f);
|
||||
path.cubicTo(688.536f, 115.768f, 689.128f, 115.798f, 690.108f, 115.846f);
|
||||
path.lineTo(690.348f, 115.859f);
|
||||
path.cubicTo(692.687f, 115.926f, 695.611f, 115.963f, 698.586f, 115.963f);
|
||||
path.cubicTo(699.451f, 115.961f, 699.889f, 115.735f, 699.889f, 115.29f);
|
||||
path.close();
|
||||
path.moveTo(600.18f, 98.176f);
|
||||
path.cubicTo(600.181f, 98.171f, 600.185f, 98.158f, 600.185f, 98.158f);
|
||||
path.cubicTo(600.191f, 98.142f, 604.801f, 84.049f, 604.801f, 84.049f);
|
||||
path.cubicTo(604.865f, 83.857f, 604.915f, 83.756f, 604.951f, 83.697f);
|
||||
path.cubicTo(604.987f, 83.756f, 605.037f, 83.858f, 605.102f, 84.051f);
|
||||
path.cubicTo(605.103f, 84.054f, 610.08f, 98.149f, 610.08f, 98.149f);
|
||||
path.cubicTo(610.079f, 98.145f, 610.079f, 98.145f, 610.079f, 98.147f);
|
||||
path.cubicTo(610.079f, 98.149f, 610.081f, 98.164f, 610.083f, 98.176f);
|
||||
path.lineTo(600.18f, 98.176f);
|
||||
path.close();
|
||||
path.moveTo(636.849f, 98.176f);
|
||||
path.cubicTo(636.851f, 98.171f, 636.854f, 98.158f, 636.854f, 98.158f);
|
||||
path.cubicTo(636.859f, 98.142f, 641.469f, 84.049f, 641.469f, 84.049f);
|
||||
path.cubicTo(641.533f, 83.857f, 641.584f, 83.756f, 641.62f, 83.697f);
|
||||
path.cubicTo(641.656f, 83.756f, 641.706f, 83.857f, 641.771f, 84.051f);
|
||||
path.cubicTo(641.773f, 84.054f, 646.749f, 98.149f, 646.749f, 98.149f);
|
||||
path.cubicTo(646.749f, 98.145f, 646.748f, 98.145f, 646.748f, 98.147f);
|
||||
path.cubicTo(646.748f, 98.15f, 646.75f, 98.165f, 646.751f, 98.176f);
|
||||
path.lineTo(636.849f, 98.176f);
|
||||
path.close();
|
||||
path.moveTo(673.517f, 98.176f);
|
||||
path.cubicTo(673.519f, 98.171f, 673.522f, 98.158f, 673.522f, 98.158f);
|
||||
path.cubicTo(673.528f, 98.142f, 678.138f, 84.049f, 678.138f, 84.049f);
|
||||
path.cubicTo(678.202f, 83.857f, 678.252f, 83.756f, 678.288f, 83.697f);
|
||||
path.cubicTo(678.324f, 83.756f, 678.375f, 83.858f, 678.439f, 84.051f);
|
||||
path.cubicTo(678.44f, 84.054f, 683.417f, 98.149f, 683.417f, 98.149f);
|
||||
path.cubicTo(683.416f, 98.145f, 683.416f, 98.145f, 683.416f, 98.147f);
|
||||
path.cubicTo(683.416f, 98.149f, 683.418f, 98.164f, 683.42f, 98.176f);
|
||||
path.lineTo(673.517f, 98.176f);
|
||||
path.close();
|
||||
path.moveTo(702.086f, 115.256f);
|
||||
path.lineTo(702.089f, 115.257f);
|
||||
path.cubicTo(704.075f, 116.223f, 706.408f, 116.692f, 709.22f, 116.692f);
|
||||
path.cubicTo(712.384f, 116.692f, 715.17f, 115.918f, 717.275f, 114.454f);
|
||||
path.cubicTo(720.639f, 112.074f, 721.837f, 108.31f, 721.837f, 105.581f);
|
||||
path.cubicTo(721.837f, 101.538f, 720.57f, 98.203f, 714.092f, 93.115f);
|
||||
path.lineTo(712.625f, 91.966f);
|
||||
path.cubicTo(707.567f, 87.838f, 706.331f, 86.155f, 706.331f, 83.396f);
|
||||
path.cubicTo(706.331f, 79.927f, 708.819f, 77.595f, 712.519f, 77.595f);
|
||||
path.cubicTo(716.925f, 77.595f, 718.41f, 79.437f, 718.843f, 80.229f);
|
||||
path.cubicTo(719.131f, 80.754f, 719.442f, 82.122f, 719.494f, 82.739f);
|
||||
path.cubicTo(719.543f, 83.13f, 719.608f, 83.65f, 720.167f, 83.65f);
|
||||
path.cubicTo(720.789f, 83.65f, 720.789f, 82.704f, 720.789f, 82.195f);
|
||||
path.cubicTo(720.789f, 79.413f, 720.918f, 77.758f, 720.973f, 77.052f);
|
||||
path.lineTo(720.998f, 76.662f);
|
||||
path.cubicTo(720.998f, 76.113f, 720.581f, 76.043f, 720.219f, 76.043f);
|
||||
path.cubicTo(719.847f, 76.043f, 719.469f, 76.003f, 718.438f, 75.788f);
|
||||
path.cubicTo(716.936f, 75.428f, 715.369f, 75.26f, 713.514f, 75.26f);
|
||||
path.cubicTo(706.771f, 75.26f, 702.415f, 79.048f, 702.415f, 84.91f);
|
||||
path.cubicTo(702.415f, 88.438f, 703.589f, 91.748f, 709.319f, 96.434f);
|
||||
path.lineTo(711.676f, 98.365f);
|
||||
path.cubicTo(716.332f, 102.196f, 717.607f, 104.172f, 717.607f, 107.564f);
|
||||
path.cubicTo(717.607f, 110.888f, 715.121f, 114.253f, 710.371f, 114.253f);
|
||||
path.cubicTo(708.428f, 114.253f, 703.808f, 113.754f, 702.868f, 109.132f);
|
||||
path.cubicTo(702.716f, 108.424f, 702.716f, 107.718f, 702.716f, 107.25f);
|
||||
path.cubicTo(702.716f, 106.94f, 702.716f, 106.422f, 702.094f, 106.422f);
|
||||
path.cubicTo(701.519f, 106.422f, 701.455f, 107.116f, 701.421f, 107.488f);
|
||||
path.cubicTo(701.421f, 107.495f, 701.375f, 108.117f, 701.375f, 108.117f);
|
||||
path.cubicTo(701.293f, 109.171f, 701.158f, 110.933f, 701.158f, 113.044f);
|
||||
path.cubicTo(701.16f, 114.432f, 701.197f, 114.813f, 702.086f, 115.256f);
|
||||
path.close();
|
||||
path.moveTo(501.274f, 129.973f);
|
||||
path.lineTo(498.058f, 136.963f);
|
||||
path.lineTo(498.62f, 136.963f);
|
||||
path.lineTo(499.723f, 134.561f);
|
||||
path.lineTo(503.124f, 134.561f);
|
||||
path.lineTo(504.227f, 136.963f);
|
||||
path.lineTo(504.788f, 136.963f);
|
||||
path.lineTo(501.571f, 129.973f);
|
||||
path.lineTo(501.274f, 129.973f);
|
||||
path.close();
|
||||
path.moveTo(499.926f, 134.114f);
|
||||
path.lineTo(501.417f, 130.848f);
|
||||
path.lineTo(502.918f, 134.114f);
|
||||
path.lineTo(499.926f, 134.114f);
|
||||
path.close();
|
||||
path.moveTo(510.117f, 130.023f);
|
||||
path.lineTo(507.677f, 130.023f);
|
||||
path.lineTo(507.677f, 136.963f);
|
||||
path.lineTo(510.209f, 136.963f);
|
||||
path.cubicTo(512.966f, 136.963f, 513.916f, 135.101f, 513.916f, 133.493f);
|
||||
path.cubicTo(513.916f, 131.967f, 513.078f, 130.023f, 510.117f, 130.023f);
|
||||
path.close();
|
||||
path.moveTo(510.178f, 136.515f);
|
||||
path.lineTo(508.217f, 136.515f);
|
||||
path.lineTo(508.217f, 130.471f);
|
||||
path.lineTo(510.147f, 130.471f);
|
||||
path.cubicTo(512.036f, 130.471f, 513.333f, 131.712f, 513.333f, 133.493f);
|
||||
path.cubicTo(513.333f, 135.447f, 511.853f, 136.515f, 510.178f, 136.515f);
|
||||
path.close();
|
||||
path.moveTo(519.105f, 135.894f);
|
||||
path.lineTo(516.634f, 130.023f);
|
||||
path.lineTo(516.093f, 130.023f);
|
||||
path.lineTo(519.024f, 137.034f);
|
||||
path.lineTo(519.177f, 137.034f);
|
||||
path.lineTo(522.098f, 130.023f);
|
||||
path.lineTo(521.557f, 130.023f);
|
||||
path.lineTo(519.105f, 135.894f);
|
||||
path.close();
|
||||
path.moveTo(526.817f, 129.973f);
|
||||
path.lineTo(523.601f, 136.963f);
|
||||
path.lineTo(524.162f, 136.963f);
|
||||
path.lineTo(525.265f, 134.561f);
|
||||
path.lineTo(528.665f, 134.561f);
|
||||
path.lineTo(529.768f, 136.963f);
|
||||
path.lineTo(530.33f, 136.963f);
|
||||
path.lineTo(527.113f, 129.973f);
|
||||
path.lineTo(526.817f, 129.973f);
|
||||
path.close();
|
||||
path.moveTo(525.469f, 134.114f);
|
||||
path.lineTo(526.96f, 130.848f);
|
||||
path.lineTo(528.461f, 134.114f);
|
||||
path.lineTo(525.469f, 134.114f);
|
||||
path.close();
|
||||
path.moveTo(538.947f, 136.088f);
|
||||
path.lineTo(533.668f, 130.024f);
|
||||
path.lineTo(533.208f, 130.024f);
|
||||
path.lineTo(533.208f, 136.964f);
|
||||
path.lineTo(533.749f, 136.964f);
|
||||
path.lineTo(533.749f, 130.899f);
|
||||
path.lineTo(539.038f, 136.964f);
|
||||
path.lineTo(539.487f, 136.964f);
|
||||
path.lineTo(539.487f, 130.024f);
|
||||
path.lineTo(538.946f, 130.024f);
|
||||
path.lineTo(538.946f, 136.088f);
|
||||
path.lineTo(538.947f, 136.088f);
|
||||
path.close();
|
||||
path.moveTo(543.41f, 133.503f);
|
||||
path.cubicTo(543.41f, 131.743f, 544.717f, 130.43f, 546.453f, 130.43f);
|
||||
path.cubicTo(547.28f, 130.43f, 548.067f, 130.644f, 548.934f, 131.102f);
|
||||
path.lineTo(548.934f, 130.512f);
|
||||
path.cubicTo(548.087f, 130.125f, 547.26f, 129.932f, 546.483f, 129.932f);
|
||||
path.cubicTo(544.574f, 129.932f, 542.828f, 131.377f, 542.828f, 133.503f);
|
||||
path.cubicTo(542.828f, 135.538f, 544.411f, 137.054f, 546.534f, 137.054f);
|
||||
path.cubicTo(547.341f, 137.054f, 548.198f, 136.83f, 549.005f, 136.402f);
|
||||
path.lineTo(549.005f, 135.843f);
|
||||
path.cubicTo(548.055f, 136.341f, 547.31f, 136.555f, 546.523f, 136.555f);
|
||||
path.cubicTo(544.707f, 136.556f, 543.41f, 135.294f, 543.41f, 133.503f);
|
||||
path.close();
|
||||
path.moveTo(552.079f, 136.963f);
|
||||
path.lineTo(552.62f, 136.963f);
|
||||
path.lineTo(552.62f, 130.023f);
|
||||
path.lineTo(552.079f, 130.023f);
|
||||
path.lineTo(552.079f, 136.963f);
|
||||
path.close();
|
||||
path.moveTo(561.984f, 136.088f);
|
||||
path.lineTo(556.705f, 130.024f);
|
||||
path.lineTo(556.245f, 130.024f);
|
||||
path.lineTo(556.245f, 136.964f);
|
||||
path.lineTo(556.786f, 136.964f);
|
||||
path.lineTo(556.786f, 130.899f);
|
||||
path.lineTo(562.075f, 136.964f);
|
||||
path.lineTo(562.524f, 136.964f);
|
||||
path.lineTo(562.524f, 130.024f);
|
||||
path.lineTo(561.983f, 130.024f);
|
||||
path.lineTo(561.983f, 136.088f);
|
||||
path.lineTo(561.984f, 136.088f);
|
||||
path.close();
|
||||
path.moveTo(570.122f, 134.257f);
|
||||
path.lineTo(571.592f, 134.257f);
|
||||
path.lineTo(571.592f, 136.129f);
|
||||
path.cubicTo(571.041f, 136.403f, 570.489f, 136.556f, 569.683f, 136.556f);
|
||||
path.cubicTo(567.488f, 136.556f, 566.456f, 135.05f, 566.456f, 133.493f);
|
||||
path.cubicTo(566.456f, 131.733f, 567.763f, 130.43f, 569.529f, 130.43f);
|
||||
path.cubicTo(570.366f, 130.43f, 571.153f, 130.654f, 572, 131.132f);
|
||||
path.lineTo(572, 130.522f);
|
||||
path.cubicTo(571.02f, 130.084f, 570.397f, 129.932f, 569.61f, 129.932f);
|
||||
path.cubicTo(567.455f, 129.932f, 565.873f, 131.438f, 565.873f, 133.473f);
|
||||
path.cubicTo(565.873f, 135.529f, 567.496f, 137.055f, 569.661f, 137.055f);
|
||||
path.cubicTo(570.468f, 137.055f, 571.305f, 136.862f, 572.132f, 136.465f);
|
||||
path.lineTo(572.132f, 133.809f);
|
||||
path.lineTo(570.121f, 133.809f);
|
||||
path.lineTo(570.121f, 134.257f);
|
||||
path.lineTo(570.122f, 134.257f);
|
||||
path.close();
|
||||
path.moveTo(580.681f, 131.753f);
|
||||
path.cubicTo(580.681f, 131.001f, 581.314f, 130.43f, 582.151f, 130.43f);
|
||||
path.cubicTo(582.631f, 130.43f, 582.998f, 130.552f, 583.713f, 130.959f);
|
||||
path.lineTo(583.713f, 130.37f);
|
||||
path.cubicTo(583.172f, 130.075f, 582.641f, 129.933f, 582.099f, 129.933f);
|
||||
path.cubicTo(580.996f, 129.933f, 580.098f, 130.747f, 580.098f, 131.775f);
|
||||
path.cubicTo(580.098f, 134.065f, 583.417f, 133.2f, 583.417f, 135.173f);
|
||||
path.cubicTo(583.417f, 135.956f, 582.774f, 136.557f, 581.947f, 136.557f);
|
||||
path.cubicTo(581.406f, 136.557f, 580.966f, 136.374f, 580.191f, 135.814f);
|
||||
path.lineTo(580.191f, 136.445f);
|
||||
path.cubicTo(580.804f, 136.852f, 581.406f, 137.055f, 581.978f, 137.055f);
|
||||
path.cubicTo(583.111f, 137.055f, 584, 136.221f, 584, 135.152f);
|
||||
path.cubicTo(584, 132.72f, 580.681f, 133.605f, 580.681f, 131.753f);
|
||||
path.close();
|
||||
path.moveTo(587.543f, 133.503f);
|
||||
path.cubicTo(587.543f, 131.743f, 588.85f, 130.43f, 590.586f, 130.43f);
|
||||
path.cubicTo(591.413f, 130.43f, 592.199f, 130.644f, 593.067f, 131.102f);
|
||||
path.lineTo(593.067f, 130.512f);
|
||||
path.cubicTo(592.22f, 130.125f, 591.393f, 129.932f, 590.616f, 129.932f);
|
||||
path.cubicTo(588.707f, 129.932f, 586.96f, 131.377f, 586.96f, 133.503f);
|
||||
path.cubicTo(586.96f, 135.538f, 588.543f, 137.054f, 590.667f, 137.054f);
|
||||
path.cubicTo(591.473f, 137.054f, 592.331f, 136.83f, 593.138f, 136.402f);
|
||||
path.lineTo(593.138f, 135.843f);
|
||||
path.cubicTo(592.188f, 136.341f, 591.443f, 136.555f, 590.657f, 136.555f);
|
||||
path.cubicTo(588.84f, 136.556f, 587.543f, 135.294f, 587.543f, 133.503f);
|
||||
path.close();
|
||||
path.moveTo(596.212f, 136.963f);
|
||||
path.lineTo(596.753f, 136.963f);
|
||||
path.lineTo(596.753f, 130.023f);
|
||||
path.lineTo(596.212f, 130.023f);
|
||||
path.lineTo(596.212f, 136.963f);
|
||||
path.close();
|
||||
path.moveTo(600.94f, 133.697f);
|
||||
path.lineTo(604.116f, 133.697f);
|
||||
path.lineTo(604.116f, 133.25f);
|
||||
path.lineTo(600.94f, 133.25f);
|
||||
path.lineTo(600.94f, 130.472f);
|
||||
path.lineTo(604.198f, 130.472f);
|
||||
path.lineTo(604.198f, 130.024f);
|
||||
path.lineTo(600.399f, 130.024f);
|
||||
path.lineTo(600.399f, 136.964f);
|
||||
path.lineTo(604.279f, 136.964f);
|
||||
path.lineTo(604.279f, 136.516f);
|
||||
path.lineTo(600.94f, 136.516f);
|
||||
path.lineTo(600.94f, 133.697f);
|
||||
path.close();
|
||||
path.moveTo(613.163f, 136.088f);
|
||||
path.lineTo(607.884f, 130.024f);
|
||||
path.lineTo(607.424f, 130.024f);
|
||||
path.lineTo(607.424f, 136.964f);
|
||||
path.lineTo(607.965f, 136.964f);
|
||||
path.lineTo(607.965f, 130.899f);
|
||||
path.lineTo(613.254f, 136.964f);
|
||||
path.lineTo(613.703f, 136.964f);
|
||||
path.lineTo(613.703f, 130.024f);
|
||||
path.lineTo(613.162f, 130.024f);
|
||||
path.lineTo(613.162f, 136.088f);
|
||||
path.lineTo(613.163f, 136.088f);
|
||||
path.close();
|
||||
path.moveTo(617.625f, 133.503f);
|
||||
path.cubicTo(617.625f, 131.743f, 618.932f, 130.43f, 620.668f, 130.43f);
|
||||
path.cubicTo(621.495f, 130.43f, 622.281f, 130.644f, 623.149f, 131.102f);
|
||||
path.lineTo(623.149f, 130.512f);
|
||||
path.cubicTo(622.301f, 130.125f, 621.474f, 129.932f, 620.698f, 129.932f);
|
||||
path.cubicTo(618.789f, 129.932f, 617.042f, 131.377f, 617.042f, 133.503f);
|
||||
path.cubicTo(617.042f, 135.538f, 618.625f, 137.054f, 620.749f, 137.054f);
|
||||
path.cubicTo(621.556f, 137.054f, 622.413f, 136.83f, 623.22f, 136.402f);
|
||||
path.lineTo(623.22f, 135.843f);
|
||||
path.cubicTo(622.27f, 136.341f, 621.525f, 136.555f, 620.739f, 136.555f);
|
||||
path.cubicTo(618.922f, 136.556f, 617.625f, 135.294f, 617.625f, 133.503f);
|
||||
path.close();
|
||||
path.moveTo(626.856f, 133.697f);
|
||||
path.lineTo(630.032f, 133.697f);
|
||||
path.lineTo(630.032f, 133.25f);
|
||||
path.lineTo(626.856f, 133.25f);
|
||||
path.lineTo(626.856f, 130.472f);
|
||||
path.lineTo(630.114f, 130.472f);
|
||||
path.lineTo(630.114f, 130.024f);
|
||||
path.lineTo(626.316f, 130.024f);
|
||||
path.lineTo(626.316f, 136.964f);
|
||||
path.lineTo(630.196f, 136.964f);
|
||||
path.lineTo(630.196f, 136.516f);
|
||||
path.lineTo(626.857f, 136.516f);
|
||||
path.lineTo(626.857f, 133.697f);
|
||||
path.lineTo(626.856f, 133.697f);
|
||||
path.close();
|
||||
path.moveTo(633.115f, 136.963f);
|
||||
path.lineTo(633.33f, 136.963f);
|
||||
path.cubicTo(633.33f, 137.309f, 633.299f, 137.523f, 633.115f, 137.797f);
|
||||
path.lineTo(633.115f, 138.154f);
|
||||
path.cubicTo(633.565f, 137.828f, 633.779f, 137.269f, 633.779f, 136.75f);
|
||||
path.lineTo(633.779f, 135.976f);
|
||||
path.lineTo(633.115f, 135.976f);
|
||||
path.lineTo(633.115f, 136.963f);
|
||||
path.close();
|
||||
path.moveTo(641.511f, 131.753f);
|
||||
path.cubicTo(641.511f, 131.001f, 642.144f, 130.43f, 642.981f, 130.43f);
|
||||
path.cubicTo(643.461f, 130.43f, 643.828f, 130.552f, 644.544f, 130.959f);
|
||||
path.lineTo(644.544f, 130.37f);
|
||||
path.cubicTo(644.003f, 130.075f, 643.472f, 129.933f, 642.931f, 129.933f);
|
||||
path.cubicTo(641.828f, 129.933f, 640.929f, 130.747f, 640.929f, 131.775f);
|
||||
path.cubicTo(640.929f, 134.065f, 644.247f, 133.2f, 644.247f, 135.173f);
|
||||
path.cubicTo(644.247f, 135.956f, 643.604f, 136.557f, 642.777f, 136.557f);
|
||||
path.cubicTo(642.236f, 136.557f, 641.797f, 136.374f, 641.02f, 135.814f);
|
||||
path.lineTo(641.02f, 136.445f);
|
||||
path.cubicTo(641.633f, 136.852f, 642.235f, 137.055f, 642.807f, 137.055f);
|
||||
path.cubicTo(643.941f, 137.055f, 644.829f, 136.221f, 644.829f, 135.152f);
|
||||
path.cubicTo(644.829f, 132.72f, 641.511f, 133.605f, 641.511f, 131.753f);
|
||||
path.close();
|
||||
path.moveTo(648.649f, 133.697f);
|
||||
path.lineTo(651.824f, 133.697f);
|
||||
path.lineTo(651.824f, 133.25f);
|
||||
path.lineTo(648.649f, 133.25f);
|
||||
path.lineTo(648.649f, 130.472f);
|
||||
path.lineTo(651.906f, 130.472f);
|
||||
path.lineTo(651.906f, 130.024f);
|
||||
path.lineTo(648.107f, 130.024f);
|
||||
path.lineTo(648.107f, 136.964f);
|
||||
path.lineTo(651.988f, 136.964f);
|
||||
path.lineTo(651.988f, 136.516f);
|
||||
path.lineTo(648.649f, 136.516f);
|
||||
path.lineTo(648.649f, 133.697f);
|
||||
path.close();
|
||||
path.moveTo(657.91f, 133.503f);
|
||||
path.cubicTo(658.799f, 133.177f, 659.237f, 132.618f, 659.237f, 131.814f);
|
||||
path.cubicTo(659.237f, 130.888f, 658.635f, 130.023f, 656.929f, 130.023f);
|
||||
path.lineTo(655.142f, 130.023f);
|
||||
path.lineTo(655.142f, 136.963f);
|
||||
path.lineTo(655.683f, 136.963f);
|
||||
path.lineTo(655.683f, 133.635f);
|
||||
path.lineTo(656.623f, 133.635f);
|
||||
path.cubicTo(657.46f, 133.635f, 657.726f, 133.747f, 658.563f, 135.06f);
|
||||
path.lineTo(659.778f, 136.963f);
|
||||
path.lineTo(660.411f, 136.963f);
|
||||
path.lineTo(658.838f, 134.561f);
|
||||
path.cubicTo(658.513f, 134.073f, 658.237f, 133.676f, 657.91f, 133.503f);
|
||||
path.close();
|
||||
path.moveTo(656.838f, 133.188f);
|
||||
path.lineTo(655.684f, 133.188f);
|
||||
path.lineTo(655.684f, 130.472f);
|
||||
path.lineTo(656.817f, 130.472f);
|
||||
path.cubicTo(658.094f, 130.472f, 658.655f, 131.041f, 658.655f, 131.825f);
|
||||
path.cubicTo(658.655f, 132.659f, 658.063f, 133.188f, 656.838f, 133.188f);
|
||||
path.close();
|
||||
path.moveTo(664.968f, 135.894f);
|
||||
path.lineTo(662.497f, 130.023f);
|
||||
path.lineTo(661.956f, 130.023f);
|
||||
path.lineTo(664.887f, 137.034f);
|
||||
path.lineTo(665.04f, 137.034f);
|
||||
path.lineTo(667.961f, 130.023f);
|
||||
path.lineTo(667.42f, 130.023f);
|
||||
path.lineTo(664.968f, 135.894f);
|
||||
path.close();
|
||||
path.moveTo(670.829f, 136.963f);
|
||||
path.lineTo(671.37f, 136.963f);
|
||||
path.lineTo(671.37f, 130.023f);
|
||||
path.lineTo(670.829f, 130.023f);
|
||||
path.lineTo(670.829f, 136.963f);
|
||||
path.close();
|
||||
path.moveTo(680.734f, 136.088f);
|
||||
path.lineTo(675.455f, 130.024f);
|
||||
path.lineTo(674.995f, 130.024f);
|
||||
path.lineTo(674.995f, 136.964f);
|
||||
path.lineTo(675.536f, 136.964f);
|
||||
path.lineTo(675.536f, 130.899f);
|
||||
path.lineTo(680.826f, 136.964f);
|
||||
path.lineTo(681.275f, 136.964f);
|
||||
path.lineTo(681.275f, 130.024f);
|
||||
path.lineTo(680.733f, 130.024f);
|
||||
path.lineTo(680.733f, 136.088f);
|
||||
path.lineTo(680.734f, 136.088f);
|
||||
path.close();
|
||||
path.moveTo(688.873f, 134.257f);
|
||||
path.lineTo(690.343f, 134.257f);
|
||||
path.lineTo(690.343f, 136.129f);
|
||||
path.cubicTo(689.791f, 136.403f, 689.24f, 136.556f, 688.433f, 136.556f);
|
||||
path.cubicTo(686.238f, 136.556f, 685.206f, 135.05f, 685.206f, 133.493f);
|
||||
path.cubicTo(685.206f, 131.733f, 686.514f, 130.43f, 688.28f, 130.43f);
|
||||
path.cubicTo(689.117f, 130.43f, 689.903f, 130.654f, 690.751f, 131.132f);
|
||||
path.lineTo(690.751f, 130.522f);
|
||||
path.cubicTo(689.771f, 130.084f, 689.148f, 129.932f, 688.362f, 129.932f);
|
||||
path.cubicTo(686.207f, 129.932f, 684.624f, 131.438f, 684.624f, 133.473f);
|
||||
path.cubicTo(684.624f, 135.529f, 686.247f, 137.055f, 688.413f, 137.055f);
|
||||
path.cubicTo(689.219f, 137.055f, 690.057f, 136.862f, 690.884f, 136.465f);
|
||||
path.lineTo(690.884f, 133.809f);
|
||||
path.lineTo(688.873f, 133.809f);
|
||||
path.lineTo(688.873f, 134.257f);
|
||||
path.close();
|
||||
path.moveTo(699.432f, 131.753f);
|
||||
path.cubicTo(699.432f, 131.001f, 700.065f, 130.43f, 700.902f, 130.43f);
|
||||
path.cubicTo(701.381f, 130.43f, 701.749f, 130.552f, 702.464f, 130.959f);
|
||||
path.lineTo(702.464f, 130.37f);
|
||||
path.cubicTo(701.923f, 130.075f, 701.391f, 129.933f, 700.85f, 129.933f);
|
||||
path.cubicTo(699.747f, 129.933f, 698.849f, 130.747f, 698.849f, 131.775f);
|
||||
path.cubicTo(698.849f, 134.065f, 702.168f, 133.2f, 702.168f, 135.173f);
|
||||
path.cubicTo(702.168f, 135.956f, 701.525f, 136.557f, 700.698f, 136.557f);
|
||||
path.cubicTo(700.156f, 136.557f, 699.718f, 136.374f, 698.941f, 135.814f);
|
||||
path.lineTo(698.941f, 136.445f);
|
||||
path.cubicTo(699.553f, 136.852f, 700.156f, 137.055f, 700.728f, 137.055f);
|
||||
path.cubicTo(701.862f, 137.055f, 702.75f, 136.221f, 702.75f, 135.152f);
|
||||
path.cubicTo(702.75f, 132.72f, 699.432f, 133.605f, 699.432f, 131.753f);
|
||||
path.close();
|
||||
path.moveTo(709.407f, 129.932f);
|
||||
path.cubicTo(707.345f, 129.932f, 705.731f, 131.499f, 705.731f, 133.493f);
|
||||
path.cubicTo(705.731f, 135.488f, 707.345f, 137.054f, 709.407f, 137.054f);
|
||||
path.cubicTo(711.48f, 137.054f, 713.104f, 135.487f, 713.104f, 133.493f);
|
||||
path.cubicTo(713.104f, 131.499f, 711.481f, 129.932f, 709.407f, 129.932f);
|
||||
path.close();
|
||||
path.moveTo(709.428f, 136.556f);
|
||||
path.cubicTo(707.683f, 136.556f, 706.314f, 135.223f, 706.314f, 133.493f);
|
||||
path.cubicTo(706.314f, 131.763f, 707.682f, 130.43f, 709.428f, 130.43f);
|
||||
path.cubicTo(711.175f, 130.43f, 712.523f, 131.763f, 712.523f, 133.493f);
|
||||
path.cubicTo(712.522f, 135.223f, 711.175f, 136.556f, 709.428f, 136.556f);
|
||||
path.close();
|
||||
path.moveTo(716.739f, 133.503f);
|
||||
path.cubicTo(716.739f, 131.743f, 718.046f, 130.43f, 719.782f, 130.43f);
|
||||
path.cubicTo(720.609f, 130.43f, 721.395f, 130.644f, 722.264f, 131.102f);
|
||||
path.lineTo(722.264f, 130.512f);
|
||||
path.cubicTo(721.416f, 130.125f, 720.589f, 129.932f, 719.813f, 129.932f);
|
||||
path.cubicTo(717.903f, 129.932f, 716.157f, 131.377f, 716.157f, 133.503f);
|
||||
path.cubicTo(716.157f, 135.538f, 717.74f, 137.054f, 719.863f, 137.054f);
|
||||
path.cubicTo(720.67f, 137.054f, 721.528f, 136.83f, 722.335f, 136.402f);
|
||||
path.lineTo(722.335f, 135.843f);
|
||||
path.cubicTo(721.385f, 136.341f, 720.64f, 136.555f, 719.854f, 136.555f);
|
||||
path.cubicTo(718.037f, 136.556f, 716.739f, 135.294f, 716.739f, 133.503f);
|
||||
path.close();
|
||||
path.moveTo(725.409f, 136.963f);
|
||||
path.lineTo(725.95f, 136.963f);
|
||||
path.lineTo(725.95f, 130.023f);
|
||||
path.lineTo(725.409f, 130.023f);
|
||||
path.lineTo(725.409f, 136.963f);
|
||||
path.close();
|
||||
path.moveTo(730.136f, 133.697f);
|
||||
path.lineTo(733.312f, 133.697f);
|
||||
path.lineTo(733.312f, 133.25f);
|
||||
path.lineTo(730.136f, 133.25f);
|
||||
path.lineTo(730.136f, 130.472f);
|
||||
path.lineTo(733.393f, 130.472f);
|
||||
path.lineTo(733.393f, 130.024f);
|
||||
path.lineTo(729.595f, 130.024f);
|
||||
path.lineTo(729.595f, 136.964f);
|
||||
path.lineTo(733.475f, 136.964f);
|
||||
path.lineTo(733.475f, 136.516f);
|
||||
path.lineTo(730.136f, 136.516f);
|
||||
path.lineTo(730.136f, 133.697f);
|
||||
path.close();
|
||||
path.moveTo(735.865f, 130.472f);
|
||||
path.lineTo(738.479f, 130.472f);
|
||||
path.lineTo(738.479f, 136.964f);
|
||||
path.lineTo(739.02f, 136.964f);
|
||||
path.lineTo(739.02f, 130.472f);
|
||||
path.lineTo(741.634f, 130.472f);
|
||||
path.lineTo(741.634f, 130.024f);
|
||||
path.lineTo(735.865f, 130.024f);
|
||||
path.lineTo(735.865f, 130.472f);
|
||||
path.close();
|
||||
path.moveTo(749.017f, 130.023f);
|
||||
path.lineTo(746.699f, 132.771f);
|
||||
path.lineTo(744.371f, 130.023f);
|
||||
path.lineTo(743.717f, 130.023f);
|
||||
path.lineTo(746.423f, 133.239f);
|
||||
path.lineTo(746.423f, 136.963f);
|
||||
path.lineTo(746.964f, 136.963f);
|
||||
path.lineTo(746.964f, 133.239f);
|
||||
path.lineTo(749.67f, 130.023f);
|
||||
path.lineTo(749.017f, 130.023f);
|
||||
path.close();
|
||||
path.moveTo(578.773f, 115.549f);
|
||||
path.lineTo(578.773f, 62.773f);
|
||||
path.lineTo(557.571f, 62.773f);
|
||||
path.cubicTo(562.752f, 67.658f, 575.797f, 106.652f, 578.773f, 115.549f);
|
||||
path.close();
|
||||
path.moveTo(544.754f, 62.861f);
|
||||
path.lineTo(524.496f, 62.861f);
|
||||
path.lineTo(524.496f, 115.55f);
|
||||
path.lineTo(524.934f, 115.55f);
|
||||
path.lineTo(544.544f, 64.169f);
|
||||
path.lineTo(528.157f, 115.549f);
|
||||
path.lineTo(528.682f, 115.549f);
|
||||
path.lineTo(546.557f, 67.658f);
|
||||
path.lineTo(531.675f, 115.548f);
|
||||
path.lineTo(532.376f, 115.548f);
|
||||
path.lineTo(548.57f, 71.846f);
|
||||
path.lineTo(535.293f, 115.507f);
|
||||
path.lineTo(535.906f, 115.507f);
|
||||
path.lineTo(544.281f, 97.58f);
|
||||
path.lineTo(542.267f, 97.58f);
|
||||
path.lineTo(550.409f, 76.033f);
|
||||
path.lineTo(544.281f, 97.578f);
|
||||
path.lineTo(546.119f, 97.578f);
|
||||
path.lineTo(538.678f, 115.551f);
|
||||
path.lineTo(565.029f, 115.551f);
|
||||
path.cubicTo(562.052f, 106.477f, 550.759f, 67.92f, 544.754f, 62.861f);
|
||||
path.close();
|
||||
SkPath path2(path);
|
||||
testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
|
||||
}
|
||||
|
||||
static void (*skipTest)(skiatest::Reporter* , const char* filename) = 0;
|
||||
static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;
|
||||
static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;
|
||||
|
||||
static struct TestDesc tests[] = {
|
||||
TEST(skpwww_gorcraft_ru_1),
|
||||
TEST(http___www_project2061_org),
|
||||
TEST(http___www_emuleteca_cl_27),
|
||||
TEST(http___www_emuleteca_cl_26),
|
||||
TEST(http___www_emuleteca_cl_28),
|
||||
TEST(skpwww_nimble_com_au_1),
|
||||
TEST(skpwww_mybuilder_com_1),
|
||||
TEST(skpwww_neda_net_2), // small coincident line segments (fixed)
|
||||
TEST(skpwww_neda_net_2),
|
||||
TEST(skpwww_woothemes_com_1),
|
||||
TEST(skpwww_neda_net_1),
|
||||
TEST(skpwww_tinytots_com_1), // completely coincident reversed cubics (dup)
|
||||
TEST(skpwww_tinytots_com_1),
|
||||
TEST(skpwww_educationalcraft_com_4a),
|
||||
TEST(skpwww_lptemp_com_3),
|
||||
TEST(skpwww_shinydemos_com_5),
|
||||
|
@ -7,6 +7,14 @@
|
||||
|
||||
#include "SkPathOpsTSect.h"
|
||||
|
||||
template<typename TCurve, typename OppCurve>
|
||||
char SkTCoincident<TCurve, OppCurve>::dumpIsCoincidentStr() const {
|
||||
if (!!fCoincident != fCoincident) {
|
||||
return '?';
|
||||
}
|
||||
return fCoincident ? '*' : 0;
|
||||
}
|
||||
|
||||
template<typename TCurve, typename OppCurve>
|
||||
void SkTCoincident<TCurve, OppCurve>::dump() const {
|
||||
SkDebugf("t=%1.9g pt=(%1.9g,%1.9g)%s\n", fPerpT, fPerpPt.fX, fPerpPt.fY,
|
||||
@ -201,11 +209,13 @@ void SkTSpan<TCurve, OppCurve>::dumpCoin() const {
|
||||
|
||||
template<typename TCurve, typename OppCurve>
|
||||
void SkTSpan<TCurve, OppCurve>::dumpID() const {
|
||||
if (fCoinStart.isCoincident()) {
|
||||
SkDebugf("%c", '*');
|
||||
char cS = fCoinStart.dumpIsCoincidentStr();
|
||||
if (cS) {
|
||||
SkDebugf("%c", cS);
|
||||
}
|
||||
SkDebugf("%d", debugID());
|
||||
if (fCoinEnd.isCoincident()) {
|
||||
SkDebugf("%c", '*');
|
||||
char cE = fCoinEnd.dumpIsCoincidentStr();
|
||||
if (cE) {
|
||||
SkDebugf("%c", cE);
|
||||
}
|
||||
}
|
||||
|
@ -6,9 +6,22 @@
|
||||
<title></title>
|
||||
<div style="height:0">
|
||||
|
||||
<div id="cubics">
|
||||
{{{231.80000305175781, 2084.800048828125}, {255.60000610351562, 2084.800048828125}, {275, 2065.39990234375}, {275, 2041.5999755859375}}},
|
||||
{{{275, 2041.5999755859375}, {275, 2084.800048828125}, {231.80000305175781, 2084.800048828125}}, 0.707107008},
|
||||
<div id="conics">
|
||||
{{{78.000016756859424, 4590.0127645689281}, {78, 4590.005859375}}},
|
||||
{{{78.000022914349017, 4590.0165822692597}, {78.000005725317905, 4590.0082887743229}}},
|
||||
{{{{83, 4595}, {78.008674621582031, 4595}, {78, 4590.005859375}}}, 0.707720578f},
|
||||
{{{{84, 4596}, {78, 4596}, {78, 4590}}}, 0.707106769f},
|
||||
</div>
|
||||
|
||||
<div id="conicLines">
|
||||
{{{78.000016756859424, 4590.0127645689281}, {78, 4590.005859375}}},
|
||||
{{{78.000022914349017, 4590.0165822692597}, {78.000005725317905, 4590.0082887743229}}},
|
||||
</div>
|
||||
|
||||
<div id="thisopp">
|
||||
{{{78.000016756859424, 4590.0127645689281}, {78, 4590.005859375}}},
|
||||
{{{{84, 4596}, {78, 4596}, {78, 4590}}}, 0.707106769f},
|
||||
{{{78.0000055,4590.00813) (78.0000367,4590.02099
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -16,7 +29,9 @@
|
||||
<script type="text/javascript">
|
||||
|
||||
var testDivs = [
|
||||
cubics,
|
||||
conics,
|
||||
conicLines,
|
||||
thisopp,
|
||||
];
|
||||
|
||||
var decimal_places = 3;
|
||||
|
@ -2,6 +2,8 @@
|
||||
<head>
|
||||
<div height="0" hidden="true">
|
||||
|
||||
Skia UnitTests: --match PathOpsSkp$ --resourcePath resources\ SK_DEBUG
|
||||
|
||||
<div id="skpwww_gorcraft_ru_1">
|
||||
seg=1 {{{{1170, 4559}, {1176, 4559}, {1176, 4565}}}, 0.707106769f}
|
||||
seg=2 {{{1176, 4565}, {1176, 4590}}}
|
||||
@ -31,41 +33,6 @@ SkOpSegment::addT insert t=0.931066176 segID=4 spanID=29
|
||||
SkOpSegment::addT insert t=0.972972973 segID=12 spanID=30
|
||||
debugShowConicLineIntersection no intersect {{{{84,4596}, {78,4596}, {78,4590}}}, 0.707106769} {{{1171,4595}, {83,4595}}}
|
||||
debugShowConicLineIntersection no intersect {{{{83,4595}, {78.0086746,4595}, {78,4590.00586}}}, 0.707720578} {{{78,4590}, {78,4565}}}
|
||||
id=1 1=(0,1) [4,2] id=2 2=(0,0.5) [1] 4=(0.5,1) [1]
|
||||
id=1 1=(0,0.5) [4,2] 3=(0.5,1) [4] id=2 2=(0,0.5) [1] 4=(0.5,1) [3,1]
|
||||
id=1 1=(0,0.5) [2] 3=(0.5,1) [6,4] id=2 2=(0,0.5) [1] 4=(0.5,0.75) [3] 6=(0.75,1) [3]
|
||||
id=1 3=(0.5,1) [6,4] id=2 4=(0.5,0.75) [3] 6=(0.75,1) [3]
|
||||
id=1 3=(0.5,0.75) [6,4] 5=(0.75,1) [6] id=2 4=(0.5,0.75) [3] 6=(0.75,1) [5,3]
|
||||
id=1 3=(0.5,0.75) [4] 5=(0.75,1) [10,6] id=2 4=(0.5,0.75) [3] 6=(0.75,0.875) [5] 10=(0.875,1) [5]
|
||||
id=1 5=(0.75,1) [10,6] id=2 6=(0.75,0.875) [5] 10=(0.875,1) [5]
|
||||
id=1 5=(0.75,0.875) [10,6] 7=(0.875,1) [10] id=2 6=(0.75,0.875) [5] 10=(0.875,1) [7,5]
|
||||
id=1 5=(0.75,0.875) [10] 7=(0.875,1) [10] id=2 10=(0.875,1) [7,5]
|
||||
id=1 7=(0.875,1) [16,10] id=2 10=(0.875,0.9375) [7] 16=(0.9375,1) [7]
|
||||
id=1 7=(0.875,0.9375) [16,10] 9=(0.9375,1) [16] id=2 10=(0.875,0.9375) [7] 16=(0.9375,1) [9,7]
|
||||
id=1 7=(0.875,0.9375) [16] 9=(0.9375,1) [16] id=2 16=(0.9375,1) [9,7]
|
||||
id=1 9=(0.9375,1) [20,16] id=2 16=(0.9375,0.96875) [9] 20=(0.96875,1) [9]
|
||||
id=1 9=(0.9375,0.96875) [20,16] 11=(0.96875,1) [20] id=2 16=(0.9375,0.96875) [9] 20=(0.96875,1) [11,9]
|
||||
id=1 9=(0.9375,0.96875) [20] 11=(0.96875,1) [20] id=2 20=(0.96875,1) [11,9]
|
||||
id=1 11=(0.96875,1) [24,20] id=2 20=(0.96875,0.984375) [11] 24=(0.984375,1) [11]
|
||||
id=1 11=(0.96875,0.984375) [24,20] 13=(0.984375,1) [24] id=2 20=(0.96875,0.984375) [11] 24=(0.984375,1) [13,11]
|
||||
id=1 11=(0.96875,0.984375) [24] 13=(0.984375,1) [24] id=2 24=(0.984375,1) [13,11]
|
||||
id=1 13=(0.984375,1) [28,24] id=2 24=(0.984375,0.992188) [13] 28=(0.992188,1) [13]
|
||||
id=1 13=(0.984375,0.992188) [24] 15=(0.992188,1) [28] id=2 24=(0.984375,0.992188) [13] 28=(0.992188,1) [15]
|
||||
id=1 15=(0.992188,1) [28] id=2 28=(0.992188,1) [15]
|
||||
id=1 15=(0.992188,1) [32,28] id=2 28=(0.992188,0.996094) [15] 32=(0.996094,1) [15]
|
||||
id=1 15=(0.992188,0.996094) [28] 17=(0.996094,1) [28,32] id=2 28=(0.992188,0.996094) [17,15] 32=(0.996094,1) [17]
|
||||
id=1 17=(0.996094,1) [32] id=2 32=(0.996094,1) [17]
|
||||
id=1 17=(0.996094,1) [36,32] id=2 32=(0.996094,0.998047) [17] 36=(0.998047,1) [17]
|
||||
id=1 19=(0.998047,1) [36] id=2 36=(0.998047,1) [19]
|
||||
id=1 19=(0.998047,1) [38,36] id=2 36=(0.998047,0.999023) [19] 38=(0.999023,1) [19]
|
||||
setPerp t=0.998046875 cPt=(78.0000229,4590.01658) == oppT=0.998483762 fPerpPt=(78.0000301,4590.01658)
|
||||
setPerp t=0.999023438 cPt=(78.0000057,4590.00829) == oppT=0.99965636 fPerpPt=(78.0000048,4590.00829)
|
||||
setPerp t=0.999023438 cPt=(78.0000168,4590.01276) == oppT=0.998496341 fPerpPt=(78.0000136,4590.01276)
|
||||
setPerp t=0.998046875 cPt=(78.0000229,4590.01658) == oppT=0.998483762 fPerpPt=(78.0000301,4590.01658)
|
||||
setPerp t=0.999023438 cPt=(78.0000057,4590.00829) == oppT=0.99965636 fPerpPt=(78.0000048,4590.00829)
|
||||
setPerp t=0.999023438 cPt=(78.0000168,4590.01276) == oppT=0.998496341 fPerpPt=(78.0000136,4590.01276)
|
||||
setPerp t=0.999339899 cPt=(78.0000103,4590.01053) == oppT=0.998759893 fPerpPt=(78.0000092,4590.01053)
|
||||
id=1 21=(0.99934,0.99934) [36] id=2 36=(0.99876,0.99876) [21]
|
||||
debugShowConicIntersection wtTs[0]=0.999339899 {{{{83,4595}, {78.0086746,4595}, {78,4590.00586}}}, 0.707720578} {{78.0000076,4590.01074}} wnTs[0]=0.99876 {{{{84,4596}, {78,4596}, {78,4590}}}, 0.707106769}
|
||||
SkOpSegment::addT insert t=0.999339899 segID=5 spanID=31
|
||||
SkOpSegment::addT insert t=0.998759893 segID=14 spanID=32
|
||||
@ -74,34 +41,6 @@ SkOpSegment::addT insert t=0.000234320081 segID=6 spanID=33
|
||||
debugShowConicLineIntersection wtTs[0]=0 {{{{78,4565}, {78,4559}, {84,4559}}}, 0.707106769} {{78,4565}} wnTs[0]=1 {{{78,4590.00586}, {78,4565}}}
|
||||
debugShowConicLineIntersection wtTs[0]=1 {{{{84,4596}, {78,4596}, {78,4590}}}, 0.707106769} {{78,4590}} wnTs[0]=0.00023432 {{{78,4590.00586}, {78,4565}}}
|
||||
debugShowConicLineIntersection wtTs[0]=0 {{{{78,4565}, {78,4559}, {84,4559}}}, 0.707106769} {{78,4565}} wnTs[0]=1 {{{78,4590}, {78,4565}}}
|
||||
id=1 1=(0,1) [4,2] id=2 2=(0,0.5) [1] 4=(0.5,1) [1]
|
||||
id=1 1=(0,0.5) [4,2] 3=(0.5,1) [2,4] id=2 2=(0,0.5) [3,1] 4=(0.5,1) [3,1]
|
||||
id=1 1=(0,0.5) [6,4,2] 3=(0.5,1) [6,4] id=2 2=(0,0.25) [1] 6=(0.25,0.5) [1,3] 4=(0.5,1) [3,1]
|
||||
id=1 1=(0,0.25) [6,2] 5=(0.25,0.5) [2,4,6] 3=(0.5,1) [6,4] id=2 2=(0,0.25) [5,1] 6=(0.25,0.5) [5,1,3] 4=(0.5,1) [5,3]
|
||||
id=1 1=(0,0.25) [6,2] 5=(0.25,0.5) [2,4,6] 3=(0.5,1) [8,6,4] id=2 2=(0,0.25) [5,1] 6=(0.25,0.5) [5,1,3] 4=(0.5,0.75) [5,3] 8=(0.75,1) [3]
|
||||
id=1 1=(0,0.25) [6,2] 5=(0.25,0.5) [2,4,6] 3=(0.5,0.75) [8,6,4] 7=(0.75,1) [4,8] id=2 2=(0,0.25) [5,1] 6=(0.25,0.5) [5,1,3] 4=(0.5,0.75) [7,5,3] 8=(0.75,1) [7,3]
|
||||
id=1 1=(0,0.25) [6,2] 5=(0.25,0.5) [2,4,6] 3=(0.5,0.75) [8,6,4] 7=(0.75,1) [10,4,8] id=2 2=(0,0.25) [5,1] 6=(0.25,0.5) [5,1,3] 4=(0.5,0.75) [7,5,3] 8=(0.75,0.875) [7,3] 10=(0.875,1) [7]
|
||||
id=1 1=(0,0.25) [6,2] 5=(0.25,0.5) [2,4,6] 3=(0.5,0.75) [8,6,4] 7=(0.75,0.875) [10,4,8] 9=(0.875,1) [8,10] id=2 2=(0,0.25) [5,1] 6=(0.25,0.5) [5,1,3] 4=(0.5,0.75) [7,5,3] 8=(0.75,0.875) [9,7,3] 10=(0.875,1) [9,7]
|
||||
id=1 1=(0,0.25) [12,6,2] 5=(0.25,0.5) [12,4,6] 3=(0.5,0.75) [8,6,4] 7=(0.75,0.875) [10,4,8] 9=(0.875,1) [8,10] id=2 2=(0,0.125) [1] 12=(0.125,0.25) [1,5] 6=(0.25,0.5) [5,1,3] 4=(0.5,0.75) [7,5,3] 8=(0.75,0.875) [9,7,3] 10=(0.875,1) [9,7]
|
||||
id=1 1=(0,0.125) [12,2] 11=(0.125,0.25) [2,6,12] 5=(0.25,0.5) [12,4,6] 3=(0.5,0.75) [8,6,4] 7=(0.75,0.875) [10,4,8] 9=(0.875,1) [8,10] id=2 2=(0,0.125) [11,1] 12=(0.125,0.25) [11,1,5] 6=(0.25,0.5) [11,5,3] 4=(0.5,0.75) [7,5,3] 8=(0.75,0.875) [9,7,3] 10=(0.875,1) [9,7]
|
||||
id=1 1=(0,0.125) [12,2] 11=(0.125,0.25) [2,6,12] 5=(0.25,0.5) [14,12,4,6] 3=(0.5,0.75) [14,8,4] 7=(0.75,0.875) [10,4,8] 9=(0.875,1) [8,10] id=2 2=(0,0.125) [11,1] 12=(0.125,0.25) [11,1,5] 6=(0.25,0.375) [11,5] 14=(0.375,0.5) [3,5] 4=(0.5,0.75) [7,5,3] 8=(0.75,0.875) [9,7,3] 10=(0.875,1) [9,7]
|
||||
id=1 1=(0,0.125) [12,2] 11=(0.125,0.25) [2,6,12] 5=(0.25,0.375) [14,12,6] 13=(0.375,0.5) [6,4,14] 3=(0.5,0.75) [14,8,4] 7=(0.75,0.875) [10,4,8] 9=(0.875,1) [8,10] id=2 2=(0,0.125) [11,1] 12=(0.125,0.25) [11,1,5] 6=(0.25,0.375) [13,11,5] 14=(0.375,0.5) [13,3,5] 4=(0.5,0.75) [13,7,3] 8=(0.75,0.875) [9,7,3] 10=(0.875,1) [9,7]
|
||||
id=1 1=(0,0.125) [12,2] 11=(0.125,0.25) [2,6,12] 5=(0.25,0.375) [14,12,6] 13=(0.375,0.5) [6,4,14] 3=(0.5,0.75) [16,14,8,4] 7=(0.75,0.875) [16,10,8] 9=(0.875,1) [8,10] id=2 2=(0,0.125) [11,1] 12=(0.125,0.25) [11,1,5] 6=(0.25,0.375) [13,11,5] 14=(0.375,0.5) [13,3,5] 4=(0.5,0.625) [13,3] 16=(0.625,0.75) [3,7] 8=(0.75,0.875) [9,7,3] 10=(0.875,1) [9,7]
|
||||
id=1 1=(0,0.125) [12,2] 11=(0.125,0.25) [2,6,12] 5=(0.25,0.375) [14,12,6] 13=(0.375,0.5) [6,4,14] 3=(0.5,0.625) [16,14,4] 15=(0.625,0.75) [4,8,16] 7=(0.75,0.875) [16,10,8] 9=(0.875,1) [8,10] id=2 2=(0,0.125) [11,1] 12=(0.125,0.25) [11,1,5] 6=(0.25,0.375) [13,11,5] 14=(0.375,0.5) [13,3,5] 4=(0.5,0.625) [15,13,3] 16=(0.625,0.75) [15,3,7] 8=(0.75,0.875) [15,9,7] 10=(0.875,1) [9,7]
|
||||
id=1 1=(0,0.125) [12,2] 11=(0.125,0.25) [18,2,6,12] 5=(0.25,0.375) [18,14,6] 13=(0.375,0.5) [6,4,14] 3=(0.5,0.625) [16,14,4] 15=(0.625,0.75) [4,8,16] 7=(0.75,0.875) [16,10,8] 9=(0.875,1) [8,10] id=2 2=(0,0.125) [11,1] 12=(0.125,0.1875) [11,1] 18=(0.1875,0.25) [5,11] 6=(0.25,0.375) [13,11,5] 14=(0.375,0.5) [13,3,5] 4=(0.5,0.625) [15,13,3] 16=(0.625,0.75) [15,3,7] 8=(0.75,0.875) [15,9,7] 10=(0.875,1) [9,7]
|
||||
setPerp t=0 cPt=(78,4565) == oppT=0 fPerpPt=(78,4565)
|
||||
setPerp t=0.125 cPt=(78.1001678,4563.90822) == oppT=0.125 fPerpPt=(78.1001678,4563.90822)
|
||||
setPerp t=0.1875 cPt=(78.2316063,4563.34905) == oppT=0.1875 fPerpPt=(78.2316063,4563.34905)
|
||||
setPerp t=0.25 cPt=(78.4212702,4562.79143) == oppT=0.25 fPerpPt=(78.4212702,4562.79143)
|
||||
setPerp t=0.375 cPt=(78.9780269,4561.71674) == oppT=0.375 fPerpPt=(78.9780269,4561.71674)
|
||||
setPerp t=0.5 cPt=(79.7573593,4560.75736) == oppT=0.5 fPerpPt=(79.7573593,4560.75736)
|
||||
setPerp t=0.625 cPt=(80.7167415,4559.97803) == oppT=0.625 fPerpPt=(80.7167415,4559.97803)
|
||||
setPerp t=0.75 cPt=(81.7914318,4559.42127) == oppT=0.75 fPerpPt=(81.7914318,4559.42127)
|
||||
setPerp t=0.875 cPt=(82.9082217,4559.10017) == oppT=0.875 fPerpPt=(82.9082217,4559.10017)
|
||||
setPerp t=1 cPt=(84,4559) == oppT=1 fPerpPt=(84,4559)
|
||||
setPerp t=0 cPt=(78,4565) == oppT=0 fPerpPt=(78,4565)
|
||||
setPerp t=1 cPt=(84,4559) == oppT=1 fPerpPt=(84,4559)
|
||||
id=1 (empty) id=2 (empty)
|
||||
debugShowConicIntersection wtTs[0]=0 {{{{78,4565}, {78,4559}, {84,4559}}}, 0.707106769} {{78,4565}} wtTs[1]=1 {{84,4559}} wnTs[0]=0 {{{{78,4565}, {78,4559}, {84,4559}}}, 0.707106769} wnTs[1]=1
|
||||
debugShowConicLineIntersection wtTs[0]=1 {{{{78,4565}, {78,4559}, {84,4559}}}, 0.707106769} {{84,4559}} wnTs[0]=0 {{{84,4559}, {158,4559}}}
|
||||
debugShowConicLineIntersection wtTs[0]=1 {{{{78,4565}, {78,4559}, {84,4559}}}, 0.707106769} {{84,4559}} wnTs[0]=0 {{{84,4559}, {1170,4559}}}
|
||||
@ -114,24 +53,9 @@ debugShowConicLineIntersection wtTs[0]=1 {{{{78,4565}, {78,4559}, {84,4559}}}, 0
|
||||
debugShowLineIntersection wtTs[0]=0 {{{158,4559}, {158,4596}}} {{158,4559}} wnTs[0]=1 {{{84,4559}, {158,4559}}}
|
||||
debugShowLineIntersection wtTs[0]=0 {{{158,4596}, {84,4596}}} {{158,4596}} wnTs[0]=1 {{{158,4559}, {158,4596}}}
|
||||
debugShowConicLineIntersection wtTs[0]=0 {{{{84,4596}, {78,4596}, {78,4590}}}, 0.707106769} {{84,4596}} wnTs[0]=1 {{{158,4596}, {84,4596}}}
|
||||
------------x-------- start
|
||||
------------x-------- moveMultiples
|
||||
------------x-------- findCollapsed
|
||||
------------x-------- moveNearby
|
||||
------------x-------- align
|
||||
------------x-------- fixAligned
|
||||
------------x-------- addAlignIntersections
|
||||
------------x-------- expand2
|
||||
------------x-------- mark1
|
||||
------------x-------- missingCoincidence1
|
||||
------------x-------- expand3
|
||||
------------x-------- addExpanded2
|
||||
------------x-------- missingCoincidence2
|
||||
SkOpSegment::markDone id=8 (84,4559 1170,4559) t=0 [15] (84,4559) tEnd=0.0681399632 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
|
||||
SkOpSegment::markDone id=10 (78,4565 78,4559 84,4559) t=0 [19] (78,4565) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
|
||||
SkOpSegment::markDone id=6 (78,4590.00586 78,4565) t=0.000234320081 [33] (78,4590) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
|
||||
------------x-------- pairs->apply
|
||||
------------x-------- pairs->findOverlaps
|
||||
SkOpSegment::sortAngles [4] tStart=0.931066176 [29]
|
||||
SkOpAngle::after [4/1] 31/31 tStart=0.931066176 tEnd=0 < [12/14] 7/7 tStart=0.972972973 tEnd=0 < [4/2] 15/15 tStart=0.931066176 tEnd=1 T 4
|
||||
SkOpAngle::afterPart {{{158,4595}, {1171,4595}}} id=4
|
||||
@ -151,13 +75,13 @@ SkOpAngle::afterPart {{{158,4595}, {158,4596}}} id=12
|
||||
SkOpAngle::afterPart {{{158,4595}, {1171,4595}}} id=4
|
||||
SkOpSegment::sortAngles [5] tStart=0.999339899 [31]
|
||||
SkOpAngle::after [5/3] 25/29 tStart=0.999339899 tEnd=0 < [14/16] 25/29 tStart=0.998759893 tEnd=0 < [5/4] 9/9 tStart=0.999339899 tEnd=1 F 12
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0133288,4595}, {83,4595}}}, 0.877537966} id=5
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0105173,4596}, {84,4596}}}, 0.877548993} id=14
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0000041,4590.00819}, {78,4590.00586}}}, 0.999999881} id=5
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0133288,4595}, {83,4595}}}, 0.708050251} id=5
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0105173,4596}, {84,4596}}}, 0.707726777} id=14
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0000041,4590.00819}, {78,4590.00586}}}, 1} id=5
|
||||
SkOpAngle::after [5/3] 25/29 tStart=0.999339899 tEnd=0 < [14/17] 9/9 tStart=0.998759893 tEnd=1 < [5/4] 9/9 tStart=0.999339899 tEnd=1 T 11
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0133288,4595}, {83,4595}}}, 0.877537966} id=5
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0133288,4595}, {83,4595}}}, 0.708050251} id=5
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78,4590.00526}, {78,4590}}}, 0.999999642} id=14
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0000041,4590.00819}, {78,4590.00586}}}, 0.999999881} id=5
|
||||
SkOpAngle::afterPart {{{{78.0000076,4590.01074}, {78.0000041,4590.00819}, {78,4590.00586}}}, 1} id=5
|
||||
SkOpSegment::sortAngles [6] tStart=0.000234320081 [33]
|
||||
SkOpAngle::after [6/5] 23/23 tStart=0.000234320081 tEnd=0 < [9/9] 7/7 tStart=0 tEnd=1 < [14/18] 21/21 tStart=1 tEnd=0.998759893 T 4
|
||||
SkOpAngle::afterPart {{{78,4590}, {78,4590.00586}}} id=6
|
||||
@ -231,7 +155,7 @@ SkOpSegment::activeOp id=12 t=0 tEnd=0.972972973 op=union miFrom=1 miTo=1 suFrom
|
||||
SkOpSegment::markDone id=12 (158,4559 158,4596) t=0 [23] (158,4559) tEnd=0.972972973 newWindSum=-1 newOppSum=-1 oppSum=-1 windSum=-1 windValue=1 oppValue=0
|
||||
SkOpSegment::findNextOp chase.append segment=12 span=30 windSum=-2147483647
|
||||
SkOpSegment::markDone id=8 (84,4559 1170,4559) t=0.0681399632 [34] (158,4559) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
|
||||
SkOpSegment::findNextOp from:[8] to:[11] start=8985900 end=8985796
|
||||
SkOpSegment::findNextOp from:[8] to:[11] start=6561036 end=6560932
|
||||
bridgeOp current id=8 from=(1170,4559) to=(158,4559)
|
||||
SkOpSegment::findNextOp simple
|
||||
SkOpSegment::markDone id=11 (84,4559 158,4559) t=0 [21] (84,4559) tEnd=1 newWindSum=-1 newOppSum=-1 oppSum=-1 windSum=-1 windValue=1 oppValue=1
|
||||
@ -257,7 +181,7 @@ SkOpSegment::markDone id=6 (78,4590.00586 78,4565) t=0 [11] (78,4590.00586) tEnd
|
||||
SkOpSegment::markDone id=5 (83,4595 78.0086746,4595 78,4590.00586) t=0.999339899 [31] (78.0000076,4590.01074) tEnd=1 newWindSum=-1 newOppSum=-1 oppSum=-1 windSum=-1 windValue=1 oppValue=0
|
||||
SkOpSegment::findNextOp chase.append segment=5 span=31 windSum=-1
|
||||
SkOpSegment::markDone id=9 (78,4590 78,4565) t=0 [17] (78,4590) tEnd=1 newWindSum=-1 newOppSum=-1 oppSum=-1 windSum=-1 windValue=1 oppValue=1
|
||||
SkOpSegment::findNextOp from:[9] to:[14] start=8986620 end=8987068
|
||||
SkOpSegment::findNextOp from:[9] to:[14] start=6561756 end=6562204
|
||||
bridgeOp current id=9 from=(78,4565) to=(78,4590)
|
||||
SkOpSegment::markWinding id=14 (84,4596 78,4596 78,4590) t=0 [27] (84,4596) tEnd=0.998759893 newWindSum=-2 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
|
||||
SkOpSegment::markWinding id=13 (158,4596 84,4596) t=0 [25] (158,4596) tEnd=1 newWindSum=-2 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
|
||||
@ -281,7 +205,7 @@ SkOpSegment::markDone id=5 (83,4595 78.0086746,4595 78,4590.00586) t=0 [9] (83,4
|
||||
SkOpSegment::markDone id=4 (1171,4595 83,4595) t=0.931066176 [29] (158,4595) tEnd=1 newWindSum=-1 newOppSum=-2 oppSum=-2 windSum=-1 windValue=1 oppValue=0
|
||||
SkOpSegment::findNextOp chase.append segment=4 span=29 windSum=-1
|
||||
SkOpSegment::markDone id=14 (84,4596 78,4596 78,4590) t=0.998759893 [32] (78.0000076,4590.01074) tEnd=1 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
|
||||
SkOpSegment::findNextOp from:[14] to:[5] start=8986964 end=8984396
|
||||
SkOpSegment::findNextOp from:[14] to:[5] start=6562100 end=6559532
|
||||
bridgeOp current id=14 from=(78,4590) to=(78.0000076,4590.01074)
|
||||
path.lineTo(78,4590);
|
||||
path.conicTo(78,4590.00537, 78.0000076,4590.01074, 0.999999642);
|
||||
@ -304,6 +228,8 @@ bridgeOp current id=2 from=(1176,4590) to=(1176,4565)
|
||||
path.lineTo(1176,4565);
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
@ -1461,7 +1387,7 @@ function idByCurve(test, frag, type) {
|
||||
|
||||
function curve_extremes(curve, bounds) {
|
||||
var length = curve.length == 7 ? 6 : curve.length;
|
||||
for (var index = 0; index < curve.length; index += 2) {
|
||||
for (var index = 0; index < length; index += 2) {
|
||||
var x = curve[index];
|
||||
var y = curve[index + 1];
|
||||
bounds[0] = Math.min(bounds[0], x);
|
||||
@ -1988,10 +1914,16 @@ function conicPartial(x1, y1, x2, y2, x3, y3, w, t1, t2) {
|
||||
var bz = 2 * dz - (az + cz) / 2;
|
||||
var dt = t2 - t1;
|
||||
var dt_1 = 1 - dt;
|
||||
var partW = (1 + dt * (w - 1)) / Math.sqrt(dt * dt + 2 * dt * dt_1 * w + dt_1 * dt_1);
|
||||
var array = [
|
||||
ax / az, ay / az, bx / bz, by / bz, cx / cz, cy / cz, partW
|
||||
ax / az, ay / az, bx / bz, by / bz, cx / cz, cy / cz, 0
|
||||
];
|
||||
var dMidAC = { x:(array[0] + array[4]) / 2, y:(array[1] + array[5]) / 2 };
|
||||
var dMid = { x:dx / dz, y:dy / dz };
|
||||
var dWNumer = { x:dMidAC.x - dMid.x, y:dMidAC.y - dMid.y };
|
||||
var dWDenom = { x:dMid.x - array[2], y:dMid.y - array[3] };
|
||||
var partW = Math.sqrt(dWNumer.x * dWNumer.x + dWNumer.y * dWNumer.y)
|
||||
/ Math.sqrt(dWDenom.x * dWDenom.x + dWDenom.y * dWDenom.y);
|
||||
array[6] = partW;
|
||||
return array;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user