internal bool CalculateIsLargeArc(ITurnCircleArcSegment segment) { Geometry.Shapes.Point startPoint = segment.CentrePoint; Geometry.Shapes.Point endPoint = segment.CircleOrigin == Constants.CircleOrigin.Start ? segment.EndPoint : segment.StartPoint; Geometry.Shapes.Point checkPoint = segment.CircleOrigin == Constants.CircleOrigin.Start ? segment.StartPoint : segment.EndPoint; var line = new Line(-1, startPoint, endPoint); Constants.TurnDirection turnDirection = line.TurnDirectionToPoint(checkPoint); bool isLargeArc; if ( segment.CircleOrigin == Constants.CircleOrigin.Start ) { isLargeArc = turnDirection == segment.TurnDirection; } else { isLargeArc = turnDirection != segment.TurnDirection; } return isLargeArc; }
internal PathFigureCollection CreateFigures(ITurnCircleArcSegment startSegment, ITurnCircleArcSegment middleSegment, ITurnCircleArcSegment endSegment) { ArcSegment arcStartSegment = m_Helper.SegmentToArcSegment(startSegment); ArcSegment arcMiddleSegment = m_Helper.SegmentToArcSegment(middleSegment); ArcSegment arcFinishSegment = m_Helper.SegmentToArcSegment(endSegment); var pathSegments = new List <PathSegment> { arcStartSegment, arcMiddleSegment, arcFinishSegment }; Point start = m_Helper.PointRelativeToOrigin(startSegment.StartPoint); var pathFigure = new PathFigure(start, pathSegments, false); var figures = new PathFigureCollection { pathFigure }; return figures; }
public void Unknown_SetsIsUnknownToTrue_WhenCreated() { // Arrange // Act ITurnCircleArcSegment actual = TurnCircleArcSegment.Unknown; // Assert Assert.True(actual.IsUnknown, "IsUnknown"); }
public void Unknown_SetsAngleToXAxisAtStartPointToUnknown_WhenCreated() { // Arrange // Act ITurnCircleArcSegment actual = TurnCircleArcSegment.Unknown; // Assert Assert.AreEqual(Angle.Unknown, actual.AngleToXAxisAtStartPoint, "AngleToXAxisAtStartPoint"); }
public ArcSegment SegmentToArcSegment(ITurnCircleArcSegment segment) { Geometry.Shapes.Point endPoint = segment.EndPoint; Point finishEndPoint = PointRelativeToOrigin(endPoint); var finishSize = new Size(segment.Radius, segment.Radius); SweepDirection finishSweepDirection = segment.TurnDirection == Constants.TurnDirection.Clockwise ? SweepDirection.Clockwise : SweepDirection.Counterclockwise; bool isLargeArc = CalculateIsLargeArc(segment); ArcSegment arcSegment = CreateArcSegment(finishEndPoint, finishSize, finishSweepDirection, isLargeArc); return arcSegment; }
private static void AssertTurnCircleArcSegment(ITurnCircleArcSegment actual, ICircle expectedCircle, Point expectedStartPoint, Point expectedEndPoint, Constants.CircleOrigin origin) { Assert.AreEqual(origin, actual.CircleOrigin, "CircleOrigin"); Assert.AreEqual(expectedCircle.CentrePoint, actual.CentrePoint, "CentrePoint"); Assert.AreEqual(expectedCircle.Radius, actual.Radius, "Radius"); Assert.AreEqual(expectedStartPoint, actual.StartPoint, "StartPoint"); Assert.AreEqual(expectedEndPoint, actual.EndPoint, "EndPoint"); }