Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: src/pathops/SkOpAngle.cpp

Issue 686843002: Revert of harden pathops for pathological test (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/pathops/SkOpAngle.h ('k') | src/pathops/SkOpContour.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 #include "SkIntersections.h" 7 #include "SkIntersections.h"
8 #include "SkOpAngle.h" 8 #include "SkOpAngle.h"
9 #include "SkOpSegment.h" 9 #include "SkOpSegment.h"
10 #include "SkPathOpsCurve.h" 10 #include "SkPathOpsCurve.h"
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 SkDLine rays[] = {{{fCurvePart[0], rh.fCurvePart[rPts]}}, 402 SkDLine rays[] = {{{fCurvePart[0], rh.fCurvePart[rPts]}},
403 {{fCurvePart[0], fCurvePart[lPts]}}}; 403 {{fCurvePart[0], fCurvePart[lPts]}}};
404 if (rays[0][1] == rays[1][1]) { 404 if (rays[0][1] == rays[1][1]) {
405 return checkParallel(rh); 405 return checkParallel(rh);
406 } 406 }
407 double smallTs[2] = {-1, -1}; 407 double smallTs[2] = {-1, -1};
408 bool limited[2] = {false, false}; 408 bool limited[2] = {false, false};
409 for (int index = 0; index < 2; ++index) { 409 for (int index = 0; index < 2; ++index) {
410 const SkOpSegment& segment = index ? *rh.fSegment : *fSegment; 410 const SkOpSegment& segment = index ? *rh.fSegment : *fSegment;
411 SkIntersections i; 411 SkIntersections i;
412 int cPts = index ? rPts : lPts; 412 (*CurveIntersectRay[index ? rPts : lPts])(segment.pts(), rays[index], &i );
413 (*CurveIntersectRay[cPts])(segment.pts(), rays[index], &i);
414 // if the curve is a line, then the line and the ray intersect only at t heir crossing
415 if (cPts == 1) { // line
416 continue;
417 }
418 // SkASSERT(i.used() >= 1); 413 // SkASSERT(i.used() >= 1);
419 // if (i.used() <= 1) { 414 // if (i.used() <= 1) {
420 // continue; 415 // continue;
421 // } 416 // }
422 double tStart = segment.t(index ? rh.fStart : fStart); 417 double tStart = segment.t(index ? rh.fStart : fStart);
423 double tEnd = segment.t(index ? rh.fComputedEnd : fComputedEnd); 418 double tEnd = segment.t(index ? rh.fComputedEnd : fComputedEnd);
424 bool testAscends = index ? rh.fStart < rh.fComputedEnd : fStart < fCompu tedEnd; 419 bool testAscends = index ? rh.fStart < rh.fComputedEnd : fStart < fCompu tedEnd;
425 double t = testAscends ? 0 : 1; 420 double t = testAscends ? 0 : 1;
426 for (int idx2 = 0; idx2 < i.used(); ++idx2) { 421 for (int idx2 = 0; idx2 < i.used(); ++idx2) {
427 double testT = i[0][idx2]; 422 double testT = i[0][idx2];
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 angle->insert(this); 650 angle->insert(this);
656 } 651 }
657 return; 652 return;
658 } 653 }
659 bool singleton = NULL == fNext; 654 bool singleton = NULL == fNext;
660 if (singleton) { 655 if (singleton) {
661 fNext = this; 656 fNext = this;
662 } 657 }
663 SkOpAngle* next = fNext; 658 SkOpAngle* next = fNext;
664 if (next->fNext == this) { 659 if (next->fNext == this) {
665 if (angle->overlap(*this)) { // angles are essentially coincident 660 if (angle->overlap(*this)) {
666 return; 661 return;
667 } 662 }
668 if (singleton || angle->after(this)) { 663 if (singleton || angle->after(this)) {
669 this->fNext = angle; 664 this->fNext = angle;
670 angle->fNext = next; 665 angle->fNext = next;
671 } else { 666 } else {
672 next->fNext = angle; 667 next->fNext = angle;
673 angle->fNext = this; 668 angle->fNext = this;
674 } 669 }
675 debugValidateNext(); 670 debugValidateNext();
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 } 770 }
776 working = working->fNext; 771 working = working->fNext;
777 } while (working != angle); 772 } while (working != angle);
778 do { 773 do {
779 SkOpAngle* next = working->fNext; 774 SkOpAngle* next = working->fNext;
780 working->fNext = NULL; 775 working->fNext = NULL;
781 insert(working); 776 insert(working);
782 working = next; 777 working = next;
783 } while (working != angle); 778 } while (working != angle);
784 // it's likely that a pair of the angles are unorderable 779 // it's likely that a pair of the angles are unorderable
785 #if 0 && DEBUG_ANGLE 780 #if DEBUG_ANGLE
786 SkOpAngle* last = angle; 781 SkOpAngle* last = angle;
787 working = angle->fNext; 782 working = angle->fNext;
788 do { 783 do {
789 SkASSERT(last->fNext == working); 784 SkASSERT(last->fNext == working);
790 last->fNext = working->fNext; 785 last->fNext = working->fNext;
791 SkASSERT(working->after(last)); 786 SkASSERT(working->after(last));
792 last->fNext = working; 787 last->fNext = working;
793 last = working; 788 last = working;
794 working = working->fNext; 789 working = working->fNext;
795 } while (last != angle); 790 } while (last != angle);
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 angle->setID(++fCount); 1121 angle->setID(++fCount);
1127 #endif 1122 #endif
1128 return *angle; 1123 return *angle;
1129 } 1124 }
1130 1125
1131 void SkOpAngleSet::reset() { 1126 void SkOpAngleSet::reset() {
1132 if (fAngles) { 1127 if (fAngles) {
1133 fAngles->reset(); 1128 fAngles->reset();
1134 } 1129 }
1135 } 1130 }
OLDNEW
« no previous file with comments | « src/pathops/SkOpAngle.h ('k') | src/pathops/SkOpContour.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698