Close        Print

Ellipse Procedure for PDFinclude

1. Add this procedure with pdf_inc.p file of PDFinclude
2.Call this procedure in your PROGRESS 4GL application
Example:
    RUN pdf_stroke_color("Spdf",.8,0,0).
    RUN pdf_stroke_fill("Spdf",.8, 0, 0).
    RUN pdf_ellipse("Spdf",117,735,80,34,0.3122847498,0). /* X,Y,a,b,accentricity,border */


PROCEDURE pdf_ellipse :
/* Note: pdfX and pdfY represent the center point of the ellipse. These
values become the new Graphic X and Y points after the drawing of
the ellipse. If you want the ellipse to be filled use pdf_stroke_fill
*/
DEFINE INPUT PARAMETER pdfStream AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pdfX AS INTEGER NO-UNDO.
DEFINE INPUT PARAMETER pdfY AS INTEGER NO-UNDO.
DEFINE INPUT PARAMETER pdf_a AS INTEGER NO-UNDO. /* we will use this for major axis */
DEFINE INPUT PARAMETER pdf_b AS INTEGER NO-UNDO. /* we will use this for minor axis */
DEFINE INPUT PARAMETER eccentricity AS DEC NO-UNDO. /* we will use this for eccentricity, in general it will control the oval shape of the ellipse */
DEFINE INPUT PARAMETER pdfWeight AS DECIMAL NO-UNDO.

/* DEFINE VARIABLE eccentricity AS DECIMAL DECIMALS 10 NO-UNDO. */
/* i will use this for eccentricity of the ellipse - it will control the shape of the ellipse */
DEFINE VARIABLE l_Length AS DECIMAL DECIMALS 5 NO-UNDO.
DEFINE VARIABLE c_NewY AS CHARACTER NO-UNDO.
DEFINE VARIABLE c_NewX AS CHARACTER NO-UNDO.

IF NOT CAN-FIND(FIRST TT_pdf_stream
WHERE TT_pdf_stream.obj_stream = pdfStream NO-LOCK)
THEN DO:
RUN pdf_error(pdfStream,"pdf_ellipse","Cannot find Stream!").
RETURN.
END.

l_Length = pdf_a * eccentricity.

/* First Quadrant - Upper Right */
c_NewX = dec2string(l_Length + pdfX).
c_NewY = dec2string(l_Length + pdfY).
RUN pdf_move_to(pdfStream, pdfX + pdf_a, pdfY).

RUN pdf_curve(pdfStream,
pdfX + pdf_a,
c_newY,
c_NewX,
pdfY + pdf_b,
pdfX,
pdfY + pdf_b,
pdfWeight).

/* Second Quadrant - Upper Left */
c_NewX = dec2string(pdf_GraphicX(pdfstream) - l_Length).
c_NewY = dec2string(pdf_GraphicY(pdfstream) - pdf_b + l_Length).
RUN pdf_curve(pdfStream,
c_NewX,
pdf_GraphicY(pdfStream),
pdfX - pdf_a,
c_NewY,
pdfX - pdf_a,
pdf_GraphicY(pdfStream) - pdf_b,
pdfWeight).

/* Third Quadrant - Lower Left */
c_NewX = dec2string(pdfX - l_Length).
c_NewY = dec2string(pdfY - l_Length).
RUN pdf_curve(pdfStream,
pdfX - pdf_a,
c_NewY,
c_newX,
pdfY - pdf_b,
pdfX,
pdfY - pdf_b,
pdfWeight).

/* Fourth Quadrant - Lower Right */
c_NewX = dec2string(pdfX + l_Length).
c_NewY = dec2string(pdfY - l_Length).
RUN pdf_curve(pdfStream,
c_NewX,
pdfY - pdf_b,
pdfX + pdf_a,
c_NewY,
pdfX + pdf_a,
pdfY,
pdfWeight).

/* Close the Path */
RUN pdf_close_path(pdfStream).

/* Set the current point to be the current Graphic X/Y Location */
RUN pdf_set_GraphicY (pdfStream,pdfY).
RUN pdf_set_GraphicX (pdfStream, pdfX).


END. /* pdf_ellipse */

/* enjoy! it's a lot of fun, March 24 2007 - by Amzad */