/* * Copyright 2012 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file.
*/ #ifndef SkOpSpan_DEFINED #define SkOpSpan_DEFINED
// returns nullptr if this is already in the opp ptT loop
SkOpPtT* oppPrev(const SkOpPtT* opp) const { // find the fOpp ptr to opp
SkOpPtT* oppPrev = opp->fNext; if (oppPrev == this) { return nullptr;
} while (oppPrev->fNext != opp) {
oppPrev = oppPrev->fNext; if (oppPrev == this) { return nullptr;
}
} return oppPrev;
}
const SkOpPtT* starter(const SkOpPtT* end) const { return fT < end->fT ? this : end;
}
double fT;
SkPoint fPt; // cache of point value at this t protected:
SkOpSpanBase* fSpan; // contains winding data
SkOpPtT* fNext; // intersection on opposite curve or alias on this curve bool fDeleted; // set if removed from span list bool fDuplicatePt; // set if identical pt is somewhere in the next loop // below mutable since referrer is otherwise always const mutablebool fCoincident; // set if at some point a coincident span pointed here
SkDEBUGCODE(int fID;)
};
protected: // no direct access to internals to avoid treating a span base as a span
SkOpPtT fPtT; // list of points and t values associated with the start of this span
SkOpSegment* fSegment; // segment that contains this span
SkOpSpanBase* fCoinEnd; // linked list of coincident spans that end here (may point to itself)
SkOpAngle* fFromAngle; // points to next angle from span start to end
SkOpSpan* fPrev; // previous intersection point int fSpanAdds; // number of times intersections have been added to span bool fAligned; bool fChased; // set after span has been added to chase array
SkDEBUGCODE(int fCount;) // number of pt/t pairs added
SkDEBUGCODE(int fID;)
SkDEBUGCODE(bool fDebugDeleted;) // set when span was merged with another span
};
class SkOpSpan : public SkOpSpanBase { public: bool alreadyAdded() const { if (fAlreadyAdded) { returntrue;
} returnfalse;
}
int windSum() const {
SkASSERT(!final()); return fWindSum;
}
int windValue() const {
SkOPASSERT(!final()); return fWindValue;
}
private: // no direct access to internals to avoid treating a span base as a span
SkOpSpan* fCoincident; // linked list of spans coincident with this one (may point to itself)
SkOpAngle* fToAngle; // points to next angle from span start to end
SkOpSpanBase* fNext; // next intersection point int fWindSum; // accumulated from contours surrounding this one. int fOppSum; // for binary operators: the opposite winding sum int fWindValue; // 0 == canceled; 1 == normal; >1 == coincident int fOppValue; // normally 0 -- when binary coincident edges combine, opp value goes here int fTopTTry; // specifies direction and t value to try next bool fDone; // if set, this span to next higher T has been processed bool fAlreadyAdded;
};
#endif
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.16Bemerkung:
(vorverarbeitet am 2026-04-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.