Пример #1
0
        public override void Draw(PixelFarm.Drawing.Painter p)
        {
            p.Clear(Drawing.Color.White);
            p.StrokeColor = Color.Black;
            p.StrokeWidth = 2;
            p.StrokeColor = Color.Green;

            p.Draw(_triangleVxs);


            if (!ShowReconstructionCurve)
            {
                return;
            }

            //draw Ci line
            p.StrokeColor = KnownColors.OrangeRed;
            DrawLine(p, a01, a12);
            DrawLine(p, a12, a20);
            DrawLine(p, a20, a01);
            //find B

            //DrawPoint(p, a01);
            //DrawPoint(p, a12);
            //DrawPoint(p, a20);

            BezierControllerArmPair c1 = BezierControllerArmPair.ReconstructControllerArms(v0, v1, v2);
            BezierControllerArmPair c2 = BezierControllerArmPair.ReconstructControllerArms(v1, v2, v0);
            BezierControllerArmPair c0 = BezierControllerArmPair.ReconstructControllerArms(v2, v0, v1);



            c0.UniformSmoothCoefficient = SmoothCoefficientValue;
            c1.UniformSmoothCoefficient = SmoothCoefficientValue;
            c2.UniformSmoothCoefficient = SmoothCoefficientValue;

            //DrawPoint(p, c0 = FindB(v0, v1, v2, out c1));
            //DrawPoint(p, b2 = FindB(v1, v2, v0, out c2));
            //DrawPoint(p, b0 = FindB(v2, v0, v1, out c0));

            p.StrokeColor = Color.Red;
            DrawControllerPair(p, c0);
            DrawControllerPair(p, c1);
            DrawControllerPair(p, c2);


            p.StrokeColor = Color.Blue;
            using (Tools.BorrowVxs(out var tmpVxs1, out var tmpVxs2))
                using (Tools.BorrowPathWriter(tmpVxs1, out var pw))
                {
                    pw.MoveTo(c0.mid.X, c0.mid.y);

                    pw.Curve4(c0.right.x, c0.right.y, c1.left.x, c1.left.y, c1.mid.x, c1.mid.y); //1st curve

                    pw.Curve4(c1.right.x, c1.right.y, c2.left.x, c2.left.y, c2.mid.x, c2.mid.y); //2nd curve

                    pw.Curve4(c2.right.x, c2.right.y, c0.left.x, c0.left.y, c0.mid.x, c0.mid.y); //3rd curve

                    _curveflattener.MakeVxs(tmpVxs1, tmpVxs2);
                    p.Draw(tmpVxs2);
                }
        }
Пример #2
0
 void DrawControllerPair(PixelFarm.Drawing.Painter p, BezierControllerArmPair c)
 {
     DrawLine(p, c.left, c.mid);
     DrawLine(p, c.mid, c.right);
     DrawPoint(p, c.mid);
 }