PDFsharp & MigraDoc Foundation
https://forum.pdfsharp.net/

Finding the endpoints of an arc
https://forum.pdfsharp.net/viewtopic.php?f=2&t=1244
Page 1 of 1

Author:  rodspencer [ Thu Jul 08, 2010 10:40 pm ]
Post subject:  Finding the endpoints of an arc

I am trying to create a 3D pie wedge (If you have a method that will do this, please let me know). I am using the XGraphics.DrawPie() method to draw the top piece of the wedge, and to ensure that I can determine the endpoints, I am trying to manually outline it. Below is a simple routine to show you what I am doing. I'm just not seeing what I'm doing wrong. Any help would be greatly appreciated.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using PdfSharp;
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Drawing.Layout;
using PdfSharp.Drawing.BarCodes;

namespace Sample_PDF
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument document = new PdfDocument();
            PdfPage page = document.AddPage();
            page.Width = XUnit.FromInch(5);
            page.Height = XUnit.FromInch(5);
            XGraphics gfx = XGraphics.FromPdfPage(page);
            XPen pen = new XPen(XBrushes.Black.Color, 1);

            XRect rect = new XRect(10, 10, (page.Width / 2) - 20, (page.Height / 4) - 20);
            gfx.DrawPie(XBrushes.Cyan, rect, 0, 25);

            XPoint p1 = PointFromEllipse(rect, 0);
            XPoint p2 = PointFromEllipse(rect, 25);
            XGraphicsPath path = new XGraphicsPath();
            path.AddLine(rect.Center, p1);
            path.AddArc(rect, 0, 25);
            path.AddLine(p2, rect.Center);

            gfx.DrawPath(pen, path);
            document.Save("c:\\TestPDF.pdf");
        }

        private static XPoint PointFromEllipse(XRect bounds, double degrees)
        {
            double a = bounds.Width / 2.0;
            double b = bounds.Height / 2.0;
            double rad = (Math.PI / 180.0) * degrees;

            XPoint ptCenter = bounds.Center;

            double x = bounds.Center.X + (a * Math.Cos(rad));
            double y = bounds.Center.Y + (b * Math.Sin(rad));

            return new XPoint(x, y);
        }
    }
}

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/