| 
The SEDRIS Data Representation Model
 APPENDIX A - Classes Arc  | 
|---|
An instance of this DRM class specifies a symmetric curved line, the endpoints of which are specified by the <Base Vertex> components, such that the curve is symmetric about the <Location> component.
A geometric representation of a treeline, or a string of lights that follow the path of the <Arc>.
The following formulas show how centre point, radius, beginning and ending angles can be derived from the first set of information (beginning, mid, and ending points on the <Arc>).
        double x1, y1,              /* beginning point */
               x2, y2,              /* mid point */
               x3, y3,              /* ending point */
               sx1, sx2, sx3,       /* squared x values */
               sy1, sy2, sy3,       /* squared y values */
               ad, D, E, F,         /* determinate values */
               dc, ec, fc,          /* coefficient values */
               centrex, centrey,    /* centre point of arc */
               r,                   /* radius of arc */
               ab, ae;              /* beginning & ending angles */
        /* get squared values */
        sx1 = x1*x1;   sx2 = x2*x2;   sx3 = x3*x3;
        sy1 = y1*y1;   sy2 = y2*y2;   sy3 = y3*y3;
        /* get 'a' determinate */
        ad = x1*(y2 - y3) - y1*(x2-x3) + x2*y3 - x3*y2;
        /* get 'D' determinate */
        D = (sx1 + sy1)*(y2 - y3) - y1*((sx2 + sy2) - (sx3 + sy3))
            + y3*(sx2 + sy2) - y2*(sx3 + sy3);
        /* get 'E' determinate */
        E = (sx1 + sy1)*(x2 - x3) - x1*((sx2 + sy2) - (sx3 + sy3))
            + x3*(sx2 + sy2) - x2*(sx3 + sy3);
        /* get 'F' determinate */
        F = (sx1 + sy1)*(x2*y3 - x3*y2) -
             x1*(y3*(sx2 + sy2) - y2(sx3 + sy3)) +
             y1*(x3*(sx2 + sy2) - x2*(sx3 + sy3));
        D = -D;            F = -F;
        /* check for colinear point */
        if (ad == 0.0) {
            fprintf(stderr, "ERROR! colinear point\n");
            fflush(stderr);
            exit(-1);
        }
        /* get coefficients */
        dc = D/(2.0*ad);
        ec = E/(2.0*ad);
        fc = F/ad;
        /* get centre point */
        centrex = -dc;    centrey = -ec;
        /* get radius */
        r = sqrt((dc*dc + ec*ec - fc));
        /* get beginning and ending angles */
        ab = atan2(y1 - centrey, x1 - centrex);
        ae = atan2(y3 - centrey, x3 - centrex);
    
| SE_Short_Integer_Unsigned | count; | (notes) | 
|---|---|---|
| SE_Boolean | suppressLast; | (notes) | 
A <Primitive Geometry> contains a <Union Of Primitive Geometry> instance as a component only when that <Primitive Geometry> can be decomposed into nested <Primitive Geometry>, as (for example) a <Polygon> can be decomposed into subfaces.
A value of zero (0) indicates that the given <Linear Geometry> instance is to be rendered as solid. Otherwise, the interpretation of the count depends on whether a <Light Rendering Properties> component is present for the given <Linear Geometry> instance. - If a <Light Rendering Properties> component is present, then count is the number of evenly spaced light points to be rendered along the <Linear Geometry>. - If no <Light Rendering Properties> component is present, then count is the number of evenly spaced line segments to be rendered along the <Linear Geometry>.
If count is greater than zero, this flag indicates whether the last segment / point in the sequence is suppressed or rendered.
  |