//--------------------------------------------------------------------------------------------------

        public override bool MakeConstraint(Dictionary <int, Pnt2d> points, Dictionary <int, SketchSegment> segments, SketchConstraintSolver solver)
        {
            bool valid = false;

            if (segments[Segments[0]] is SketchSegmentLine)
            {
                var lineSegment = (SketchSegmentLine)segments[Segments[0]];

                var con = new Constraint {
                    Type = ConstraintType.PointOnLine
                };
                valid  = solver.SetLine(ref con.Line1, lineSegment.Points[0], lineSegment.Points[1], true, true);
                valid &= solver.SetPoint(ref con.Point1, Points[0], false);

                if (valid)
                {
                    solver.AddConstraint(con);
                }
            }
            else if (segments[Segments[0]] is SketchSegmentCircle)
            {
                List <Constraint> constraints = new List <Constraint>();

                var circleSegment = (SketchSegmentCircle)segments[Segments[0]];

                var con = new Constraint {
                    Type = ConstraintType.PointOnCircle
                };
                valid  = solver.SetCircle(ref con.Circle1, circleSegment, constraints, points, true, false);
                valid &= solver.SetPoint(ref con.Point1, Points[0], false);
                constraints.Add(con);

                if (valid)
                {
                    constraints.ForEach(solver.AddConstraint);
                }
            }

            return(valid);
        }
        //--------------------------------------------------------------------------------------------------

        public override bool MakeConstraint(Dictionary <int, Pnt2d> points, Dictionary <int, SketchSegment> segments, SketchConstraintSolver solver)
        {
            bool valid = true;

            var con = new Constraint {
                Type = ConstraintType.PointHorizontalDistance
            };

            valid &= solver.SetPoint(ref con.Point1, Points[0], false);
            valid &= solver.SetParameter(out con.Parameter, Distance, true);

            if (valid)
            {
                solver.AddConstraint(con);
            }

            return(valid);
        }
        //--------------------------------------------------------------------------------------------------

        public override bool MakeConstraint(Dictionary <int, Pnt2d> points, Dictionary <int, SketchSegment> segments, SketchConstraintSolver solver)
        {
            bool valid = false;

            if (segments[Segments[0]] is SketchSegmentLine)
            {
                var lineSegment = (SketchSegmentLine)segments[Segments[0]];

                var con = new Constraint {
                    Type = ConstraintType.PointOnLineMidpoint
                };
                valid  = solver.SetLine(ref con.Line1, lineSegment.Points[0], lineSegment.Points[1], true, true);
                valid &= solver.SetPoint(ref con.Point1, Points[0], false);

                if (valid)
                {
                    solver.AddConstraint(con);
                }
            }

            return(valid);
        }