예제 #1
0
 private void DrawConnection(DrawingContext dc, Pen pen2, SkillNode n1, SkillNode n2)
 {
     if (n1.SkillNodeGroup == n2.SkillNodeGroup && n1.Orbit == n2.Orbit)
     {
         if (n1.Arc - n2.Arc > 0 && n1.Arc - n2.Arc <= Math.PI ||
             n1.Arc - n2.Arc < -Math.PI)
         {
             dc.DrawArc(null, pen2, n1.Position, n2.Position,
                        new Size(SkillNode.OrbitRadii[n1.Orbit],
                                 SkillNode.OrbitRadii[n1.Orbit]));
         }
         else
         {
             dc.DrawArc(null, pen2, n2.Position, n1.Position,
                        new Size(SkillNode.OrbitRadii[n1.Orbit],
                                 SkillNode.OrbitRadii[n1.Orbit]));
         }
     }
     else
     {
         if (n2.IsAscendancyStart != true && !n1.Name.Contains("Path of the"))
         {
             dc.DrawLine(pen2, n1.Position, n2.Position);
         }
     }
 }
예제 #2
0
        protected override void OnRender(DrawingContext dc)
        {
            var lightBrush = new SolidColorBrush(Colors.LightGray);
            var darkBrush  = new SolidColorBrush(Colors.Black);

            lightBrush.Opacity = 0.4;
            darkBrush.Opacity  = 0.1;

            double t1 = 6;    // thickness of dark circle pen
            double t2 = 2;    // thickness of light pen (circle, arcs, segments)
            double d  = 0;    // distance from light circle to segments
            double l  = 10;   // length of segments
            double r  = 20.0; // radius of light circle

            double r1 = r - (t1 + t2) / 2;
            double r2 = r + l;
            double r3 = r + t2 / 2 + d;
            double r4 = (r + r2) / 2;

            var darkPen  = new Pen(darkBrush, t1);
            var lightPen = new Pen(lightBrush, t2);

            dc.DrawEllipse(null, lightPen, Position, r, r);
            dc.DrawEllipse(null, darkPen, Position, r1, r1);
            dc.DrawArc(null, lightPen, Position, 10, 80, r4, r4);
            dc.DrawArc(null, lightPen, Position, 100, 170, r4, r4);
            dc.DrawArc(null, lightPen, Position, 190, 260, r4, r4);
            dc.DrawArc(null, lightPen, Position, 280, 350, r4, r4);

            dc.DrawLine(lightPen, new Point(Position.X, Position.Y - r2), new Point(Position.X, Position.Y - r3));
            dc.DrawLine(lightPen, new Point(Position.X, Position.Y + r2), new Point(Position.X, Position.Y + r3));
            dc.DrawLine(lightPen, new Point(Position.X - r2, Position.Y), new Point(Position.X - r3, Position.Y));
            dc.DrawLine(lightPen, new Point(Position.X + r2, Position.Y), new Point(Position.X + r3, Position.Y));
        }
예제 #3
0
        public void DrawPrimitives(DrawingContext dc)
        {
            // rectangle
            dc.DrawRectangle(Brushes.Black, null, new Rect(20, 20, 150, 100));

            // circle segment
            dc.DrawArc(new Point(150, 150), radius: 100, 40, 140, new Format(Brushes.Gray, Brushes.Gray, 25));

            // parallelogram
            dc.DrawSpline(new PointCollection {
                new Point(180, 240), new Point(290, 240),
                new Point(310, 310), new Point(200, 310)
            }, 140, 0, BasicFormats.BasicGray);

            // romb
            dc.DrawSpline(new PointCollection {
                new Point(100, 200), new Point(150, 100),
                new Point(100, 000), new Point(050, 100)
            }, 500, 70, BasicFormats.BasicGray);

            // 8-angle figure
            dc.DrawSpline(new PointCollection
            {
                new Point(100, 100), new Point(130, 110),
                new Point(140, 140), new Point(130, 170),
                new Point(100, 180), new Point(70, 170),
                new Point(60, 140), new Point(70, 110),
            }, 250, 0, BasicFormats.BasicGray);
        }
예제 #4
0
        protected void DrawArc(DrawingContext drawingContext, double x, double y, double radius, double start, double stop)
        {
            Pen pen = new Pen();

            pen.Thickness = 2;
            pen.Brush     = brush;

            drawingContext.DrawArc(pen, null, new Rect(ConvertXPos(x - radius + offsetX), ConvertYPos(y + radius + offsetY), ConvertLen(radius) * 2d, ConvertLen(radius) * 2d), start, stop);
        }
예제 #5
0
        public static void DrawArc(this DrawingContext dc, Brush brush, Pen pen, Point position, double startAngle, double endAngle, SweepDirection direction, double radiusX, double radiusY)
        {
            double startRadians = startAngle / 180 * Math.PI;
            double endRadians   = endAngle / 180 * Math.PI;
            var    start        = position + new Vector(Math.Cos(startRadians) * radiusX, -Math.Sin(startRadians) * radiusY);
            var    end          = position + new Vector(Math.Cos(endRadians) * radiusX, -Math.Sin(endRadians) * radiusY);

            dc.DrawArc(brush, pen, start, end, direction, radiusX, radiusY);
        }
