//-------------------------------------------------------------------------------------------------- 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); }