00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef SkGeometry_DEFINED
00019 #define SkGeometry_DEFINED
00020
00021 #include "SkMatrix.h"
00022
00026 int SkFindUnitQuadRoots(SkScalar A, SkScalar B, SkScalar C, SkScalar roots[2]);
00027
00029
00033 void SkEvalQuadAt(const SkPoint src[3], SkScalar t, SkPoint* pt, SkVector* tangent = NULL);
00034 void SkEvalQuadAtHalf(const SkPoint src[3], SkPoint* pt, SkVector* tangent = NULL);
00035
00040 void SkChopQuadAt(const SkPoint src[3], SkPoint dst[5], SkScalar t);
00041
00045 void SkChopQuadAtHalf(const SkPoint src[3], SkPoint dst[5]);
00046
00055 int SkFindQuadExtrema(SkScalar a, SkScalar b, SkScalar c, SkScalar tValues[1]);
00056
00064 int SkChopQuadAtYExtrema(const SkPoint src[3], SkPoint dst[5]);
00065
00073 int SkChopQuadAtMaxCurvature(const SkPoint src[3], SkPoint dst[5]);
00074
00076
00080 void SkGetCubicCoeff(const SkPoint pts[4], SkScalar cx[4], SkScalar cy[4]);
00081
00085 void SkEvalCubicAt(const SkPoint src[4], SkScalar t, SkPoint* locOrNull, SkVector* tangentOrNull, SkVector* curvatureOrNull);
00086
00091 void SkChopCubicAt(const SkPoint src[4], SkPoint dst[7], SkScalar t);
00092 void SkChopCubicAt(const SkPoint src[4], SkPoint dst[7], const SkScalar t[], int t_count);
00093
00097 void SkChopCubicAtHalf(const SkPoint src[4], SkPoint dst[7]);
00098
00108 int SkFindCubicExtrema(SkScalar a, SkScalar b, SkScalar c, SkScalar d, SkScalar tValues[2]);
00109
00118 int SkChopCubicAtYExtrema(const SkPoint src[4], SkPoint dst[10]);
00119
00123 int SkFindCubicInflections(const SkPoint src[4], SkScalar tValues[2]);
00124
00128 int SkChopCubicAtInflections(const SkPoint src[4], SkPoint dst[10]);
00129
00130 int SkFindCubicMaxCurvature(const SkPoint src[4], SkScalar tValues[3]);
00131 int SkChopCubicAtMaxCurvature(const SkPoint src[4], SkPoint dst[13], SkScalar tValues[3] = NULL);
00132
00134
00135 enum SkRotationDirection {
00136 kCW_SkRotationDirection,
00137 kCCW_SkRotationDirection
00138 };
00139
00143 #define kSkBuildQuadArcStorage 17
00144
00151 int SkBuildQuadArc(const SkVector& unitStart, const SkVector& unitStop, SkRotationDirection,
00152 const SkMatrix* matrix, SkPoint quadPoints[]);
00153
00154 #endif