예제 #6
0
 private void DrawConnection(DrawingContext dc, Pen pen2, SkillNode n1, SkillNode n2)
 {
     if (n1.SkillNodeGroup == n2.SkillNodeGroup && n1.Orbit == n2.Orbit)
     {
         if (n1.Arc - n2.Arc > 0 && n1.Arc - n2.Arc <= Math.PI ||
             n1.Arc - n2.Arc < -Math.PI)
         {
             dc.DrawArc(null, pen2, n1.Position, n2.Position,
                        new Size(SkillNode.OrbitRadii[n1.Orbit],
                                 SkillNode.OrbitRadii[n1.Orbit]));
         }
         else
         {
             dc.DrawArc(null, pen2, n2.Position, n1.Position,
                        new Size(SkillNode.OrbitRadii[n1.Orbit],
                                 SkillNode.OrbitRadii[n1.Orbit]));
         }
     }
     else
     {
         dc.DrawLine(pen2, n1.Position, n2.Position);
     }
 }
예제 #7
0
 private void DrawConnection(DrawingContext dc, Pen pen2, SkillNode n1, SkillNode n2)
 {
     if (n1.VisibleNeighbors.Contains(n2) && n2.VisibleNeighbors.Contains(n1))
     {
         if (n1.SkillNodeGroup == n2.SkillNodeGroup && n1.Orbit == n2.Orbit)
         {
             if (n1.Arc - n2.Arc > 0 && n1.Arc - n2.Arc <= Math.PI ||
                 n1.Arc - n2.Arc < -Math.PI)
             {
                 dc.DrawArc(null, pen2, n1.Position, n2.Position,
                            new Size(SkillNode.OrbitRadii[n1.Orbit],
                                     SkillNode.OrbitRadii[n1.Orbit]));
             }
             else
             {
                 dc.DrawArc(null, pen2, n2.Position, n1.Position,
                            new Size(SkillNode.OrbitRadii[n1.Orbit],
                                     SkillNode.OrbitRadii[n1.Orbit]));
             }
         }
         else
         {
             var draw = true;
             foreach (var attibute in n1.attributes)
             {
                 if (AscendantClassStartRegex.IsMatch(attibute))
                 {
                     draw = false;
                 }
             }
             if (draw)
             {
                 dc.DrawLine(pen2, n1.Position, n2.Position);
             }
         }
     }
 }
예제 #8
0
        private void DrawBottom(DrawingContext dc, Point gl_coord)
        {
            dc.DrawSpline(new PointCollection
            {
                new Point(55, 150), new Point(110, -70),
                new Point(128, -58), new Point(80, 150)
            },
                          gl_coord.X - 10, gl_coord.Y, BasicFormats.BlackLine);
            dc.DrawSpline(new PointCollection
            {
                new Point(210, 150), new Point(155, -70),
                new Point(138, -58), new Point(185, 150)
            },
                          gl_coord.X + 10, gl_coord.Y, BasicFormats.BlackLine);

            for (int i = 0; i <= 12; i++)
            {
                if (i % 2 != 0)
                {
                    dc.DrawRectangle((i == 1 || i == 7 ? Brushes.Red : i == 3 || i == 9 ? Brushes.Yellow : Brushes.Green),
                                     null, new Rect(
                                         x: gl_coord.X + (i * 20.25), y: gl_coord.Y + 150,
                                         width: 20.25, height: 40));
                }

                if (i != 0)
                {
                    dc.DrawRectangle(Brushes.DarkGray, null, new Rect(
                                         x: gl_coord.X + (i * 20.25), y: gl_coord.Y + 150,
                                         width: 2, height: 20));

                    dc.DrawRectangle(Brushes.Black, null, new Rect(
                                         x: gl_coord.X + (i * 20.25), y: gl_coord.Y + 150 + 20,
                                         width: 2, height: 20));
                }

                dc.DrawArc(new Point(gl_coord.X + 10 + (i * 20.25), gl_coord.Y + 150), radius: 10, 0, 180,
                           BasicFormats.BlackWithWhiteThin);
            }

            dc.DrawRectangle(null, new Pen(Brushes.Black, 3), new Rect(gl_coord.X, gl_coord.Y + 150, width: 265, height: 40));
        }
예제 #9
0
        private void DrawCabin(DrawingContext dc, Point gl_coord)
        {
            int cabin_in_rad = 25;

            dc.DrawArc(new Point(gl_coord.X, gl_coord.Y + 35), cabin_in_rad, 0, 180, BasicFormats.BlackLineBold);

            for (int i = -1; i <= 1; i++)
            {
                dc.DrawLine(new Pen(Brushes.Black, 4),
                            new Point(gl_coord.X + i * cabin_in_rad, gl_coord.Y + 35 + (i == 0 ? cabin_in_rad : 0)),
                            new Point(gl_coord.X + i * cabin_in_rad, gl_coord.Y + 43 - cabin_in_rad));
            }

            dc.DrawLine(new Pen(Brushes.Black, 4),
                        new Point(gl_coord.X - cabin_in_rad, gl_coord.Y + 20),
                        new Point(gl_coord.X + cabin_in_rad, gl_coord.Y + 20));


            dc.DrawRoundedRectangle(null, new Pen(Brushes.Black, 5),
                                    new Rect(gl_coord.X - 40 / 2, gl_coord.Y - 40 / 2, width: 40, height: 40),
                                    5, 3);
        }
예제 #10
0
        public void refreshDrawingContext(DrawingContext dc)
        {
            var rect = new Rect(0, 0, Bounds.Width, Bounds.Height);

            dc.DrawArc(info.DrawingObjects.Pen, info.DrawingObjects.Brush, rect, 160, -140);
        }