private void DebugRenderLocalGeometryView(LocalGeometryView localGeometryView, params IntLineSegment2[] segs) { if (!kEnableDebugRender) { return; } Size bounds = new Size(1280, 720); var renderScale = 1.0f; PerspectiveProjector CreateCanvasProjector() { var rotation = 95 * Math.PI / 180.0; var displaySize = new Size((int)(bounds.Width * renderScale), (int)(bounds.Height * renderScale)); var center = new DoubleVector3(0, 0, 0); var projector = new PerspectiveProjector( center + DoubleVector3.FromRadiusAngleAroundXAxis(1000, rotation), center, DoubleVector3.FromRadiusAngleAroundXAxis(1, rotation - Math.PI / 2), displaySize.Width, displaySize.Height); return(projector); } DebugMultiCanvasHost host = DebugMultiCanvasHost.CreateAndShowCanvas(bounds, new Point(0, 0), CreateCanvasProjector()); var canvas = host.CreateAndAddCanvas(0); canvas.DrawPolyNode(localGeometryView.PunchedLand); foreach (var hole in localGeometryView.Job.DynamicHoles) { canvas.DrawPolygonContours(hole.Value.holeExcludedContours, StrokeStyle.OrangeHairLineSolid); canvas.DrawPolygonContours(hole.Value.holeIncludedContours, StrokeStyle.RedHairLineSolid); } foreach (var seg in segs) { canvas.DrawLine(seg, StrokeStyle.CyanHairLineSolid); } }