static Msdfgen.Shape CreateMsdfShape(List <GlyphContour> contours) { var shape = new Msdfgen.Shape(); int j = contours.Count; for (int i = 0; i < j; ++i) { var cnt = new Msdfgen.Contour(); shape.contours.Add(cnt); GlyphContour contour = contours[i]; List <GlyphPart> parts = contour.parts; int m = parts.Count; for (int n = 0; n < m; ++n) { GlyphPart p = parts[n]; switch (p.Kind) { default: throw new NotSupportedException(); case GlyphPartKind.Curve3: { GlyphCurve3 curve3 = (GlyphCurve3)p; cnt.AddQuadraticSegment( curve3.FirstPoint.X, curve3.FirstPoint.Y, curve3.x1, curve3.y1, curve3.x2, curve3.y2 ); } break; case GlyphPartKind.Curve4: { GlyphCurve4 curve4 = (GlyphCurve4)p; cnt.AddCubicSegment( curve4.FirstPoint.X, curve4.FirstPoint.Y, curve4.x1, curve4.y1, curve4.x2, curve4.y2, curve4.x3, curve4.y3); } break; case GlyphPartKind.Line: { GlyphLine line = (GlyphLine)p; cnt.AddLine( line.FirstPoint.X, line.FirstPoint.Y, line.x1, line.y1); } break; } } } return(shape); }
static GlyphContour CreateFitContour(GlyphContour contour, float pixelScale, bool x_axis, bool y_axis) { GlyphContour newc = new GlyphContour(); List <GlyphPart> parts = contour.parts; int m = parts.Count; for (int n = 0; n < m; ++n) { GlyphPart p = parts[n]; switch (p.Kind) { default: throw new NotSupportedException(); case GlyphPartKind.Curve3: { GlyphCurve3 curve3 = (GlyphCurve3)p; newc.AddPart(new GlyphCurve3( curve3.FirstPoint.X * pixelScale, curve3.FirstPoint.Y * pixelScale, curve3.x1 * pixelScale, curve3.y1 * pixelScale, curve3.x2 * pixelScale, curve3.y2 * pixelScale)); } break; case GlyphPartKind.Curve4: { GlyphCurve4 curve4 = (GlyphCurve4)p; newc.AddPart(new GlyphCurve4( curve4.FirstPoint.X * pixelScale, curve4.FirstPoint.Y * pixelScale, curve4.x1 * pixelScale, curve4.y1 * pixelScale, curve4.x2 * pixelScale, curve4.y2 * pixelScale, curve4.x3 * pixelScale, curve4.y3 * pixelScale )); } break; case GlyphPartKind.Line: { GlyphLine line = (GlyphLine)p; newc.AddPart(new GlyphLine( line.FirstPoint.X * pixelScale, line.FirstPoint.Y * pixelScale, line.x1 * pixelScale, line.y1 * pixelScale )); } break; } } return(newc); }