<ahref="#Path">Path</a> contains <ahref="#Line">Lines</a> and <ahref="#Curve">Curves</a> which can be stroked or filled. <ahref="#Contour">Contour</a> is
composed of a series of connected <ahref="#Line">Lines</a> and <ahref="#Curve">Curves</a>. <ahref="#Path">Path</a> may contain zero,
one, or more <ahref="#Contour">Contours</a>.
Each <ahref="undocumented#Line">Line</a> and <ahref="undocumented#Curve">Curve</a> are described by <ahref="#Verb">Verb</a>, <ahref="#Point">Points</a>, and optional Weight.
Each pair of connected <ahref="#Line">Lines</a> and <ahref="#Curve">Curves</a> share common <ahref="undocumented#Point">Point</a>; for instance, <ahref="#Path">Path</a>
containing two connected <ahref="#Line">Lines</a> are described the <ahref="#Verb">Verb</a> sequence:
<ahref="#SkPath_kMove_Verb">SkPath::kMove Verb</a>, <ahref="#SkPath_kLine_Verb">SkPath::kLine Verb</a>, <ahref="#SkPath_kLine_Verb">SkPath::kLine Verb</a>; and a <ahref="undocumented#Point">Point</a> sequence
<ahref="#Path">Path</a> components <ahref="#Arc">Arc</a>, <ahref="undocumented#Rect">Rect</a>, <ahref="undocumented#Round_Rect">Round Rect</a>, <ahref="undocumented#Circle">Circle</a>, and <ahref="undocumented#Oval">Oval</a> are composed of
<ahref="#Line">Lines</a> and <ahref="#Curve">Curves</a> with as many <ahref="#Verb">Verbs</a> and <ahref="#Point">Points</a> required
for an exact description. Once added to <ahref="#Path">Path</a>, these components may lose their
identity; although <ahref="#Path">Path</a> can be inspected to determine if it decribes a single
<div><fiddle-embedname="93887af0c1dac49521972698cf04069c"><div><ahref="#Path">Path</a> contains three <ahref="#Contour">Contours</a>: <ahref="undocumented#Line">Line</a>, <ahref="undocumented#Circle">Circle</a>, and <ahref="#Quad">Quad</a>. <ahref="undocumented#Line">Line</a> is stroked but
not filled. <ahref="undocumented#Circle">Circle</a> is stroked and filled; <ahref="undocumented#Circle">Circle</a> stroke forms a loop. <ahref="#Quad">Quad</a>
is stroked and filled, but since it is not closed, <ahref="#Quad">Quad</a> does not stroke a loop.</div></fiddle-embed></div>
<div><fiddle-embedname="36a995442c081ee779ecab2962d36e69"><div><ahref="#Path">Path</a> is drawn filled, then stroked, then stroked and filled.</div></fiddle-embed></div>
<ahref="#Contour">Contour</a> contains one or more <ahref="#Verb">Verbs</a>, and as many <ahref="#Point">Points</a> as
are required to satisfy <ahref="#Verb_Array">Verb Array</a>. First <ahref="#Verb">Verb</a> in <ahref="#Path">Path</a> is always
<ahref="#SkPath_kMove_Verb">SkPath::kMove Verb</a>; each <ahref="#SkPath_kMove_Verb">SkPath::kMove Verb</a> that follows starts a new <ahref="#Contour">Contour</a>.
<div><fiddle-embedname="0374f2dcd7effeb1dd435205a6c2de6f"><div>Each <ahref="#SkPath_moveTo">SkPath::moveTo</a> starts a new <ahref="#Contour">Contour</a>, and content after <ahref="#SkPath_close">SkPath::close()</a>
also starts a new <ahref="#Contour">Contour</a>. Since <ahref="#SkPath_conicTo">SkPath::conicTo</a> wasn't preceded by
<ahref="#SkPath_moveTo">SkPath::moveTo</a>, the first <ahref="undocumented#Point">Point</a> of the third <ahref="#Contour">Contour</a> starts at the last <ahref="undocumented#Point">Point</a>
of the second <ahref="#Contour">Contour</a>.</div></fiddle-embed></div>
If final <ahref="#Verb">Verb</a> in <ahref="#Contour">Contour</a> is <ahref="#SkPath_kClose_Verb">SkPath::kClose Verb</a>, <ahref="undocumented#Line">Line</a> connects <ahref="#Last_Point">Last Point</a> in
<ahref="#Contour">Contour</a> with first <ahref="undocumented#Point">Point</a>. A closed <ahref="#Contour">Contour</a>, stroked, draws
<ahref="#Stroke_Join">Paint Stroke Join</a> at <ahref="#Last_Point">Last Point</a> and first <ahref="undocumented#Point">Point</a>. Without <ahref="#SkPath_kClose_Verb">SkPath::kClose Verb</a>
as final <ahref="#Verb">Verb</a>, <ahref="#Last_Point">Last Point</a> and first <ahref="undocumented#Point">Point</a> are not connected; <ahref="#Contour">Contour</a>
remains open. An open <ahref="#Contour">Contour</a>, stroked, draws <ahref="#Stroke_Cap">Paint Stroke Cap</a> at
<ahref="#Last_Point">Last Point</a> and first <ahref="undocumented#Point">Point</a>.
<div><fiddle-embedname="7a1f39b12d2cd8b7f5b1190879259cb2"><div><ahref="#Path">Path</a> is drawn stroked, with an open <ahref="#Contour">Contour</a> and a closed <ahref="#Contour">Contour</a>.</div></fiddle-embed></div>
| <ahref="#SkPath_IsLineDegenerate">IsLineDegenerate</a> | Returns if <ahref="undocumented#Line">Line</a> is very small. |
| <ahref="#SkPath_IsQuadDegenerate">IsQuadDegenerate</a> | Returns if <ahref="#Quad">Quad</a> is very small. |
| <ahref="#SkPath_addArc">addArc</a> | Adds one <ahref="#Contour">Contour</a> containing <ahref="#Arc">Arc</a>. |
| <ahref="#SkPath_addCircle">addCircle</a> | Adds one <ahref="#Contour">Contour</a> containing <ahref="undocumented#Circle">Circle</a>. |
| <ahref="#SkPath_addOval">addOval</a> | Adds one <ahref="#Contour">Contour</a> containing <ahref="undocumented#Oval">Oval</a>. |
| <ahref="#SkPath_addPath">addPath</a> | Adds contents of <ahref="#Path">Path</a>. |
| <ahref="#SkPath_addPoly">addPoly</a> | Adds one <ahref="#Contour">Contour</a> containing connected lines. |
| <ahref="#SkPath_addRRect">addRRect</a> | Adds one <ahref="#Contour">Contour</a> containing <ahref="undocumented#Round_Rect">Round Rect</a>. |
| <ahref="#SkPath_addRect">addRect</a> | Adds one <ahref="#Contour">Contour</a> containing <ahref="undocumented#Rect">Rect</a>. |
| <ahref="#SkPath_addRoundRect">addRoundRect</a> | Adds one <ahref="#Contour">Contour</a> containing <ahref="undocumented#Round_Rect">Round Rect</a> with common corner radii. |
| <ahref="#SkPath_incReserve">incReserve</a> | Hint to reserve space for additional data. |
| <ahref="#SkPath_interpolate">interpolate</a> | Interpolates between <ahref="#Path">Path</a> pair. |
| <ahref="#SkPath_isConvex">isConvex</a> | Returns if geometry is convex. |
| <ahref="#SkPath_isEmpty">isEmpty</a> | Returns if verb count is zero. |
| <ahref="#SkPath_isFinite">isFinite</a> | Returns if all <ahref="undocumented#Point">Point</a> values are finite. |
| <ahref="#SkPath_isInterpolatable">isInterpolatable</a> | Returns if pair contains equal counts of <ahref="#Verb_Array">Verb Array</a> and <ahref="#Weight">Weights</a>. |
<td><aname="SkPath_kMove_Verb"><code><strong>SkPath::kMove_Verb </strong></code></a></td><td>0</td><td>Starts new <ahref="#Contour">Contour</a> at next <ahref="undocumented#Point">Point</a>.</td>
<td><aname="SkPath_kLine_Verb"><code><strong>SkPath::kLine_Verb </strong></code></a></td><td>1</td><td>Adds <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to next <ahref="undocumented#Point">Point</a>.
<td><aname="SkPath_kQuad_Verb"><code><strong>SkPath::kQuad_Verb </strong></code></a></td><td>2</td><td>Adds <ahref="#Quad">Quad</a> from <ahref="#Last_Point">Last Point</a>, using control <ahref="undocumented#Point">Point</a>, and end <ahref="undocumented#Point">Point</a>.
<ahref="#Quad">Quad</a> is a parabolic section within tangents from <ahref="#Last_Point">Last Point</a> to control <ahref="undocumented#Point">Point</a>,
<td><aname="SkPath_kConic_Verb"><code><strong>SkPath::kConic_Verb </strong></code></a></td><td>3</td><td>Adds <ahref="#Conic">Conic</a> from <ahref="#Last_Point">Last Point</a>, using control <ahref="undocumented#Point">Point</a>, end <ahref="undocumented#Point">Point</a>, and Weight.
<ahref="#Conic">Conic</a> is a elliptical, parabolic, or hyperbolic section within tangents
from <ahref="#Last_Point">Last Point</a> to control <ahref="undocumented#Point">Point</a>, and control <ahref="undocumented#Point">Point</a> to end <ahref="undocumented#Point">Point</a>, constrained
<td><aname="SkPath_kCubic_Verb"><code><strong>SkPath::kCubic_Verb </strong></code></a></td><td>4</td><td>Adds <ahref="#Cubic">Cubic</a> from <ahref="#Last_Point">Last Point</a>, using two control <ahref="#Point">Points</a>, and end <ahref="undocumented#Point">Point</a>.
<ahref="#Cubic">Cubic</a> is a third-order <ahref="undocumented#Bezier">Bezier</a> section within tangents from <ahref="#Last_Point">Last Point</a> to
first control <ahref="undocumented#Point">Point</a>, and from second control <ahref="undocumented#Point">Point</a> to end <ahref="undocumented#Point">Point</a>.</td>
<td><aname="SkPath_kDone_Verb"><code><strong>SkPath::kDone_Verb </strong></code></a></td><td>6</td><td>Terminates <ahref="#Path">Path</a>. Not in <ahref="#Verb_Array">Verb Array</a>, but returned by <ahref="#Path">Path</a> iterator.</td>
Closed <ahref="#Contour">Contours</a> like <ahref="undocumented#Rect">Rect</a>, <ahref="undocumented#Round_Rect">Round Rect</a>, <ahref="undocumented#Circle">Circle</a>, and <ahref="undocumented#Oval">Oval</a> added with
<ahref="#SkPath_kCW_Direction">kCW Direction</a> travel clockwise; the same added with <ahref="#SkPath_kCCW_Direction">kCCW Direction</a>
<td><aname="SkPath_kCW_Direction"><code><strong>SkPath::kCW_Direction </strong></code></a></td><td>Contour travels in a clockwise direction. </td><td></td>
<td><aname="SkPath_kCCW_Direction"><code><strong>SkPath::kCCW_Direction </strong></code></a></td><td>Contour travels in a counterclockwise direction. </td><td></td>
<div><fiddle-embedname="647312aacd946c8a6eabaca797140432"><div>Modifying one <ahref="#SkPath_copy_constructor_path">path</a> does not effect another, even if they started as copies
<div><fiddle-embedname="01ad6be9b7d15a2217daea273eb3d466"><div>delete calls <ahref="#Path">Path</a> destructor, but copy of original in path2 is unaffected.</div></fiddle-embed></div>
Compares <ahref="#SkPath_equal_operator_a">a</a> and <ahref="#SkPath_equal_operator_b">b</a>; returns true if <ahref="#Fill_Type">Fill Type</a>, <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a>
<div><fiddle-embedname="31883f51bb357f2ac5990d88f8b82e02"><div>Rewind removes <ahref="#Verb_Array">Verb Array</a> but leaves storage; since storage is not compared,
<ahref="#Path">Path</a> pair are equivalent.</div>
Compares <ahref="#SkPath_not_equal_operator_a">a</a> and <ahref="#SkPath_not_equal_operator_b">b</a>; returns true if <ahref="#Fill_Type">Fill Type</a>, <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a>
Interpolate between <ahref="#Path">Paths</a> with equal sized <ahref="SkPath_Reference#Point_Array">Point Arrays</a>.
Copy <ahref="#Verb_Array">Verb Array</a> and <ahref="#Weight">Weights</a> to <ahref="#SkPath_interpolate_out">out</a>,
and set <ahref="#SkPath_interpolate_out">out</a><ahref="#Point_Array">Point Array</a> to a weighted average of this <ahref="#Point_Array">Point Array</a> and <ahref="#SkPath_interpolate_ending">ending</a>
<ahref="#Point_Array">Point Array</a>, using the formula:
(this->points * <a href="#SkPath_interpolate_weight">weight</a>) + ending->points * (1 - <ahref="#SkPath_interpolate_weight">weight</a>)<ahref="#SkPath_interpolate">interpolate</a> returns false and leaves <ahref="#SkPath_interpolate_out">out</a> unchanged if <ahref="#Point_Array">Point Array</a> is not
the same size as <ahref="#SkPath_interpolate_ending">ending</a><ahref="#Point_Array">Point Array</a>. Call <ahref="#SkPath_isInterpolatable">isInterpolatable</a> to check <ahref="#Path">Path</a>
compatibility prior to calling <ahref="#SkPath_interpolate">interpolate</a>.
<ahref="#Fill_Type">Fill Type</a> selects the rule used to fill <ahref="#Path">Path</a>. <ahref="#Path">Path</a> set to <ahref="#SkPath_kWinding_FillType">kWinding FillType</a>
fills if the sum of <ahref="#Contour">Contour</a> edges is not zero, where clockwise edges add one, and
counterclockwise edges subtract one. <ahref="#Path">Path</a> set to <ahref="#SkPath_kEvenOdd_FillType">kEvenOdd FillType</a> fills if the
number of <ahref="#Contour">Contour</a> edges is odd. Each <ahref="#Fill_Type">Fill Type</a> has an inverse variant that
<td><aname="SkPath_kWinding_FillType"><code><strong>SkPath::kWinding_FillType </strong></code></a></td><td>Specifies fill as area is enclosed by a non-zero sum of Contour Directions.</td><td></td>
<td><aname="SkPath_kEvenOdd_FillType"><code><strong>SkPath::kEvenOdd_FillType </strong></code></a></td><td>Specifies fill as area enclosed by an odd number of Contours.</td><td></td>
<td><aname="SkPath_kInverseWinding_FillType"><code><strong>SkPath::kInverseWinding_FillType </strong></code></a></td><td>Specifies fill as area is enclosed by a zero sum of Contour Directions.</td><td></td>
<td><aname="SkPath_kInverseEvenOdd_FillType"><code><strong>SkPath::kInverseEvenOdd_FillType </strong></code></a></td><td>Specifies fill as area enclosed by an even number of Contours.</td><td></td>
Returns <ahref="#SkPath_FillType">FillType</a>, the rule used to fill <ahref="#Path">Path</a>. <ahref="#SkPath_FillType">FillType</a> of a new <ahref="#Path">Path</a> is
Sets <ahref="#SkPath_FillType">FillType</a>, the rule used to fill <ahref="#Path">Path</a>. While <ahref="#SkPath_setFillType">setFillType</a> does not check
that <ahref="#SkPath_setFillType_ft">ft</a> is legal, values outside of <ahref="#SkPath_FillType">FillType</a> are not supported.
<div><fiddle-embedname="b4a91cd7f50b2a0a0d1bec6d0ac823d2"><div>If empty <ahref="#Path">Path</a> is set to inverse <ahref="#SkPath_FillType">FillType</a>, it fills all pixels.</div></fiddle-embed></div>
true if <ahref="#SkPath_FillType">FillType</a> is <ahref="#SkPath_kInverseWinding_FillType">kInverseWinding FillType</a> or <ahref="#SkPath_kInverseEvenOdd_FillType">kInverseEvenOdd FillType</a>.
<div><fiddle-embedname="400facce23d417bc5043c5f58404afbd"><div><ahref="#Path">Path</a> drawn normally and through its inverse touches every pixel once.</div></fiddle-embed></div>
Initially <ahref="#Path">Path</a><ahref="#Convexity">Convexity</a> is <ahref="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>. <ahref="#Path">Path</a><ahref="#Convexity">Convexity</a> is computed
<td><aname="SkPath_kUnknown_Convexity"><code><strong>SkPath::kUnknown_Convexity </strong></code></a></td><td>Indicates Convexity has not been determined.</td><td></td>
<td><aname="SkPath_kConvex_Convexity"><code><strong>SkPath::kConvex_Convexity </strong></code></a></td><td>Path has one Contour made of a simple geometry without indentations.</td><td></td>
<td><aname="SkPath_kConcave_Convexity"><code><strong>SkPath::kConcave_Convexity </strong></code></a></td><td>Path has more than one Contour, or a geometry with indentations.</td><td></td>
<div><fiddle-embedname="bc19da9de880e3f339707247686efc0a"><div><ahref="#Convexity">Convexity</a> is unknown unless <ahref="#SkPath_getConvexity">getConvexity</a> is called without a subsequent call
Stores <ahref="#SkPath_setConvexity_convexity">convexity</a> so that it is later returned by <ahref="#SkPath_getConvexity">getConvexity</a> or <ahref="#SkPath_getConvexityOrUnknown">getConvexityOrUnknown</a>.
<ahref="#SkPath_setConvexity_convexity">convexity</a> may differ from <ahref="#SkPath_getConvexity">getConvexity</a>, although setting an incorrect value may
If <ahref="#SkPath_setConvexity_convexity">convexity</a> is <ahref="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>: <ahref="#SkPath_getConvexity">getConvexity</a> will
compute <ahref="#Convexity">Convexity</a>, and <ahref="#SkPath_getConvexityOrUnknown">getConvexityOrUnknown</a> will return <ahref="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>.
If <ahref="#SkPath_setConvexity_convexity">convexity</a> is <ahref="#SkPath_kConvex_Convexity">kConvex Convexity</a> or <ahref="#SkPath_kConcave_Convexity">kConcave Convexity</a>, <ahref="#SkPath_getConvexity">getConvexity</a>
and <ahref="#SkPath_getConvexityOrUnknown">getConvexityOrUnknown</a> will return <ahref="#SkPath_setConvexity_convexity">convexity</a> until the path is
One of <ahref="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>, <ahref="#SkPath_kConvex_Convexity">kConvex Convexity</a>, or <ahref="#SkPath_kConcave_Convexity">kConcave Convexity</a>.</td>
Computes <ahref="#Convexity">Convexity</a> if required, and returns true if value is <ahref="#SkPath_kConvex_Convexity">kConvex Convexity</a>.
If <ahref="#SkPath_setConvexity">setConvexity</a> was called with <ahref="#SkPath_kConvex_Convexity">kConvex Convexity</a> or <ahref="#SkPath_kConcave_Convexity">kConcave Convexity</a>, and
the path has not been altered, <ahref="#Convexity">Convexity</a> is not recomputed.
<ahref="#Path">Path</a> is <ahref="undocumented#Oval">Oval</a> if constructed by <ahref="#SkPath_addCircle">addCircle</a>, <ahref="#SkPath_addOval">addOval</a>; and in some cases,
<ahref="#SkPath_addRoundRect">addRoundRect</a>, <ahref="#SkPath_addRRect">addRRect</a>. <ahref="#Path">Path</a> constructed with <ahref="#SkPath_conicTo">conicTo</a> or <ahref="#SkPath_rConicTo">rConicTo</a> will not
return true though <ahref="#Path">Path</a> draws <ahref="undocumented#Oval">Oval</a>.
storage for bounding <ahref="undocumented#Rect">Rect</a> of <ahref="undocumented#Oval">Oval</a>. <ahref="undocumented#Oval">Oval</a> is <ahref="undocumented#Circle">Circle</a> if <ahref="#SkPath_isOval_rect">rect</a> width
equals <ahref="#SkPath_isOval_rect">rect</a> height. Unwritten if <ahref="#Path">Path</a> is not <ahref="undocumented#Oval">Oval</a>. May be nullptr.</td>
storage for <ahref="#SkPath_Direction">Direction</a>; <ahref="#SkPath_kCW_Direction">kCW Direction</a> if clockwise, <ahref="#SkPath_kCCW_Direction">kCCW Direction</a> if
counterclockwise. Unwritten if <ahref="#Path">Path</a> is not <ahref="undocumented#Oval">Oval</a>. May be nullptr.</td>
<ahref="#Path">Path</a> is <ahref="undocumented#Round_Rect">Round Rect</a> if constructed by <ahref="#SkPath_addRoundRect">addRoundRect</a>, <ahref="#SkPath_addRRect">addRRect</a>; and if construction
is not empty, not <ahref="undocumented#Rect">Rect</a>, and not <ahref="undocumented#Oval">Oval</a>. <ahref="#Path">Path</a> constructed with other other calls
will not return true though <ahref="#Path">Path</a> draws <ahref="undocumented#Round_Rect">Round Rect</a>.
storage for <ahref="#SkPath_Direction">Direction</a>; <ahref="#SkPath_kCW_Direction">kCW Direction</a> if clockwise, <ahref="#SkPath_kCCW_Direction">kCCW Direction</a> if
counterclockwise. Unwritten if <ahref="#Path">Path</a> is not <ahref="undocumented#Round_Rect">Round Rect</a>. May be nullptr.</td>
storage for <ahref="#SkPath_isRRect_start">start</a> of <ahref="undocumented#Round_Rect">Round Rect</a>: 0 for top,
1 for right, 2 for bottom, 3 for left. Unwritten if <ahref="#Path">Path</a> is not <ahref="undocumented#Round_Rect">Round Rect</a>. May be nullptr.</td>
true for <ahref="undocumented#Round_Rect">Round Rect</a><ahref="#Path">Path</a> constructed by <ahref="#SkPath_addRoundRect">addRoundRect</a> or <ahref="#SkPath_addRRect">addRRect</a>.
Removes <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a>, and sets <ahref="#SkPath_FillType">FillType</a> to <ahref="#SkPath_kWinding_FillType">kWinding FillType</a>.
Internal storage associated with <ahref="#Path">Path</a> is released.
Sets <ahref="#Path">Path</a> to its intial state, preserving internal storage.
Removes <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a>, and sets <ahref="#SkPath_FillType">FillType</a> to <ahref="#SkPath_kWinding_FillType">kWinding FillType</a>.
Internal storage associated with <ahref="#Path">Path</a> is retained.
Empty <ahref="#Path">Path</a> may have <ahref="#SkPath_FillType">FillType</a> but has no <ahref="undocumented#SkPoint">SkPoint</a>, <ahref="#SkPath_Verb">Verb</a>, or <ahref="#Conic_Weight">Conic Weight</a>.
<ahref="#SkPath_empty_constructor">SkPath()</a> constructs empty <ahref="#Path">Path</a>; <ahref="#SkPath_reset">reset</a> and (rewind) make <ahref="#Path">Path</a> empty.
<ahref="#Contour">Contour</a> is closed if <ahref="#Path">Path</a><ahref="#SkPath_Verb">Verb</a> array was last modified by <ahref="#SkPath_close">close</a>. When stroked,
closed <ahref="#Contour">Contour</a> draws <ahref="#Stroke_Join">Paint Stroke Join</a> instead of <ahref="#Stroke_Cap">Paint Stroke Cap</a> at first and last <ahref="undocumented#Point">Point</a>.
<div><fiddle-embedname="03b740ab94b9017800a52e30b5e7fee7"><div><ahref="#SkPath_close">close</a> has no effect if <ahref="#Path">Path</a> is empty; <ahref="#SkPath_isLastContourClosed">isLastContourClosed</a> returns
false until <ahref="#Path">Path</a> has geometry followed by <ahref="#SkPath_close">close</a>.</div>
If true, returns true only if <ahref="#SkPath_IsQuadDegenerate_p1">p1</a>, <ahref="#SkPath_IsQuadDegenerate_p2">p2</a>, and <ahref="#SkPath_IsQuadDegenerate_p3">p3</a> are equal.
If false, returns true if <ahref="#SkPath_IsQuadDegenerate_p1">p1</a>, <ahref="#SkPath_IsQuadDegenerate_p2">p2</a>, and <ahref="#SkPath_IsQuadDegenerate_p3">p3</a> are equal or nearly equal.</td>
<div><fiddle-embedname="1d50896c528cd4581966646b7d96acff"><div>As single precision floats: 100, 100.00001f, and 100.00002f have different bit representations
but nearly the same value. Translating all three by 1000 gives them the same bit representation;
the fractional portion of the number can't be represented by the float and is lost.</div>
#### Example Output
~~~~
quad (100,100), (100.00001,100.00001), (100.00002,100.00002) is degenerate, nearly
quad (1100,1100), (1100,1100), (1100,1100) is degenerate, nearly
quad (100,100), (100.00001,100.00001), (100.00002,100.00002) is not degenerate, exactly
quad (1100,1100), (1100,1100), (1100,1100) is degenerate, exactly
If true, returns true only if <ahref="#SkPath_IsCubicDegenerate_p1">p1</a>, <ahref="#SkPath_IsCubicDegenerate_p2">p2</a>, <ahref="#SkPath_IsCubicDegenerate_p3">p3</a>, and <ahref="#SkPath_IsCubicDegenerate_p4">p4</a> are equal.
If false, returns true if <ahref="#SkPath_IsCubicDegenerate_p1">p1</a>, <ahref="#SkPath_IsCubicDegenerate_p2">p2</a>, <ahref="#SkPath_IsCubicDegenerate_p3">p3</a>, and <ahref="#SkPath_IsCubicDegenerate_p4">p4</a> are equal or nearly equal.</td>
Returns true if <ahref="#Path">Path</a> contains only one <ahref="undocumented#Line">Line</a>;
<ahref="#Verb">Path Verb</a> array has two entries: <ahref="#SkPath_kMove_Verb">kMove Verb</a>, <ahref="#SkPath_kLine_Verb">kLine Verb</a>.
If <ahref="#Path">Path</a> contains one <ahref="undocumented#Line">Line</a> and <ahref="#SkPath_isLine_line">line</a> is not nullptr, <ahref="#SkPath_isLine_line">line</a> is set to
<ahref="#Point_Array">Point Array</a> contains <ahref="#Point">Points</a> satisfying the allocated <ahref="#Point">Points</a> for
each <ahref="#SkPath_Verb">Verb</a> in <ahref="#Verb_Array">Verb Array</a>. For instance, <ahref="#Path">Path</a> containing one <ahref="#Contour">Contour</a> with <ahref="undocumented#Line">Line</a>
and <ahref="#Quad">Quad</a> is described by <ahref="#Verb_Array">Verb Array</a>: move to, line to, quad to; and
one <ahref="undocumented#Point">Point</a> for move, one <ahref="undocumented#Point">Point</a> for <ahref="undocumented#Line">Line</a>, two <ahref="#Point">Points</a> for <ahref="#Quad">Quad</a>; totaling four <ahref="#Point">Points</a>.
<ahref="#Point_Array">Point Array</a> may be read directly from <ahref="#Path">Path</a> with <ahref="#SkPath_getPoints">getPoints</a>, or inspected with
<ahref="#SkPath_getPoint">getPoint</a>, with <ahref="SkPath_Reference#Iter">Iter</a>, or with <ahref="SkPath_Reference#RawIter">RawIter</a>.
Returns number of <ahref="#SkPath_getPoints_points">points</a> in <ahref="#Path">Path</a>. Up to <ahref="#SkPath_getPoints_max">max</a><ahref="#SkPath_getPoints_points">points</a> are copied.
<ahref="#SkPath_getPoints_points">points</a> may be nullptr; then, <ahref="#SkPath_getPoints_max">max</a> must be zero.
If <ahref="#SkPath_getPoints_max">max</a> is greater than number of <ahref="#SkPath_getPoints_points">points</a>, excess <ahref="#SkPath_getPoints_points">points</a> storage is unaltered.
Number of <ahref="#SkPath_getPoints_points">points</a> alloted in <ahref="#SkPath_getPoints_points">points</a> storage; must be greater than or equal to zero.</td>
Returns <ahref="undocumented#Point">Point</a> at <ahref="#SkPath_getPoint_index">index</a> in <ahref="#Point_Array">Point Array</a>. Valid range for <ahref="#SkPath_getPoint_index">index</a> is
0 to <ahref="#SkPath_countPoints">countPoints</a> - 1.
If the <ahref="#SkPath_getPoint_index">index</a> is out of range, <ahref="#SkPath_getPoint">getPoint</a> returns (0, 0).
<ahref="#Verb_Array">Verb Array</a> may be read directly from <ahref="#Path">Path</a> with <ahref="#SkPath_getVerbs">getVerbs</a>, or inspected with <ahref="SkPath_Reference#Iter">Iter</a>,
Returns the number of <ahref="#Verb">Verbs</a>: <ahref="#SkPath_kMove_Verb">kMove Verb</a>, <ahref="#SkPath_kLine_Verb">kLine Verb</a>, <ahref="#SkPath_kQuad_Verb">kQuad Verb</a>, <ahref="#SkPath_kConic_Verb">kConic Verb</a>,
<ahref="#SkPath_kCubic_Verb">kCubic Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>; added to <ahref="#Path">Path</a>.
Returns the number of <ahref="#SkPath_getVerbs_verbs">verbs</a> in the path. Up to <ahref="#SkPath_getVerbs_max">max</a><ahref="#SkPath_getVerbs_verbs">verbs</a> are copied. The
<ahref="#SkPath_getVerbs_verbs">verbs</a> are copied as one byte per verb.
Exchanges the <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, <ahref="#Weight">Weights</a>, and <ahref="#Fill_Type">Fill Type</a> with <ahref="#SkPath_swap_other">other</a>.
Cached state is also exchanged. <ahref="#SkPath_swap">swap</a> internally exchanges pointers, so
<ahref="#SkPath_getBounds">getBounds</a> includes all <ahref="#Point">Points</a> added to <ahref="#Path">Path</a>, including <ahref="#Point">Points</a> associated with
<ahref="#SkPath_kMove_Verb">kMove Verb</a> that define empty <ahref="#Contour">Contours</a>.
<div><fiddle-embedname="9160aa6d1476bd87d927cfc8a4bf25e7"><div>Bounds of upright <ahref="undocumented#Circle">Circle</a> can be predicted from center and radius.
<ahref="#SkPath_computeTightBounds">computeTightBounds</a> behaves identically to <ahref="#SkPath_getBounds">getBounds</a> when <ahref="#Path">Path</a> contains
only lines. If <ahref="#Path">Path</a> contains curves, compute <ahref="#SkPath_computeTightBounds">computeTightBounds</a> includes
the maximum extent of the <ahref="#Quad">Quad</a>, <ahref="#Conic">Conic</a>, or <ahref="#Cubic">Cubic</a>; is slower,
Like <ahref="#SkPath_getBounds">getBounds</a>, <ahref="#SkPath_computeTightBounds">computeTightBounds</a> includes <ahref="#Point">Points</a> associated with
<ahref="#SkPath_kMove_Verb">kMove Verb</a> that define empty <ahref="#Contour">Contours</a>.
For now, only returns true if <ahref="#Path">Path</a> has one <ahref="#Contour">Contour</a> and is convex.
<ahref="#SkPath_conservativelyContainsRect_rect">rect</a> may share points and edges with <ahref="#Path">Path</a> and be contained.
If <ahref="#SkPath_conservativelyContainsRect_rect">rect</a> is empty, that is, it has zero width or height; <ahref="#SkPath_conservativelyContainsRect">conservativelyContainsRect</a>
returns true if the <ahref="undocumented#Point">Point</a> or <ahref="undocumented#Line">Line</a> described by <ahref="#SkPath_conservativelyContainsRect_rect">rect</a> is contained by <ahref="#Path">Path</a>.
<div><fiddle-embedname="41638d13e40fa449ece354dde5fb1941"><div><ahref="undocumented#Rect">Rect</a> is drawn in blue if it is contained by red <ahref="#Path">Path</a>.</div></fiddle-embed></div>
Adds beginning of <ahref="#Contour">Contour</a> at <ahref="undocumented#Point">Point</a> (<ahref="#SkPath_moveTo_x">x</a>, <ahref="#SkPath_moveTo_y">y</a>).
Adds beginning of <ahref="#Contour">Contour</a> relative to <ahref="#Last_Point">Last Point</a>.
If <ahref="#Path">Path</a> is empty, starts <ahref="#Contour">Contour</a> at (<ahref="#SkPath_rMoveTo_dx">dx</a>, <ahref="#SkPath_rMoveTo_dy">dy</a>).
Otherwise, start <ahref="#Contour">Contour</a> at <ahref="#Last_Point">Last Point</a> offset by (<ahref="#SkPath_rMoveTo_dx">dx</a>, <ahref="#SkPath_rMoveTo_dy">dy</a>).
<ahref="#SkPath_rMoveTo">rMoveTo</a> stands for relative move to.
Adds <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to (<ahref="#SkPath_lineTo_x">x</a>, <ahref="#SkPath_lineTo_y">y</a>). If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is
<ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0) before adding <ahref="undocumented#Line">Line</a>.
<ahref="#SkPath_lineTo">lineTo</a> appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
<ahref="#SkPath_lineTo">lineTo</a> then appends <ahref="#SkPath_kLine_Verb">kLine Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (<ahref="#SkPath_lineTo_x">x</a>, <ahref="#SkPath_lineTo_y">y</a>) to <ahref="#Point_Array">Point Array</a>.
Adds <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to <ahref="undocumented#Point">Point</a><ahref="#SkPath_lineTo_2_p">p</a>. If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is
<ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0) before adding <ahref="undocumented#Line">Line</a>.
<ahref="#SkPath_lineTo">lineTo</a> first appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
<ahref="#SkPath_lineTo">lineTo</a> then appends <ahref="#SkPath_kLine_Verb">kLine Verb</a> to <ahref="#Verb_Array">Verb Array</a> and <ahref="undocumented#Point">Point</a><ahref="#SkPath_lineTo_2_p">p</a> to <ahref="#Point_Array">Point Array</a>.
Adds <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rLineTo_dx">dx</a>, <ahref="#SkPath_rLineTo_dy">dy</a>). If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is
<ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0) before adding <ahref="undocumented#Line">Line</a>.
<ahref="#SkPath_rLineTo">rLineTo</a> first appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
<ahref="#SkPath_rLineTo">rLineTo</a> then appends <ahref="#SkPath_kLine_Verb">kLine Verb</a> to <ahref="#Verb_Array">Verb Array</a> and <ahref="undocumented#Line">Line</a> end to <ahref="#Point_Array">Point Array</a>.
<ahref="undocumented#Line">Line</a> end is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rLineTo_dx">dx</a>, <ahref="#SkPath_rLineTo_dy">dy</a>).
<ahref="#SkPath_rLineTo">rLineTo</a> stands for relative line to.
<ahref="#Quad">Quad</a> describes a quadratic <ahref="undocumented#Bezier">Bezier</a>, a second-order curve identical to a section
of a parabola. <ahref="#Quad">Quad</a> begins at a start <ahref="undocumented#Point">Point</a>, curves towards a control <ahref="undocumented#Point">Point</a>,
Adds <ahref="#Quad">Quad</a> from <ahref="#Last_Point">Last Point</a> towards (<ahref="#SkPath_quadTo_x1">x1</a>, <ahref="#SkPath_quadTo_y1">y1</a>), to (<ahref="#SkPath_quadTo_x2">x2</a>, <ahref="#SkPath_quadTo_y2">y2</a>).
If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is <ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0)
<ahref="#SkPath_quadTo">quadTo</a> appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
<ahref="#SkPath_quadTo">quadTo</a> then appends <ahref="#SkPath_kQuad_Verb">kQuad Verb</a> to <ahref="#Verb_Array">Verb Array</a>; and (<ahref="#SkPath_quadTo_x1">x1</a>, <ahref="#SkPath_quadTo_y1">y1</a>), (<ahref="#SkPath_quadTo_x2">x2</a>, <ahref="#SkPath_quadTo_y2">y2</a>)
Adds <ahref="#Quad">Quad</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Point">Point</a><ahref="#SkPath_quadTo_2_p1">p1</a>, to <ahref="undocumented#Point">Point</a><ahref="#SkPath_quadTo_2_p2">p2</a>.
If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is <ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0)
<ahref="#SkPath_quadTo">quadTo</a> appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
<ahref="#SkPath_quadTo">quadTo</a> then appends <ahref="#SkPath_kQuad_Verb">kQuad Verb</a> to <ahref="#Verb_Array">Verb Array</a>; and <ahref="#Point">Points</a><ahref="#SkPath_quadTo_2_p1">p1</a>, <ahref="#SkPath_quadTo_2_p2">p2</a>
Adds <ahref="#Quad">Quad</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rQuadTo_dx1">dx1</a>, <ahref="#SkPath_rQuadTo_dy1">dy1</a>), to <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rQuadTo_dx2">dx2</a>, <ahref="#SkPath_rQuadTo_dy2">dy2</a>).
If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a>
is <ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0) before adding <ahref="#Quad">Quad</a>.
<ahref="#SkPath_rQuadTo">rQuadTo</a> first appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>,
if needed. <ahref="#SkPath_rQuadTo">rQuadTo</a> then appends <ahref="#SkPath_kQuad_Verb">kQuad Verb</a> to <ahref="#Verb_Array">Verb Array</a>; and appends <ahref="#Quad">Quad</a>
control and <ahref="#Quad">Quad</a> end to <ahref="#Point_Array">Point Array</a>.
<ahref="#Quad">Quad</a> control is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rQuadTo_dx1">dx1</a>, <ahref="#SkPath_rQuadTo_dy1">dy1</a>).
<ahref="#Quad">Quad</a> end is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rQuadTo_dx2">dx2</a>, <ahref="#SkPath_rQuadTo_dy2">dy2</a>).
<ahref="#SkPath_rQuadTo">rQuadTo</a> stands for relative quad to.
Each <ahref="#Conic">Conic</a> in <ahref="#Path">Path</a> adds two <ahref="#Point">Points</a> and one Weight. <ahref="#Weight">Weights</a> in <ahref="#Path">Path</a> may be
<ahref="#Conic_Weight">Weight</a> determines both the strength of the control <ahref="undocumented#Point">Point</a> and the type of <ahref="#Conic">Conic</a>.
If <ahref="#Conic_Weight">Weight</a> is exactly one, then <ahref="#Conic">Conic</a> is identical to <ahref="#Quad">Quad</a>; it is always a
<div><fiddle-embedname="2aadded3d20dfef34d1c8abe28c7bc8d"><div>When <ahref="#Conic">Conic</a> weight is one, <ahref="#Quad">Quad</a> is added to path; the two are identical.</div>
Adds <ahref="#Conic">Conic</a> from <ahref="#Last_Point">Last Point</a> towards (<ahref="#SkPath_conicTo_x1">x1</a>, <ahref="#SkPath_conicTo_y1">y1</a>), to (<ahref="#SkPath_conicTo_x2">x2</a>, <ahref="#SkPath_conicTo_y2">y2</a>), weighted by <ahref="#SkPath_conicTo_w">w</a>.
If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is <ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0)
<ahref="#SkPath_conicTo">conicTo</a> appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
If <ahref="#SkPath_conicTo_w">w</a> is finite and not one, <ahref="#SkPath_conicTo">conicTo</a> then appends <ahref="#SkPath_kConic_Verb">kConic Verb</a> to <ahref="#Verb_Array">Verb Array</a>;
and (<ahref="#SkPath_conicTo_x1">x1</a>, <ahref="#SkPath_conicTo_y1">y1</a>), (<ahref="#SkPath_conicTo_x2">x2</a>, <ahref="#SkPath_conicTo_y2">y2</a>) to <ahref="#Point_Array">Point Array</a>; and <ahref="#SkPath_conicTo_w">w</a> to <ahref="#Weight">Weights</a>.
If <ahref="#SkPath_conicTo_w">w</a> is one, <ahref="#SkPath_conicTo">conicTo</a> appends <ahref="#SkPath_kQuad_Verb">kQuad Verb</a> to <ahref="#Verb_Array">Verb Array</a>, and
(<ahref="#SkPath_conicTo_x1">x1</a>, <ahref="#SkPath_conicTo_y1">y1</a>), (<ahref="#SkPath_conicTo_x2">x2</a>, <ahref="#SkPath_conicTo_y2">y2</a>) to <ahref="#Point_Array">Point Array</a>.
If <ahref="#SkPath_conicTo_w">w</a> is not finite, <ahref="#SkPath_conicTo">conicTo</a> appends <ahref="#SkPath_kLine_Verb">kLine Verb</a> twice to <ahref="#Verb_Array">Verb Array</a>, and
(<ahref="#SkPath_conicTo_x1">x1</a>, <ahref="#SkPath_conicTo_y1">y1</a>), (<ahref="#SkPath_conicTo_x2">x2</a>, <ahref="#SkPath_conicTo_y2">y2</a>) to <ahref="#Point_Array">Point Array</a>.
Adds <ahref="#Conic">Conic</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Point">Point</a><ahref="#SkPath_conicTo_2_p1">p1</a>, to <ahref="undocumented#Point">Point</a><ahref="#SkPath_conicTo_2_p2">p2</a>, weighted by <ahref="#SkPath_conicTo_2_w">w</a>.
If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is <ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0)
<ahref="#SkPath_conicTo">conicTo</a> appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
If <ahref="#SkPath_conicTo_2_w">w</a> is finite and not one, <ahref="#SkPath_conicTo">conicTo</a> then appends <ahref="#SkPath_kConic_Verb">kConic Verb</a> to <ahref="#Verb_Array">Verb Array</a>;
and <ahref="#Point">Points</a><ahref="#SkPath_conicTo_2_p1">p1</a>, <ahref="#SkPath_conicTo_2_p2">p2</a> to <ahref="#Point_Array">Point Array</a>; and <ahref="#SkPath_conicTo_2_w">w</a> to <ahref="#Weight">Weights</a>.
If <ahref="#SkPath_conicTo_2_w">w</a> is one, <ahref="#SkPath_conicTo">conicTo</a> appends <ahref="#SkPath_kQuad_Verb">kQuad Verb</a> to <ahref="#Verb_Array">Verb Array</a>, and <ahref="#Point">Points</a><ahref="#SkPath_conicTo_2_p1">p1</a>, <ahref="#SkPath_conicTo_2_p2">p2</a>
If <ahref="#SkPath_conicTo_2_w">w</a> is not finite, <ahref="#SkPath_conicTo">conicTo</a> appends <ahref="#SkPath_kLine_Verb">kLine Verb</a> twice to <ahref="#Verb_Array">Verb Array</a>, and
<ahref="#Point">Points</a><ahref="#SkPath_conicTo_2_p1">p1</a>, <ahref="#SkPath_conicTo_2_p2">p2</a> to <ahref="#Point_Array">Point Array</a>.
<div><fiddle-embedname="22d25e03b19d5bae92118877e462361b"><div><ahref="#Conic">Conics</a> and arcs use identical representations. As the arc sweep increases
Adds <ahref="#Conic">Conic</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rConicTo_dx1">dx1</a>, <ahref="#SkPath_rConicTo_dy1">dy1</a>), to <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rConicTo_dx2">dx2</a>, <ahref="#SkPath_rConicTo_dy2">dy2</a>),
weighted by <ahref="#SkPath_rConicTo_w">w</a>. If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a>
is <ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to (0, 0) before adding <ahref="#Conic">Conic</a>.
<ahref="#SkPath_rConicTo">rConicTo</a> first appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>,
If <ahref="#SkPath_rConicTo_w">w</a> is finite and not one, <ahref="#SkPath_rConicTo">rConicTo</a> then appends <ahref="#SkPath_kConic_Verb">kConic Verb</a> to <ahref="#Verb_Array">Verb Array</a>,
and <ahref="#SkPath_rConicTo_w">w</a> is recorded as <ahref="#Conic_Weight">Conic Weight</a>; otherwise, if <ahref="#SkPath_rConicTo_w">w</a> is one, <ahref="#SkPath_rConicTo">rConicTo</a> appends
<ahref="#SkPath_kQuad_Verb">kQuad Verb</a> to <ahref="#Verb_Array">Verb Array</a>; or if <ahref="#SkPath_rConicTo_w">w</a> is not finite, <ahref="#SkPath_rConicTo">rConicTo</a> appends <ahref="#SkPath_kLine_Verb">kLine Verb</a>
In all cases <ahref="#SkPath_rConicTo">rConicTo</a> then appends <ahref="#Point">Points</a> control and end to <ahref="#Point_Array">Point Array</a>.
control is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rConicTo_dx1">dx1</a>, <ahref="#SkPath_rConicTo_dy1">dy1</a>).
end is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rConicTo_dx2">dx2</a>, <ahref="#SkPath_rConicTo_dy2">dy2</a>).
<ahref="#Cubic">Cubic</a> describes a cubic <ahref="undocumented#Bezier">Bezier</a>, a third-order curve.
<ahref="#Cubic">Cubic</a> begins at a start <ahref="undocumented#Point">Point</a>, curving towards the first control <ahref="undocumented#Point">Point</a>;
Adds <ahref="#Cubic">Cubic</a> from <ahref="#Last_Point">Last Point</a> towards (<ahref="#SkPath_cubicTo_x1">x1</a>, <ahref="#SkPath_cubicTo_y1">y1</a>), then towards (<ahref="#SkPath_cubicTo_x2">x2</a>, <ahref="#SkPath_cubicTo_y2">y2</a>), ending at
(<ahref="#SkPath_cubicTo_x3">x3</a>, <ahref="#SkPath_cubicTo_y3">y3</a>). If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is <ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to
<ahref="#SkPath_cubicTo">cubicTo</a> appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
<ahref="#SkPath_cubicTo">cubicTo</a> then appends <ahref="#SkPath_kCubic_Verb">kCubic Verb</a> to <ahref="#Verb_Array">Verb Array</a>; and (<ahref="#SkPath_cubicTo_x1">x1</a>, <ahref="#SkPath_cubicTo_y1">y1</a>), (<ahref="#SkPath_cubicTo_x2">x2</a>, <ahref="#SkPath_cubicTo_y2">y2</a>), (<ahref="#SkPath_cubicTo_x3">x3</a>, <ahref="#SkPath_cubicTo_y3">y3</a>)
Adds <ahref="#Cubic">Cubic</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Point">Point</a><ahref="#SkPath_cubicTo_2_p1">p1</a>, then towards <ahref="undocumented#Point">Point</a><ahref="#SkPath_cubicTo_2_p2">p2</a>, ending at
<ahref="undocumented#Point">Point</a><ahref="#SkPath_cubicTo_2_p3">p3</a>. If <ahref="#Path">Path</a> is empty, or last <ahref="#SkPath_Verb">Verb</a> is <ahref="#SkPath_kClose_Verb">kClose Verb</a>, <ahref="#Last_Point">Last Point</a> is set to
<ahref="#SkPath_cubicTo">cubicTo</a> appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>, if needed.
<ahref="#SkPath_cubicTo">cubicTo</a> then appends <ahref="#SkPath_kCubic_Verb">kCubic Verb</a> to <ahref="#Verb_Array">Verb Array</a>; and <ahref="#Point">Points</a><ahref="#SkPath_cubicTo_2_p1">p1</a>, <ahref="#SkPath_cubicTo_2_p2">p2</a>, <ahref="#SkPath_cubicTo_2_p3">p3</a>
<ahref="#SkPath_rCubicTo">rCubicTo</a> first appends <ahref="#SkPath_kMove_Verb">kMove Verb</a> to <ahref="#Verb_Array">Verb Array</a> and (0, 0) to <ahref="#Point_Array">Point Array</a>,
if needed. <ahref="#SkPath_rCubicTo">rCubicTo</a> then appends <ahref="#SkPath_kCubic_Verb">kCubic Verb</a> to <ahref="#Verb_Array">Verb Array</a>; and appends <ahref="#Cubic">Cubic</a>
control and <ahref="#Cubic">Cubic</a> end to <ahref="#Point_Array">Point Array</a>.
<ahref="#Cubic">Cubic</a> control is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (dx1, dy1).
<ahref="#Cubic">Cubic</a> end is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (dx2, dy2).
<ahref="#SkPath_rCubicTo">rCubicTo</a> stands for relative cubic to.
<ahref="#Arc">Arc</a> can be constructed in a number of ways. <ahref="#Arc">Arc</a> may be described by part of <ahref="undocumented#Oval">Oval</a> and angles,
All <ahref="#Arc">Arc</a> draws are implemented by one or more <ahref="#Conic">Conic</a> draws. When <ahref="#Conic_Weight">Conic Weight</a> is less than one,
<ahref="#Conic">Conic</a> describes an <ahref="#Arc">Arc</a> of some <ahref="undocumented#Oval">Oval</a> or <ahref="undocumented#Circle">Circle</a>.
describes <ahref="#Arc">Arc</a> as a piece of <ahref="undocumented#Oval">Oval</a>, beginning at start angle, sweeping clockwise or counterclockwise,
which may continue <ahref="#Contour">Contour</a> or start a new one. This construction is similar to <ahref="undocumented#PostScript">PostScript</a> and
<ahref="undocumented#HTML_Canvas">HTML Canvas</a> arcs. Variation <ahref="#SkPath_addArc">addArc</a> always starts new <ahref="#Contour">Contour</a>. Canvas::drawArc draws without
describes <ahref="#Arc">Arc</a> as tangent to the line (x0, y0), (x1, y1) and tangent to the line (x1, y1), (x2, y2)
where (x0, y0) is the last <ahref="undocumented#Point">Point</a> added to <ahref="#Path">Path</a>. This construction is similar to <ahref="undocumented#PostScript">PostScript</a> and
describes <ahref="#Arc">Arc</a> as part of <ahref="undocumented#Oval">Oval</a> with radii (rx, ry), beginning at
last <ahref="undocumented#Point">Point</a> added to <ahref="#Path">Path</a> and ending at (x, y). More than one <ahref="#Arc">Arc</a> satisfies this criteria,
<ahref="#SkPath_conicTo">conicTo</a> describes <ahref="#Arc">Arc</a> of less than 180 degrees as a pair of tangent lines and <ahref="#Conic_Weight">Conic Weight</a>.
<ahref="#SkPath_conicTo">conicTo</a> can represent any <ahref="#Arc">Arc</a> with a sweep less than 180 degrees at any rotation. All <ahref="#SkPath_arcTo">arcTo</a>
constructions are converted to <ahref="#Conic">Conic</a> data when added to <ahref="#Path">Path</a>.
5 describes an arc from <ahref="undocumented#Oval">Oval</a> center, arc start <ahref="undocumented#Point">Point</a> and arc end <ahref="undocumented#Point">Point</a>.
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>. <ahref="#Arc">Arc</a> added is part of ellipse
bounded by <ahref="#SkPath_arcTo_oval">oval</a>, from <ahref="#SkPath_arcTo_startAngle">startAngle</a> through <ahref="#SkPath_arcTo_sweepAngle">sweepAngle</a>. Both <ahref="#SkPath_arcTo_startAngle">startAngle</a> and
<ahref="#SkPath_arcTo_sweepAngle">sweepAngle</a> are measured in degrees, where zero degrees is aligned with the
positive x-axis, and positive sweeps extends <ahref="#Arc">Arc</a> clockwise.
<ahref="#SkPath_arcTo">arcTo</a> adds <ahref="undocumented#Line">Line</a> connecting <ahref="#Path">Path</a> last <ahref="undocumented#Point">Point</a> to initial <ahref="#Arc">Arc</a><ahref="undocumented#Point">Point</a> if <ahref="#SkPath_arcTo_forceMoveTo">forceMoveTo</a>
is false and <ahref="#Path">Path</a> is not empty. Otherwise, added <ahref="#Contour">Contour</a> begins with first point
of <ahref="#Arc">Arc</a>. Angles greater than -360 and less than 360 are treated modulo 360.
<div><fiddle-embedname="5f02890edaa10cb5e1a4243a82b6a382"><div><ahref="#SkPath_arcTo">arcTo</a> continues a previous contour when <ahref="#SkPath_arcTo_forceMoveTo">forceMoveTo</a> is false and when <ahref="#Path">Path</a>
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>, after appending <ahref="undocumented#Line">Line</a> if needed. <ahref="#Arc">Arc</a> is implemented by <ahref="#Conic">Conic</a>
weighted to describe part of <ahref="undocumented#Circle">Circle</a>. <ahref="#Arc">Arc</a> is contained by tangent from
last <ahref="#Path">Path</a> point (x0, y0) to (<ahref="#SkPath_arcTo_2_x1">x1</a>, <ahref="#SkPath_arcTo_2_y1">y1</a>), and tangent from (<ahref="#SkPath_arcTo_2_x1">x1</a>, <ahref="#SkPath_arcTo_2_y1">y1</a>) to (<ahref="#SkPath_arcTo_2_x2">x2</a>, <ahref="#SkPath_arcTo_2_y2">y2</a>). <ahref="#Arc">Arc</a>
is part of <ahref="undocumented#Circle">Circle</a> sized to <ahref="#SkPath_arcTo_2_radius">radius</a>, positioned so it touches both tangent lines.
If last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> does not start <ahref="#Arc">Arc</a>, <ahref="#SkPath_arcTo">arcTo</a> appends connecting <ahref="undocumented#Line">Line</a> to <ahref="#Path">Path</a>.
The length of <ahref="undocumented#Vector">Vector</a> from (<ahref="#SkPath_arcTo_2_x1">x1</a>, <ahref="#SkPath_arcTo_2_y1">y1</a>) to (<ahref="#SkPath_arcTo_2_x2">x2</a>, <ahref="#SkPath_arcTo_2_y2">y2</a>) does not affect <ahref="#Arc">Arc</a>.
<ahref="#Arc">Arc</a> sweep is always less than 180 degrees. If <ahref="#SkPath_arcTo_2_radius">radius</a> is zero, or if
tangents are nearly parallel, <ahref="#SkPath_arcTo">arcTo</a> appends <ahref="undocumented#Line">Line</a> from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> to (<ahref="#SkPath_arcTo_2_x1">x1</a>, <ahref="#SkPath_arcTo_2_y1">y1</a>).
<ahref="#SkPath_arcTo">arcTo</a> appends at most one <ahref="undocumented#Line">Line</a> and one <ahref="#Conic">Conic</a>.
<ahref="#SkPath_arcTo">arcTo</a> implements the functionality of <ahref="undocumented#PostScript_arct">PostScript arct</a> and <ahref="undocumented#HTML_Canvas_arcTo">HTML Canvas arcTo</a>.
<div><fiddle-embedname="498360fa0a201cc5db04b1c27256358f"><div><ahref="#SkPath_arcTo">arcTo</a> is represented by <ahref="undocumented#Line">Line</a> and circular <ahref="#Conic">Conic</a> in <ahref="#Path">Path</a>.</div>
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>, after appending <ahref="undocumented#Line">Line</a> if needed. <ahref="#Arc">Arc</a> is implemented by <ahref="#Conic">Conic</a>
weighted to describe part of <ahref="undocumented#Circle">Circle</a>. <ahref="#Arc">Arc</a> is contained by tangent from
last <ahref="#Path">Path</a> point to <ahref="#SkPath_arcTo_3_p1">p1</a>, and tangent from <ahref="#SkPath_arcTo_3_p1">p1</a> to <ahref="#SkPath_arcTo_3_p2">p2</a>. <ahref="#Arc">Arc</a>
is part of <ahref="undocumented#Circle">Circle</a> sized to <ahref="#SkPath_arcTo_3_radius">radius</a>, positioned so it touches both tangent lines.
If last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> does not start <ahref="#Arc">Arc</a>, <ahref="#SkPath_arcTo">arcTo</a> appends connecting <ahref="undocumented#Line">Line</a> to <ahref="#Path">Path</a>.
The length of <ahref="undocumented#Vector">Vector</a> from <ahref="#SkPath_arcTo_3_p1">p1</a> to <ahref="#SkPath_arcTo_3_p2">p2</a> does not affect <ahref="#Arc">Arc</a>.
<ahref="#Arc">Arc</a> sweep is always less than 180 degrees. If <ahref="#SkPath_arcTo_3_radius">radius</a> is zero, or if
tangents are nearly parallel, <ahref="#SkPath_arcTo">arcTo</a> appends <ahref="undocumented#Line">Line</a> from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> to <ahref="#SkPath_arcTo_3_p1">p1</a>.
<ahref="#SkPath_arcTo">arcTo</a> appends at most one <ahref="undocumented#Line">Line</a> and one <ahref="#Conic">Conic</a>.
<ahref="#SkPath_arcTo">arcTo</a> implements the functionality of <ahref="undocumented#PostScript_arct">PostScript arct</a> and <ahref="undocumented#HTML_Canvas_arcTo">HTML Canvas arcTo</a>.
<div><fiddle-embedname="0c056264a361579c18e5d02d3172d4d4"><div>Because tangent lines are parallel, <ahref="#SkPath_arcTo">arcTo</a> appends line from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> to
<ahref="#SkPath_arcTo_3_p1">p1</a>, but does not append a circular <ahref="#Conic">Conic</a>.</div>
Four <ahref="undocumented#Oval">Oval</a> parts with radii (rx, ry) start at last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> and ends at (x, y).
<ahref="#SkPath_ArcSize">ArcSize</a> and <ahref="#SkPath_Direction">Direction</a> select one of the four <ahref="undocumented#Oval">Oval</a> parts.
<td><aname="SkPath_kSmall_ArcSize"><code><strong>SkPath::kSmall_ArcSize </strong></code></a></td><td>0</td><td>Smaller of <ahref="#Arc">Arc</a> pair.</td>
<td><aname="SkPath_kLarge_ArcSize"><code><strong>SkPath::kLarge_ArcSize </strong></code></a></td><td>1</td><td>Larger of <ahref="#Arc">Arc</a> pair.</td>
<div><fiddle-embedname="8e40c546eecd9cc213200717240898ba"><div><ahref="#Arc">Arc</a> begins at top of <ahref="undocumented#Oval">Oval</a> pair and ends at bottom. <ahref="#Arc">Arc</a> can take four routes to get there.
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>. <ahref="#Arc">Arc</a> is implemented by one or more <ahref="#Conic">Conic</a> weighted to describe part of <ahref="undocumented#Oval">Oval</a>
with radii (<ahref="#SkPath_arcTo_4_rx">rx</a>, <ahref="#SkPath_arcTo_4_ry">ry</a>) rotated by <ahref="#SkPath_arcTo_4_xAxisRotate">xAxisRotate</a> degrees. <ahref="#Arc">Arc</a> curves from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> to (<ahref="#SkPath_arcTo_4_x">x</a>, <ahref="#SkPath_arcTo_4_y">y</a>),
<ahref="#Arc">Arc</a><ahref="#SkPath_arcTo_4_sweep">sweep</a> is always less than 360 degrees. <ahref="#SkPath_arcTo">arcTo</a> appends <ahref="undocumented#Line">Line</a> to (<ahref="#SkPath_arcTo_4_x">x</a>, <ahref="#SkPath_arcTo_4_y">y</a>) if either radii are zero,
or if last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> equals (<ahref="#SkPath_arcTo_4_x">x</a>, <ahref="#SkPath_arcTo_4_y">y</a>). <ahref="#SkPath_arcTo">arcTo</a> scales radii (<ahref="#SkPath_arcTo_4_rx">rx</a>, <ahref="#SkPath_arcTo_4_ry">ry</a>) to fit last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> and
(<ahref="#SkPath_arcTo_4_x">x</a>, <ahref="#SkPath_arcTo_4_y">y</a>) if both are greater than zero but too small.
<ahref="#SkPath_arcTo">arcTo</a> appends up to four <ahref="#Conic">Conic</a> curves.
<ahref="#SkPath_arcTo">arcTo</a> implements the functionatlity of <ahref="#Arc">SVG Arc</a>, although <ahref="undocumented#SVG">SVG</a> sweep-flag value is
opposite the integer value of <ahref="#SkPath_arcTo_4_sweep">sweep</a>; <ahref="undocumented#SVG">SVG</a> sweep-flag uses 1 for clockwise, while <ahref="#SkPath_kCW_Direction">kCW Direction</a>
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>. <ahref="#Arc">Arc</a> is implemented by one or more <ahref="#Conic">Conic</a> weighted to describe part of <ahref="undocumented#Oval">Oval</a>
with radii (<ahref="#SkPath_arcTo_5_r">r</a>.fX, <ahref="#SkPath_arcTo_5_r">r</a>.fY) rotated by <ahref="#SkPath_arcTo_5_xAxisRotate">xAxisRotate</a> degrees. <ahref="#Arc">Arc</a> curves from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> to
(<ahref="#SkPath_arcTo_5_xy">xy</a>.fX, <ahref="#SkPath_arcTo_5_xy">xy</a>.fY), choosing one of four possible routes: clockwise or counterclockwise,
<ahref="#Arc">Arc</a><ahref="#SkPath_arcTo_5_sweep">sweep</a> is always less than 360 degrees. <ahref="#SkPath_arcTo">arcTo</a> appends <ahref="undocumented#Line">Line</a> to <ahref="#SkPath_arcTo_5_xy">xy</a> if either radii are zero,
or if last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> equals (x, y). <ahref="#SkPath_arcTo">arcTo</a> scales radii <ahref="#SkPath_arcTo_5_r">r</a> to fit last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> and
<ahref="#SkPath_arcTo_5_xy">xy</a> if both are greater than zero but too small.
<ahref="#SkPath_arcTo">arcTo</a> appends up to four <ahref="#Conic">Conic</a> curves.
<ahref="#SkPath_arcTo">arcTo</a> implements the functionatlity of <ahref="#Arc">SVG Arc</a>, although <ahref="undocumented#SVG">SVG</a> sweep-flag value is
opposite the integer value of <ahref="#SkPath_arcTo_5_sweep">sweep</a>; <ahref="undocumented#SVG">SVG</a> sweep-flag uses 1 for clockwise, while <ahref="#SkPath_kCW_Direction">kCW Direction</a>
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>, relative to last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a>. <ahref="#Arc">Arc</a> is implemented by one or
more <ahref="#Conic">Conic</a>, weighted to describe part of <ahref="undocumented#Oval">Oval</a> with radii (r.fX, r.fY) rotated by
<ahref="#SkPath_rArcTo_xAxisRotate">xAxisRotate</a> degrees. <ahref="#Arc">Arc</a> curves from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> (x0, y0) to
(x0 + <ahref="#SkPath_rArcTo_dx">dx</a>, y0 + <ahref="#SkPath_rArcTo_dy">dy</a>), choosing one of four possible routes: clockwise or
counterclockwise, and smaller or larger. If <ahref="#Path">Path</a> is empty, the start <ahref="#Arc">Arc</a><ahref="undocumented#Point">Point</a>
<ahref="#Arc">Arc</a><ahref="#SkPath_rArcTo_sweep">sweep</a> is always less than 360 degrees. <ahref="#SkPath_arcTo">arcTo</a> appends <ahref="undocumented#Line">Line</a> to xy if either
radii are zero, or if last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> equals (x, y). <ahref="#SkPath_arcTo">arcTo</a> scales radii r to fit
last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> and xy if both are greater than zero but too small.
<ahref="#SkPath_arcTo">arcTo</a> appends up to four <ahref="#Conic">Conic</a> curves.
<ahref="#SkPath_arcTo">arcTo</a> implements the functionatlity of <ahref="#Arc">SVG Arc</a>, although <ahref="undocumented#SVG">SVG</a> sweep-flag value is
opposite the integer value of <ahref="#SkPath_rArcTo_sweep">sweep</a>; <ahref="undocumented#SVG">SVG</a> sweep-flag uses 1 for clockwise, while
<ahref="#SkPath_kCW_Direction">kCW Direction</a> cast to int is zero.
Append <ahref="#SkPath_kClose_Verb">kClose Verb</a> to <ahref="#Path">Path</a>. A closed <ahref="#Contour">Contour</a> connects the first and last <ahref="undocumented#Point">Point</a>
with <ahref="undocumented#Line">Line</a>, forming a continous loop. Open and closed <ahref="#Contour">Contour</a> draw the same
with <ahref="#SkPaint_kFill_Style">SkPaint::kFill Style</a>. With <ahref="#SkPaint_kStroke_Style">SkPaint::kStroke Style</a>, open <ahref="#Contour">Contour</a> draws
<ahref="#Stroke_Cap">Paint Stroke Cap</a> at <ahref="#Contour">Contour</a> start and end; closed <ahref="#Contour">Contour</a> draws
<ahref="#Stroke_Join">Paint Stroke Join</a> at <ahref="#Contour">Contour</a> start and end.
<ahref="#SkPath_close">close</a> has no effect if <ahref="#Path">Path</a> is empty or last <ahref="#Path">Path</a><ahref="#SkPath_Verb">Verb</a> is <ahref="#SkPath_kClose_Verb">kClose Verb</a>.
Returns true if <ahref="#SkPath_IsInverseFillType_fill">fill</a> is inverted and <ahref="#Path">Path</a> with <ahref="#SkPath_IsInverseFillType_fill">fill</a> represents area outside
<ahref="#SkPath_ConvertToNonInverseFillType_fill">fill</a>, or <ahref="#SkPath_kWinding_FillType">kWinding FillType</a> or <ahref="#SkPath_kEvenOdd_FillType">kEvenOdd FillType</a> if <ahref="#SkPath_ConvertToNonInverseFillType_fill">fill</a> is inverted.
Approximates <ahref="#Conic">Conic</a> with <ahref="#Quad">Quad</a> array. <ahref="#Conic">Conic</a> is constructed from start <ahref="undocumented#Point">Point</a><ahref="#SkPath_ConvertConicToQuads_p0">p0</a>,
control <ahref="undocumented#Point">Point</a><ahref="#SkPath_ConvertConicToQuads_p1">p1</a>, end <ahref="undocumented#Point">Point</a><ahref="#SkPath_ConvertConicToQuads_p2">p2</a>, and weight <ahref="#SkPath_ConvertConicToQuads_w">w</a>.
<ahref="#Quad">Quad</a> array is stored in <ahref="#SkPath_ConvertConicToQuads_pts">pts</a>; this storage is supplied by caller.
Maximum <ahref="#Quad">Quad</a> count is 2 to the <ahref="#SkPath_ConvertConicToQuads_pow2">pow2</a>.
Every third point in array shares last <ahref="undocumented#Point">Point</a> of previous <ahref="#Quad">Quad</a> and first <ahref="undocumented#Point">Point</a> of
next <ahref="#Quad">Quad</a>. Maximum <ahref="#SkPath_ConvertConicToQuads_pts">pts</a> storage size is given by:
(1 + 2 * (1 << <a href="#SkPath_ConvertConicToQuads_pow2">pow2</a>)) * sizeof(SkPoint)<ahref="#SkPath_ConvertConicToQuads">ConvertConicToQuads</a> returns <ahref="#Quad">Quad</a> count used the approximation, which may be smaller
<ahref="#Conic_Weight">Conic Weight</a> determines the amount of influence <ahref="#Conic">Conic</a> control point has on the curve.
<ahref="#SkPath_ConvertConicToQuads_w">w</a> less than one represents an elliptical section. <ahref="#SkPath_ConvertConicToQuads_w">w</a> greater than one represents
a hyperbolic section. <ahref="#SkPath_ConvertConicToQuads_w">w</a> equal to one represents a parabolic section.
<div><fiddle-embedname="3ba94448a4ba48f926e643baeb5b1016"><div>A pair of <ahref="#Quad">Quad</a> curves are drawn in red on top of the elliptical <ahref="#Conic">Conic</a> curve in black.
Returns true if <ahref="#Path">Path</a> is eqivalent to <ahref="undocumented#Rect">Rect</a> when filled.
If <ahref="#SkPath_isRect">isRect</a> returns false: <ahref="#SkPath_isRect_rect">rect</a>, <ahref="#SkPath_isRect_isClosed">isClosed</a>, and <ahref="#SkPath_isRect_direction">direction</a> are unchanged.
If <ahref="#SkPath_isRect">isRect</a> returns true: <ahref="#SkPath_isRect_rect">rect</a>, <ahref="#SkPath_isRect_isClosed">isClosed</a>, and <ahref="#SkPath_isRect_direction">direction</a> are written to if not nullptr.
<ahref="#SkPath_isRect_rect">rect</a> may be smaller than the <ahref="#Path">Path</a> bounds. <ahref="#Path">Path</a> bounds may include <ahref="#SkPath_kMove_Verb">kMove Verb</a> points
that do not alter the area drawn by the returned <ahref="#SkPath_isRect_rect">rect</a>.
<div><fiddle-embedname="063a5f0a8de1fe998d227393e0866557"><div>After <ahref="#SkPath_addRect">addRect</a>, <ahref="#SkPath_isRect">isRect</a> returns true. Following <ahref="#SkPath_moveTo">moveTo</a> permits <ahref="#SkPath_isRect">isRect</a> to return true, but
following <ahref="#SkPath_lineTo">lineTo</a> does not. <ahref="#SkPath_addPoly">addPoly</a> returns true even though <ahref="#SkPath_isRect_rect">rect</a> is not closed, and one
side of <ahref="#SkPath_isRect_rect">rect</a> is made up of consecutive line segments.</div>
Returns true if <ahref="#Path">Path</a> is equivalent to nested <ahref="undocumented#Rect">Rect</a> pair when filled.
If <ahref="#SkPath_isNestedFillRects">isNestedFillRects</a> returns false, <ahref="#SkPath_isNestedFillRects_rect">rect</a> and <ahref="#SkPath_isNestedFillRects_dirs">dirs</a> are unchanged.
If <ahref="#SkPath_isNestedFillRects">isNestedFillRects</a> returns true, <ahref="#SkPath_isNestedFillRects_rect">rect</a> and <ahref="#SkPath_isNestedFillRects_dirs">dirs</a> are written to if not nullptr:
setting <ahref="#SkPath_isNestedFillRects_rect">rect</a>[0] to outer <ahref="undocumented#Rect">Rect</a>, and <ahref="#SkPath_isNestedFillRects_rect">rect</a>[1] to inner <ahref="undocumented#Rect">Rect</a>;
setting <ahref="#SkPath_isNestedFillRects_dirs">dirs</a>[0] to <ahref="#SkPath_Direction">Direction</a> of outer <ahref="undocumented#Rect">Rect</a>, and <ahref="#SkPath_isNestedFillRects_dirs">dirs</a>[1] to <ahref="#SkPath_Direction">Direction</a> of inner
Add <ahref="undocumented#Rect">Rect</a> to <ahref="#Path">Path</a>, appending <ahref="#SkPath_kMove_Verb">kMove Verb</a>, three <ahref="#SkPath_kLine_Verb">kLine Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>,
<div><fiddle-embedname="0f841e4eaebb613b5069800567917c2d"><div>The left <ahref="undocumented#Rect">Rect</a> dashes starting at the top-left corner, to the right.
The right <ahref="undocumented#Rect">Rect</a> dashes starting at the top-left corner, towards the bottom.</div></fiddle-embed></div>
Add <ahref="undocumented#Rect">Rect</a> to <ahref="#Path">Path</a>, appending <ahref="#SkPath_kMove_Verb">kMove Verb</a>, three <ahref="#SkPath_kLine_Verb">kLine Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>.
If <ahref="#SkPath_addRect_2_dir">dir</a> is <ahref="#SkPath_kCW_Direction">kCW Direction</a>, <ahref="undocumented#Rect">Rect</a> corners are added clockwise; if <ahref="#SkPath_addRect_2_dir">dir</a> is
<ahref="#SkPath_kCCW_Direction">kCCW Direction</a>, <ahref="undocumented#Rect">Rect</a> corners are added counterclockwise.
<ahref="#SkPath_addRect_2_start">start</a> determines the first corner added.
Add <ahref="undocumented#Rect">Rect</a> (<ahref="#SkPath_addRect_3_left">left</a>, <ahref="#SkPath_addRect_3_top">top</a>, <ahref="#SkPath_addRect_3_right">right</a>, <ahref="#SkPath_addRect_3_bottom">bottom</a>) to <ahref="#Path">Path</a>,
appending <ahref="#SkPath_kMove_Verb">kMove Verb</a>, three <ahref="#SkPath_kLine_Verb">kLine Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>,
<div><fiddle-embedname="3837827310e8b88b8c2e128ef9fbbd65"><div>The <ahref="#SkPath_addRect_3_left">left</a><ahref="undocumented#Rect">Rect</a> dashes start at the top-left corner, and continue to the <ahref="#SkPath_addRect_3_right">right</a>.
The <ahref="#SkPath_addRect_3_right">right</a><ahref="undocumented#Rect">Rect</a> dashes start at the top-left corner, and continue down.</div></fiddle-embed></div>
Add <ahref="undocumented#Oval">Oval</a> to path, appending <ahref="#SkPath_kMove_Verb">kMove Verb</a>, four <ahref="#SkPath_kConic_Verb">kConic Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>.
<ahref="undocumented#Oval">Oval</a> is upright ellipse bounded by <ahref="undocumented#Rect">Rect</a><ahref="#SkPath_addOval_oval">oval</a> with radii equal to half <ahref="#SkPath_addOval_oval">oval</a> width
and half <ahref="#SkPath_addOval_oval">oval</a> height. <ahref="undocumented#Oval">Oval</a> begins at (<ahref="#SkPath_addOval_oval">oval</a>.fRight, <ahref="#SkPath_addOval_oval">oval</a>.centerY()) and continues
clockwise if <ahref="#SkPath_addOval_dir">dir</a> is <ahref="#SkPath_kCW_Direction">kCW Direction</a>, counterclockwise if <ahref="#SkPath_addOval_dir">dir</a> is <ahref="#SkPath_kCCW_Direction">kCCW Direction</a>.
Add <ahref="undocumented#Oval">Oval</a> to <ahref="#Path">Path</a>, appending <ahref="#SkPath_kMove_Verb">kMove Verb</a>, four <ahref="#SkPath_kConic_Verb">kConic Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>.
<ahref="undocumented#Oval">Oval</a> is upright ellipse bounded by <ahref="undocumented#Rect">Rect</a><ahref="#SkPath_addOval_2_oval">oval</a> with radii equal to half <ahref="#SkPath_addOval_2_oval">oval</a> width
and half <ahref="#SkPath_addOval_2_oval">oval</a> height. <ahref="undocumented#Oval">Oval</a> begins at <ahref="#SkPath_addOval_2_start">start</a> and continues
clockwise if <ahref="#SkPath_addOval_2_dir">dir</a> is <ahref="#SkPath_kCW_Direction">kCW Direction</a>, counterclockwise if <ahref="#SkPath_addOval_2_dir">dir</a> is <ahref="#SkPath_kCCW_Direction">kCCW Direction</a>.
Add <ahref="undocumented#Circle">Circle</a> centered at (<ahref="#SkPath_addCircle_x">x</a>, <ahref="#SkPath_addCircle_y">y</a>) of size <ahref="#SkPath_addCircle_radius">radius</a> to <ahref="#Path">Path</a>, appending <ahref="#SkPath_kMove_Verb">kMove Verb</a>,
four <ahref="#SkPath_kConic_Verb">kConic Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>. <ahref="undocumented#Circle">Circle</a> begins at (<ahref="#SkPath_addCircle_x">x</a> + <ahref="#SkPath_addCircle_radius">radius</a>, <ahref="#SkPath_addCircle_y">y</a>) and
continues clockwise if <ahref="#SkPath_addCircle_dir">dir</a> is <ahref="#SkPath_kCW_Direction">kCW Direction</a>, counterclockwise if <ahref="#SkPath_addCircle_dir">dir</a> is
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>, as the start of new <ahref="#Contour">Contour</a>. <ahref="#Arc">Arc</a> added is part of ellipse
bounded by <ahref="#SkPath_addArc_oval">oval</a>, from <ahref="#SkPath_addArc_startAngle">startAngle</a> through <ahref="#SkPath_addArc_sweepAngle">sweepAngle</a>. Both <ahref="#SkPath_addArc_startAngle">startAngle</a> and
<ahref="#SkPath_addArc_sweepAngle">sweepAngle</a> are measured in degrees, where zero degrees is aligned with the
positive x-axis, and positive sweeps extends <ahref="#Arc">Arc</a> clockwise.
If <ahref="#SkPath_addArc_sweepAngle">sweepAngle</a><= -360, or <ahref="#SkPath_addArc_sweepAngle">sweepAngle</a> >= 360; and <ahref="#SkPath_addArc_startAngle">startAngle</a> modulo 90 is nearly
zero, append <ahref="undocumented#Oval">Oval</a> instead of <ahref="#Arc">Arc</a>. Otherwise, <ahref="#SkPath_addArc_sweepAngle">sweepAngle</a> values are treated
modulo 360, and <ahref="#Arc">Arc</a> may or may not draw depending on numeric rounding.
Append <ahref="undocumented#Round_Rect">Round Rect</a> to <ahref="#Path">Path</a>, creating a new closed <ahref="#Contour">Contour</a>. <ahref="undocumented#Round_Rect">Round Rect</a> has bounds
equal to <ahref="#SkPath_addRoundRect_rect">rect</a>; each corner is 90 degrees of an ellipse with radii (<ahref="#SkPath_addRoundRect_rx">rx</a>, <ahref="#SkPath_addRoundRect_ry">ry</a>). If
<ahref="#SkPath_addRoundRect_dir">dir</a> is <ahref="#SkPath_kCW_Direction">kCW Direction</a>, <ahref="undocumented#Round_Rect">Round Rect</a> starts at top-left of the lower-left corner and
winds clockwise. If <ahref="#SkPath_addRoundRect_dir">dir</a> is <ahref="#SkPath_kCCW_Direction">kCCW Direction</a>, <ahref="undocumented#Round_Rect">Round Rect</a> starts at the bottom-left
If either <ahref="#SkPath_addRoundRect_rx">rx</a> or <ahref="#SkPath_addRoundRect_ry">ry</a> is too large, <ahref="#SkPath_addRoundRect_rx">rx</a> and <ahref="#SkPath_addRoundRect_ry">ry</a> are scaled uniformly until the
corners fit. If <ahref="#SkPath_addRoundRect_rx">rx</a> or <ahref="#SkPath_addRoundRect_ry">ry</a> is less than or equal to zero, <ahref="#SkPath_addRoundRect">addRoundRect</a> appends
<ahref="undocumented#Rect">Rect</a><ahref="#SkPath_addRoundRect_rect">rect</a> to <ahref="#Path">Path</a>.
After appending, <ahref="#Path">Path</a> may be empty, or may contain: <ahref="undocumented#Rect">Rect</a>, <ahref="undocumented#Oval">Oval</a>, or RoundRect.
<div><fiddle-embedname="24736f685f265cf533f1700c042db353"><div>If either radius is zero, path contains <ahref="undocumented#Rect">Rect</a> and is drawn red.
If sides are only radii, path contains <ahref="undocumented#Oval">Oval</a> and is drawn blue.
Append <ahref="undocumented#Round_Rect">Round Rect</a> to <ahref="#Path">Path</a>, creating a new closed <ahref="#Contour">Contour</a>. <ahref="undocumented#Round_Rect">Round Rect</a> has bounds
equal to <ahref="#SkPath_addRoundRect_2_rect">rect</a>; each corner is 90 degrees of an ellipse with <ahref="#SkPath_addRoundRect_2_radii">radii</a> from the
If <ahref="#SkPath_addRoundRect_2_dir">dir</a> is <ahref="#SkPath_kCW_Direction">kCW Direction</a>, <ahref="undocumented#Round_Rect">Round Rect</a> starts at top-left of the lower-left corner
and winds clockwise. If <ahref="#SkPath_addRoundRect_2_dir">dir</a> is <ahref="#SkPath_kCCW_Direction">kCCW Direction</a>, <ahref="undocumented#Round_Rect">Round Rect</a> starts at the
If both <ahref="#SkPath_addRoundRect_2_radii">radii</a> on any side of <ahref="#SkPath_addRoundRect_2_rect">rect</a> exceed its length, all <ahref="#SkPath_addRoundRect_2_radii">radii</a> are scaled
After appending, <ahref="#Path">Path</a> may be empty, or may contain: <ahref="undocumented#Rect">Rect</a>, <ahref="undocumented#Oval">Oval</a>, or RoundRect.
Add <ahref="#SkPath_addRRect_rrect">rrect</a> to <ahref="#Path">Path</a>, creating a new closed <ahref="#Contour">Contour</a>. If
<ahref="#SkPath_addRRect_dir">dir</a> is <ahref="#SkPath_kCW_Direction">kCW Direction</a>, <ahref="#SkPath_addRRect_rrect">rrect</a> starts at top-left of the lower-left corner and
winds clockwise. If <ahref="#SkPath_addRRect_dir">dir</a> is <ahref="#SkPath_kCCW_Direction">kCCW Direction</a>, <ahref="#SkPath_addRRect_rrect">rrect</a> starts at the bottom-left
After appending, <ahref="#Path">Path</a> may be empty, or may contain: <ahref="undocumented#Rect">Rect</a>, <ahref="undocumented#Oval">Oval</a>, or RRect.
Add <ahref="#SkPath_addRRect_2_rrect">rrect</a> to <ahref="#Path">Path</a>, creating a new closed <ahref="#Contour">Contour</a>. If <ahref="#SkPath_addRRect_2_dir">dir</a> is <ahref="#SkPath_kCW_Direction">kCW Direction</a>, <ahref="#SkPath_addRRect_2_rrect">rrect</a>
winds clockwise; if <ahref="#SkPath_addRRect_2_dir">dir</a> is <ahref="#SkPath_kCCW_Direction">kCCW Direction</a>, <ahref="#SkPath_addRRect_2_rrect">rrect</a> winds counterclockwise.
<ahref="#SkPath_addRRect_2_start">start</a> determines the first point of <ahref="#SkPath_addRRect_2_rrect">rrect</a> to add.
After appending, <ahref="#Path">Path</a> may be empty, or may contain: <ahref="undocumented#Rect">Rect</a>, <ahref="undocumented#Oval">Oval</a>, or RRect.
Add <ahref="#Contour">Contour</a> created from <ahref="undocumented#Line">Line</a> Array. Given <ahref="#SkPath_addPoly_count">count</a><ahref="#SkPath_addPoly_pts">pts</a>, <ahref="#SkPath_addPoly">addPoly</a> adds
<ahref="#SkPath_addPoly_count">count</a> - 1 <ahref="undocumented#Line">Line</a> segments. <ahref="#Contour">Contour</a> added starts at pt[0], then adds a line
for every additional <ahref="undocumented#Point">Point</a> in <ahref="#SkPath_addPoly_pts">pts</a> array. If <ahref="#SkPath_addPoly_close">close</a> is true, <ahref="#SkPath_addPoly">addPoly</a>
appends <ahref="#SkPath_kClose_Verb">kClose Verb</a> to <ahref="#Path">Path</a>, connecting <ahref="#SkPath_addPoly_pts">pts</a>[<ahref="#SkPath_addPoly_count">count</a> - 1] and <ahref="#SkPath_addPoly_pts">pts</a>[0].
<ahref="#SkPath_AddPathMode">AddPathMode</a> chooses how <ahref="#SkPath_addPath">addPath</a> appends. Adding one <ahref="#Path">Path</a> to another can extend
the last <ahref="#Contour">Contour</a> or start a new <ahref="#Contour">Contour</a>.
<td><aname="SkPath_kAppend_AddPathMode"><code><strong>SkPath::kAppend_AddPathMode </strong></code></a></td><td>Path Verbs, Points, and Weights are appended to destination unaltered.</td><td>Since <ahref="#Path">Path</a><ahref="#Verb_Array">Verb Array</a> begins with <ahref="#SkPath_kMove_Verb">kMove Verb</a> if src is not empty, this
<td><aname="SkPath_kExtend_AddPathMode"><code><strong>SkPath::kExtend_AddPathMode </strong></code></a></td><td>If destination is closed or empty, start a new Contour. If destination</td><td>is not empty, add <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to added <ahref="#Path">Path</a> first <ahref="undocumented#Point">Point</a>. Skip added
<ahref="#Path">Path</a> initial <ahref="#SkPath_kMove_Verb">kMove Verb</a>, then append remining <ahref="#Verb">Verbs</a>, <ahref="#Point">Points</a>, and <ahref="#Weight">Weights</a>.</td>
The left column uses <ahref="#SkPath_kAppend_AddPathMode">kAppend AddPathMode</a>; the right uses <ahref="#SkPath_kExtend_AddPathMode">kExtend AddPathMode</a>.
Append <ahref="#SkPath_addPath_src">src</a> to <ahref="#Path">Path</a>, offset by (<ahref="#SkPath_addPath_dx">dx</a>, <ahref="#SkPath_addPath_dy">dy</a>).
If <ahref="#SkPath_addPath_mode">mode</a> is <ahref="#SkPath_kAppend_AddPathMode">kAppend AddPathMode</a>, <ahref="#SkPath_addPath_src">src</a><ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a> are
added unaltered. If <ahref="#SkPath_addPath_mode">mode</a> is <ahref="#SkPath_kExtend_AddPathMode">kExtend AddPathMode</a>, add <ahref="undocumented#Line">Line</a> before appending
<ahref="#Verb">Verbs</a>, <ahref="#Point">Points</a>, and <ahref="#Weight">Weights</a>.
If <ahref="#SkPath_addPath_2_mode">mode</a> is <ahref="#SkPath_kAppend_AddPathMode">kAppend AddPathMode</a>, <ahref="#SkPath_addPath_2_src">src</a><ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a> are
added unaltered. If <ahref="#SkPath_addPath_2_mode">mode</a> is <ahref="#SkPath_kExtend_AddPathMode">kExtend AddPathMode</a>, add <ahref="undocumented#Line">Line</a> before appending
<ahref="#Verb">Verbs</a>, <ahref="#Point">Points</a>, and <ahref="#Weight">Weights</a>.
Append <ahref="#SkPath_addPath_3_src">src</a> to <ahref="#Path">Path</a>, transformed by <ahref="#SkPath_addPath_3_matrix">matrix</a>. Transformed curves may have different
<ahref="#Verb">Verbs</a>, <ahref="#Point">Points</a>, and <ahref="#Weight">Weights</a>.
If <ahref="#SkPath_addPath_3_mode">mode</a> is <ahref="#SkPath_kAppend_AddPathMode">kAppend AddPathMode</a>, <ahref="#SkPath_addPath_3_src">src</a><ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a> are
added unaltered. If <ahref="#SkPath_addPath_3_mode">mode</a> is <ahref="#SkPath_kExtend_AddPathMode">kExtend AddPathMode</a>, add <ahref="undocumented#Line">Line</a> before appending
<ahref="#Verb">Verbs</a>, <ahref="#Point">Points</a>, and <ahref="#Weight">Weights</a>.
Offset <ahref="#Point_Array">Point Array</a> by (<ahref="#SkPath_offset_2_dx">dx</a>, <ahref="#SkPath_offset_2_dy">dy</a>). <ahref="#Path">Path</a> is replaced by offset data.
Transform <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and weight by <ahref="#SkPath_transform_matrix">matrix</a>.
transform may change <ahref="#Verb">Verbs</a> and increase their number.
Transformed <ahref="#Path">Path</a> replaces <ahref="#SkPath_transform_dst">dst</a>; if <ahref="#SkPath_transform_dst">dst</a> is nullptr, original data
<ahref="#Path">Path</a> is defined cumulatively, often by adding a segment to the end of last
<ahref="#Contour">Contour</a>. <ahref="#Last_Point">Last Point</a> of <ahref="#Contour">Contour</a> is shared as first <ahref="undocumented#Point">Point</a> of added <ahref="undocumented#Line">Line</a> or <ahref="undocumented#Curve">Curve</a>.
<ahref="#Last_Point">Last Point</a> can be read and written directly with <ahref="#SkPath_getLastPt">getLastPt</a> and <ahref="#SkPath_setLastPt">setLastPt</a>.
Returns <ahref="#Last_Point">Last Point</a> on <ahref="#Path">Path</a> in <ahref="#SkPath_getLastPt_lastPt">lastPt</a>. Returns false if <ahref="#Point_Array">Point Array</a> is empty,
storing (0, 0) if <ahref="#SkPath_getLastPt_lastPt">lastPt</a> is not nullptr.
Set <ahref="#Last_Point">Last Point</a> to (<ahref="#SkPath_setLastPt_x">x</a>, <ahref="#SkPath_setLastPt_y">y</a>). If <ahref="#Point_Array">Point Array</a> is empty, append <ahref="#SkPath_kMove_Verb">kMove Verb</a> to
<ahref="#Verb_Array">Verb Array</a> and (<ahref="#SkPath_setLastPt_x">x</a>, <ahref="#SkPath_setLastPt_y">y</a>) to <ahref="#Point_Array">Point Array</a>.
<ahref="#SkPath_SegmentMask">SegmentMask</a> constants correspond to each drawing <ahref="#SkPath_Verb">Verb</a> type in <ahref="#Path">Path</a>; for
instance, if <ahref="#Path">Path</a> only contains <ahref="#Line">Lines</a>, only the <ahref="#SkPath_kLine_SegmentMask">kLine SegmentMask</a> bit is set.
<td><aname="SkPath_kQuad_SegmentMask"><code><strong>SkPath::kQuad_SegmentMask </strong></code></a></td><td>2</td><td>Set if <ahref="#Verb_Array">Verb Array</a> contains <ahref="#SkPath_kQuad_Verb">kQuad Verb</a>. Note that <ahref="#SkPath_conicTo">conicTo</a> may add a <ahref="#Quad">Quad</a>.</td>
<div><fiddle-embedname="0972a1bd6e012c7519d3998afc32e69f"><div>When <ahref="#SkPath_conicTo">conicTo</a> has a weight of one, <ahref="#Quad">Quad</a> is added to <ahref="#Path">Path</a>.</div>
| <ahref="#SkPath_FillType">FillType</a> | <ahref="#SkPath_contains">contains</a> returns true if <ahref="undocumented#Point">Point</a> is enclosed by |
| <ahref="#SkPath_kWinding_FillType">kWinding FillType</a> | a non-zero sum of <ahref="#Contour">Contour</a><ahref="#Direction">Directions</a>. |
| <ahref="#SkPath_kEvenOdd_FillType">kEvenOdd FillType</a> | an odd number of <ahref="#Contour">Contours</a>. |
| <ahref="#SkPath_kInverseWinding_FillType">kInverseWinding FillType</a> | a zero sum of <ahref="#Contour">Contour</a><ahref="#Direction">Directions</a>. |
| <ahref="#SkPath_kInverseEvenOdd_FillType">kInverseEvenOdd FillType</a> | and even number of <ahref="#Contour">Contours</a>. |
Writes text representation of <ahref="#Path">Path</a> to <ahref="#SkPath_dump_stream">stream</a>. If <ahref="#SkPath_dump_stream">stream</a> is nullptr, <ahref="#SkPath_dump">dump</a> writes to
stdout. Set <ahref="#SkPath_dump_forceClose">forceClose</a> to true to get
edges used to fill <ahref="#Path">Path</a>. Set <ahref="#SkPath_dump_dumpAsHex">dumpAsHex</a> true to get exact binary representations
of floating point numbers used in <ahref="#Point_Array">Point Array</a> and <ahref="#Weight">Weights</a>.
Initializes <ahref="#Path">Path</a> from <ahref="#SkPath_readFromMemory_buffer">buffer</a> of size <ahref="#SkPath_readFromMemory_length">length</a>. Returns zero if the <ahref="#SkPath_readFromMemory_buffer">buffer</a> is
data is inconsistent, or the <ahref="#SkPath_readFromMemory_length">length</a> is too small.
<ahref="#Generation_ID">Generation ID</a> provides a quick way to check if <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, or
<ahref="#Conic_Weight">Conic Weight</a> has changed. <ahref="#Generation_ID">Generation ID</a> is not a hash; identical <ahref="#Path">Paths</a> will
Iterates through <ahref="#Verb_Array">Verb Array</a>, and associated <ahref="#Point_Array">Point Array</a> and <ahref="#Conic_Weight">Conic Weight</a>.
Provides options to treat open <ahref="#Contour">Contours</a> as closed, and to ignore
Initializes <ahref="#Iter">Iter</a> with an empty <ahref="#Path">Path</a>. <ahref="#next">next</a> on <ahref="#Iter">Iter</a> returns <ahref="#SkPath_kDone_Verb">kDone Verb</a>.
Call <ahref="#setPath">setPath</a> to initialize <ahref="#Iter">Iter</a> at a later time.
Sets <ahref="#Iter">Iter</a> to return elements of <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> in <ahref="#Iter_const_SkPath_path">path</a>.
If <ahref="#Iter_const_SkPath_forceClose">forceClose</a> is true, <ahref="#Iter">Iter</a> will add <ahref="#SkPath_kLine_Verb">kLine Verb</a> and <ahref="#SkPath_kClose_Verb">kClose Verb</a> after each
open <ahref="#Contour">Contour</a>. <ahref="#Iter_const_SkPath_path">path</a> is not altered.
Sets <ahref="#Iter">Iter</a> to return elements of <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> in <ahref="#Iter_setPath_path">path</a>.
If <ahref="#Iter_setPath_forceClose">forceClose</a> is true, <ahref="#Iter">Iter</a> will add <ahref="#SkPath_kLine_Verb">kLine Verb</a> and <ahref="#SkPath_kClose_Verb">kClose Verb</a> after each
open <ahref="#Contour">Contour</a>. <ahref="#Iter_setPath_path">path</a> is not altered.
Returns next <ahref="#SkPath_Verb">Verb</a> in <ahref="#Verb_Array">Verb Array</a>, and advances <ahref="#Iter">Iter</a>.
When <ahref="#Verb_Array">Verb Array</a> is exhausted, returns <ahref="#SkPath_kDone_Verb">kDone Verb</a>.
Zero to four <ahref="#Point">Points</a> are stored in <ahref="#Iter_next_pts">pts</a>, depending on the returned <ahref="#SkPath_Verb">Verb</a>.
If <ahref="#Iter_next_doConsumeDegenerates">doConsumeDegenerates</a> is true, skip consecutive <ahref="#SkPath_kMove_Verb">kMove Verb</a> entries, returning
only the last in the series; and skip very small <ahref="#Line">Lines</a>, Quads, and <ahref="#Conic">Conics</a>; and
skip <ahref="#SkPath_kClose_Verb">kClose Verb</a> following <ahref="#SkPath_kMove_Verb">kMove Verb</a>.
if <ahref="#Iter_next_doConsumeDegenerates">doConsumeDegenerates</a> is true and <ahref="#Iter_next_exact">exact</a> is true, only skip <ahref="#Line">Lines</a>, Quads, and
<div><fiddle-embedname="00ae8984856486bdb626d0ed6587855a"><div>skip degenerate skips the first in a <ahref="#SkPath_kMove_Verb">kMove Verb</a> pair, the <ahref="#SkPath_kMove_Verb">kMove Verb</a>
followed by the <ahref="#SkPath_kClose_Verb">kClose Verb</a>, the zero length <ahref="undocumented#Line">Line</a> and the very small <ahref="undocumented#Line">Line</a>.
Returns true if subsequent calls to <ahref="#next">next</a> return <ahref="#SkPath_kClose_Verb">kClose Verb</a> before returning
<ahref="#SkPath_kMove_Verb">kMove Verb</a>. if true, <ahref="#Contour">Contour</a><ahref="#Iter">Iter</a> is processing may end with <ahref="#SkPath_kClose_Verb">kClose Verb</a>, or
<ahref="#Iter">Iter</a> may have been initialized with force close set to true.
Iterates through <ahref="#Verb_Array">Verb Array</a>, and associated <ahref="#Point_Array">Point Array</a> and <ahref="#Conic_Weight">Conic Weight</a>.
<ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> are returned unaltered.
Initializes <ahref="#RawIter">RawIter</a> with an empty <ahref="#Path">Path</a>. <ahref="#next">next</a> on <ahref="#RawIter">RawIter</a> returns <ahref="#SkPath_kDone_Verb">kDone Verb</a>.
Call <ahref="#setPath">setPath</a> to initialize <ahref="SkPath_Reference#Iter">Iter</a> at a later time.
Sets <ahref="#RawIter">RawIter</a> to return elements of <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> in <ahref="#RawIter_copy_constructor_path">path</a>.
Sets <ahref="SkPath_Reference#Iter">Iter</a> to return elements of <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> in <ahref="#RawIter_setPath_path">path</a>.