//      public static void FillPolygon(this IDebugCanvas canvas, Polygon3 polygon, FillStyle fillStyle) {
        //         canvas.FillPolygon(polygon.Points.Select(p => p.ToDoubleVector3()).ToList(), fillStyle);
        //      }
        //
        //      public static void DrawPolygonContour(this IDebugCanvas canvas, Polygon3 polygon, StrokeStyle strokeStyle) {
        //         canvas.DrawPolygonContour(polygon.Points.Select(p => p.ToDoubleVector3()).ToList(), strokeStyle);
        //      }

        //      public static void DrawPolygons(this IDebugCanvas canvas, IReadOnlyList<Polygon3> polygons, StrokeStyle strokeStyle) {
        //         canvas.BatchDraw(() => {
        //            foreach (var polygon in polygons) {
        //               canvas.DrawPolygonContour(polygon, strokeStyle);
        //            }
        //         });
        //      }
        //
        //      public static void DrawPolygons(this IDebugCanvas canvas, IReadOnlyList<IReadOnlyList<DoubleVector3>> contours, StrokeStyle strokeStyle) {
        //         canvas.BatchDraw(() => {
        //            foreach (var contour in contours) {
        //               canvas.DrawPolygonContour(contour, strokeStyle);
        //            }
        //         });
        //      }

        public static void DrawAxisAlignedBoundingBox(this IDebugCanvas canvas, AxisAlignedBoundingBox box, StrokeStyle strokeStyle)
        {
            var extents = box.Extents;
            var nbl     = box.Center - extents;
            var ftr     = box.Center + extents;

            canvas.BatchDraw(() => {
                canvas.DrawLine(new DoubleVector3(nbl.X, nbl.Y, nbl.Z), new DoubleVector3(ftr.X, nbl.Y, nbl.Z), strokeStyle);
                canvas.DrawLine(new DoubleVector3(nbl.X, nbl.Y, nbl.Z), new DoubleVector3(nbl.X, ftr.Y, nbl.Z), strokeStyle);
                canvas.DrawLine(new DoubleVector3(nbl.X, nbl.Y, nbl.Z), new DoubleVector3(nbl.X, nbl.Y, ftr.Z), strokeStyle);

                canvas.DrawLine(new DoubleVector3(nbl.X, ftr.Y, nbl.Z), new DoubleVector3(ftr.X, ftr.Y, nbl.Z), strokeStyle);


                canvas.DrawLine(new DoubleVector3(nbl.X, nbl.Y, ftr.Z), new DoubleVector3(ftr.X, nbl.Y, ftr.Z), strokeStyle);
                canvas.DrawLine(new DoubleVector3(nbl.X, ftr.Y, ftr.Z), new DoubleVector3(ftr.X, ftr.Y, ftr.Z), strokeStyle);

                canvas.DrawLine(new DoubleVector3(nbl.X, nbl.Y, ftr.Z), new DoubleVector3(nbl.X, ftr.Y, ftr.Z), strokeStyle);
                canvas.DrawLine(new DoubleVector3(nbl.X, ftr.Y, nbl.Z), new DoubleVector3(nbl.X, ftr.Y, ftr.Z), strokeStyle);

                canvas.DrawLine(new DoubleVector3(ftr.X, nbl.Y, nbl.Z), new DoubleVector3(ftr.X, ftr.Y, nbl.Z), strokeStyle);
                canvas.DrawLine(new DoubleVector3(ftr.X, nbl.Y, ftr.Z), new DoubleVector3(ftr.X, ftr.Y, ftr.Z), strokeStyle);

                canvas.DrawLine(new DoubleVector3(ftr.X, nbl.Y, nbl.Z), new DoubleVector3(ftr.X, nbl.Y, ftr.Z), strokeStyle);
                canvas.DrawLine(new DoubleVector3(ftr.X, ftr.Y, nbl.Z), new DoubleVector3(ftr.X, ftr.Y, ftr.Z), strokeStyle);
            });
        }
 public static void DrawPoints(this IDebugCanvas canvas, IReadOnlyList <DoubleVector3> points, StrokeStyle strokeStyle)
 {
     canvas.BatchDraw(() => {
         foreach (var point in points)
         {
             canvas.DrawPoint(point, strokeStyle);
         }
     });
 }
 public static void DrawLineStrip(this IDebugCanvas canvas, IReadOnlyList <DoubleVector3> points, StrokeStyle strokeStyle)
 {
     canvas.BatchDraw(() => {
         for (var i = 0; i < points.Count - 1; i++)
         {
             var a = points[i];
             var b = points[i + 1];
             canvas.DrawLine(a, b, strokeStyle);
         }
     });
 }
예제 #4
0
 public static void FillTriangulation(this IDebugCanvas canvas, Triangulation triangulation, FillStyle fillStyle)
 {
     canvas.BatchDraw(() => {
         foreach (var island in triangulation.Islands)
         {
             foreach (var triangle in island.Triangles)
             {
                 canvas.FillTriangle(triangle, fillStyle);
             }
         }
     });
 }
예제 #5
0
 public static void DrawTriangulation(this IDebugCanvas canvas, Triangulation triangulation, StrokeStyle strokeStyle)
 {
     canvas.BatchDraw(() => {
         foreach (var island in triangulation.Islands)
         {
             foreach (var triangle in island.Triangles)
             {
                 canvas.DrawTriangle(triangle, strokeStyle);
             }
         }
     });
 }
        public static void DrawLineList(this IDebugCanvas canvas, IReadOnlyList <DoubleVector3> points, StrokeStyle strokeStyle)
        {
            if (points.Count % 2 != 0)
            {
                throw new ArgumentException("Line List points must have even length.");
            }

            canvas.BatchDraw(() => {
                for (var i = 0; i < points.Count; i += 2)
                {
                    var a = points[i];
                    var b = points[i + 1];
                    canvas.DrawLine(a, b, strokeStyle);
                }
            });
        }
예제 #7
0
        public static void DrawPolyNode(this IDebugCanvas canvas, PolyNode polytree, StrokeStyle landStroke = null, StrokeStyle holeStroke = null)
        {
            landStroke = landStroke ?? new StrokeStyle(Color.Orange);
            holeStroke = holeStroke ?? new StrokeStyle(Color.Brown);

            canvas.BatchDraw(() => {
                var s = new Stack <PolyNode>();
                s.Push(polytree);
                while (s.Any())
                {
                    var node = s.Pop();
                    node.Childs.ForEach(s.Push);
                    if (node.Contour.Any())
                    {
                        canvas.DrawPolygonContour(
                            new Polygon2(node.Contour.Map(p => new IntVector2(p.X, p.Y)).ToList()),
                            node.IsHole ? holeStroke : landStroke);
                    }
                }
            });
        }