コード例 #1
0
 internal SignalViewModel(
     ActorViewModel actorA, SequenceLineType lineType, SequenceArrowType arrowType,
     ActorViewModel actorB, string message)
     : base(message)
 {
     ActorA    = actorA;
     ActorB    = actorB;
     LineType  = lineType;
     ArrowType = arrowType;
 }
コード例 #2
0
            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));
            }
コード例 #3
0
        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();
        }
コード例 #4
0
 /// <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));
 }