//--------------------------------------------------- public override void FillPath(Color color, GraphicsPath path) { //solid color var innerPath2 = path.InnerPath2; if (innerPath2 == null) { System.Drawing.Drawing2D.PathData pathData = path.GetPathData() as System.Drawing.Drawing2D.PathData; PixelFarm.Agg.VertexStore vxs = new PixelFarm.Agg.VertexStore(); PixelFarm.Agg.GdiPathConverter.ConvertToVxs(pathData, vxs); //TODO: reuse flattener PixelFarm.Agg.VertexSource.CurveFlattener flattener = new PixelFarm.Agg.VertexSource.CurveFlattener(); vxs = flattener.MakeVxs2(vxs); path.InnerPath2 = vxs; this.canvasGL2d.FillVxs(color, vxs); } else { PixelFarm.Agg.VertexStore vxs = innerPath2 as PixelFarm.Agg.VertexStore; if (vxs != null) { this.canvasGL2d.FillVxs(color, vxs); } } }
public override void DrawPath(GraphicsPath gfxPath) { var innerPath2 = gfxPath.InnerPath2; if (innerPath2 == null) { System.Drawing.Drawing2D.PathData pathData = gfxPath.GetPathData() as System.Drawing.Drawing2D.PathData; PixelFarm.Agg.VertexStore vxs = new PixelFarm.Agg.VertexStore(); PixelFarm.Agg.GdiPathConverter.ConvertToVxs(pathData, vxs); PixelFarm.Agg.VertexSource.CurveFlattener flattener = new PixelFarm.Agg.VertexSource.CurveFlattener(); vxs = flattener.MakeVxs2(vxs); gfxPath.InnerPath2 = vxs; this.canvasGL2d.DrawVxs(vxs); } else { PixelFarm.Agg.VertexStore vxs = innerPath2 as PixelFarm.Agg.VertexStore; if (vxs != null) { this.canvasGL2d.DrawVxs(vxs); } } }
public void MakeSmoothPath() { if (this.isValidSmooth) { return; } this.isValidSmooth = true; //-------- if (contPoints.Count == 0) { return; } //return; //-------- //lets smooth it //string str1 = dbugDumpPointsToString(contPoints); //string str2 = dbugDumpPointsToString2(contPoints); //var data2 = CurvePreprocess.RdpReduce(contPoints, 2); var data2 = contPoints; CubicBezier[] cubicBzs = CurveFit.Fit(data2, 8); //PathWriter pWriter = new PathWriter(); //pWriter.StartFigure(); //int j = cubicBzs.Length; //for (int i = 0; i < j; ++i) //{ // CubicBezier bz = cubicBzs[i]; // pWriter.MoveTo(bz.p0.x, bz.p0.y); // pWriter.LineTo(bz.p0.x, bz.p0.y); // pWriter.Curve4(bz.p1.x, bz.p1.y, // bz.p2.x, bz.p2.y, // bz.p3.x, bz.p3.y); //} //pWriter.CloseFigureCCW(); vxs = new VertexStore(); int j = cubicBzs.Length; //1. if (j > 0) { //1st CubicBezier bz0 = cubicBzs[0]; vxs.AddMoveTo(bz0.p0.x, bz0.p0.y); vxs.AddLineTo(bz0.p0.x, bz0.p0.y); vxs.AddP3c(bz0.p1.x, bz0.p1.y); vxs.AddP3c(bz0.p2.x, bz0.p2.y); vxs.AddLineTo(bz0.p3.x, bz0.p3.y); //------------------------------- for (int i = 1; i < j; ++i) //start at 1 { CubicBezier bz = cubicBzs[i]; vxs.AddP3c(bz.p1.x, bz.p1.y); vxs.AddP3c(bz.p2.x, bz.p2.y); vxs.AddLineTo(bz.p3.x, bz.p3.y); } //------------------------------- //close vxs.AddLineTo(bz0.p0.x, bz0.p0.y); } vxs.AddCloseFigure(); PixelFarm.Agg.VertexSource.CurveFlattener cflat = new PixelFarm.Agg.VertexSource.CurveFlattener(); vxs = cflat.MakeVxs(vxs); }