internal SignalViewModel( ActorViewModel actorA, SequenceLineType lineType, SequenceArrowType arrowType, ActorViewModel actorB, string message) : base(message) { ActorA = actorA; ActorB = actorB; LineType = lineType; ArrowType = arrowType; }
private static Tuple <SequenceLineType, SequenceArrowType> GetSignalType(SignalTypeContext context) { LineTypeContext lineTypeContext = context.lineType(); SequenceLineType lineType = lineTypeContext?.DOTLINE() != null ? SequenceLineType.Dotted : SequenceLineType.Solid; ArrowTypeContext arrowTypeContext = context.arrowType(); SequenceArrowType arrowType = arrowTypeContext?.OPENARROW() != null ? SequenceArrowType.Open : SequenceArrowType.Filled; return(Tuple.Create(lineType, arrowType)); }
/// <summary> /// Adds a signal. /// </summary> public void AddSignal(ActorViewModel actorA, SequenceLineType lineType, SequenceArrowType arrowType, ActorViewModel actorB, string message) { Annotations.Add(new SignalViewModel(actorA, lineType, arrowType, actorB, message)); }
public void DrawLine(double x1, double y1, double x2, double y2, SequenceLineType lineType, SequenceArrowType arrowHead) { Pen pen = lineType == SequenceLineType.Solid ? m_solidLinePen : m_dashedLinePen; double halfPenWidth = m_solidLinePen.Thickness / 2; GuidelineSet guidelines = new GuidelineSet(); guidelines.GuidelinesX.Add(x1 + halfPenWidth); guidelines.GuidelinesX.Add(x2 + halfPenWidth); guidelines.GuidelinesY.Add(y1 + halfPenWidth); guidelines.GuidelinesY.Add(y2 + halfPenWidth); m_drawingContext.PushGuidelineSet(guidelines); // Draw the main line segment Point start = new Point(x1, y1); Point end = new Point(x2, y2); DrawLine(m_drawingContext, pen, start, end); // Draw the arrowhead double direction = (x1 > x2) ? 1 : -1; Point arrow0 = new Point(end.X + direction * LineThickness, end.Y); Point arrow1 = new Point(x2 + direction * s_arrowHeadSize.Width, y2 - s_arrowHeadSize.Height); Point arrow2 = new Point(x2 + direction * s_arrowHeadSize.Width, y2 + s_arrowHeadSize.Height); switch (arrowHead) { case SequenceArrowType.Filled: { var streamGeometry = new StreamGeometry(); using (StreamGeometryContext geometryContext = streamGeometry.Open()) { geometryContext.BeginFigure(arrow0, true, true); PointCollection points = new PointCollection { arrow1, arrow2 }; geometryContext.PolyLineTo(points, true, true); } streamGeometry.Freeze(); m_drawingContext.DrawGeometry(m_arrowBrush, m_solidLinePen, streamGeometry); break; } case SequenceArrowType.Open: { m_drawingContext.DrawLine(m_solidLinePen, arrow0, arrow1); m_drawingContext.DrawLine(m_solidLinePen, arrow0, arrow2); break; } } m_drawingContext.Pop(); }