Skia
2DGraphicsLibrary
|
Classes | |
struct | Segment |
Public Types | |
enum | MatrixFlags { kGetPosition_MatrixFlag = 0x01, kGetTangent_MatrixFlag = 0x02, kGetPosAndTan_MatrixFlag = kGetPosition_MatrixFlag | kGetTangent_MatrixFlag } |
Public Member Functions | |
SkPathMeasure (const SkPath &path, bool forceClosed, SkScalar resScale=1) | |
Initialize the pathmeasure with the specified path. More... | |
void | setPath (const SkPath *, bool forceClosed) |
Reset the pathmeasure with the specified path. More... | |
SkScalar | getLength () |
Return the total length of the current contour, or 0 if no path is associated (e.g. More... | |
bool SK_WARN_UNUSED_RESULT | getPosTan (SkScalar distance, SkPoint *position, SkVector *tangent) |
Pins distance to 0 <= distance <= getLength(), and then computes the corresponding position and tangent. More... | |
bool SK_WARN_UNUSED_RESULT | getMatrix (SkScalar distance, SkMatrix *matrix, MatrixFlags flags=kGetPosAndTan_MatrixFlag) |
Pins distance to 0 <= distance <= getLength(), and then computes the corresponding matrix (by calling getPosTan). More... | |
bool | getSegment (SkScalar startD, SkScalar stopD, SkPath *dst, bool startWithMoveTo) |
Given a start and stop distance, return in dst the intervening segment(s). More... | |
bool | isClosed () |
Return true if the current contour is closed() | |
bool | nextContour () |
Move to the next contour in the path. More... | |
void | dump () |
Private Member Functions | |
void | buildSegments () |
SkScalar | compute_quad_segs (const SkPoint pts[3], SkScalar distance, int mint, int maxt, int ptIndex) |
SkScalar | compute_conic_segs (const SkConic &, SkScalar distance, int mint, const SkPoint &minPt, int maxt, const SkPoint &maxPt, int ptIndex) |
SkScalar | compute_cubic_segs (const SkPoint pts[3], SkScalar distance, int mint, int maxt, int ptIndex) |
const Segment * | distanceToSegment (SkScalar distance, SkScalar *t) |
bool | quad_too_curvy (const SkPoint pts[3]) |
bool | conic_too_curvy (const SkPoint &firstPt, const SkPoint &midTPt, const SkPoint &lastPt) |
bool | cheap_dist_exceeds_limit (const SkPoint &pt, SkScalar x, SkScalar y) |
bool | cubic_too_curvy (const SkPoint pts[4]) |
Static Private Member Functions | |
static const Segment * | NextSegment (const Segment *) |
Private Attributes | |
SkPath::Iter | fIter |
const SkPath * | fPath |
SkScalar | fTolerance |
SkScalar | fLength |
int | fFirstPtIndex |
bool | fIsClosed |
bool | fForceClosed |
SkTDArray< Segment > | fSegments |
SkTDArray< SkPoint > | fPts |
SkPathMeasure::SkPathMeasure | ( | const SkPath & | path, |
bool | forceClosed, | ||
SkScalar | resScale = 1 |
||
) |
Initialize the pathmeasure with the specified path.
The path must remain valid for the lifetime of the measure object, or until setPath() is called with a different path (or null), since the measure object keeps a pointer to the path object (does not copy its data).
resScale controls the precision of the measure. values > 1 increase the precision (and possible slow down the computation).
SkScalar SkPathMeasure::getLength | ( | ) |
Return the total length of the current contour, or 0 if no path is associated (e.g.
resetPath(null))
bool SK_WARN_UNUSED_RESULT SkPathMeasure::getMatrix | ( | SkScalar | distance, |
SkMatrix * | matrix, | ||
MatrixFlags | flags = kGetPosAndTan_MatrixFlag |
||
) |
Pins distance to 0 <= distance <= getLength(), and then computes the corresponding matrix (by calling getPosTan).
Returns false if there is no path, or a zero-length path was specified, in which case matrix is unchanged.
bool SK_WARN_UNUSED_RESULT SkPathMeasure::getPosTan | ( | SkScalar | distance, |
SkPoint * | position, | ||
SkVector * | tangent | ||
) |
Pins distance to 0 <= distance <= getLength(), and then computes the corresponding position and tangent.
Returns false if there is no path, or a zero-length path was specified, in which case position and tangent are unchanged.
bool SkPathMeasure::getSegment | ( | SkScalar | startD, |
SkScalar | stopD, | ||
SkPath * | dst, | ||
bool | startWithMoveTo | ||
) |
Given a start and stop distance, return in dst the intervening segment(s).
If the segment is zero-length, return false, else return true. startD and stopD are pinned to legal values (0..getLength()). If startD > stopD then return false (and leave dst untouched). Begin the segment with a moveTo if startWithMoveTo is true
bool SkPathMeasure::nextContour | ( | ) |
Move to the next contour in the path.
Return true if one exists, or false if we're done with the path.
void SkPathMeasure::setPath | ( | const SkPath * | , |
bool | forceClosed | ||
) |
Reset the pathmeasure with the specified path.
The path must remain valid for the lifetime of the measure object, or until setPath() is called with a different path (or null), since the measure object keeps a pointer to the path object (does not copy its data).