Previous: clpph Up: ../plot79_c.html Next: clppl2


CLPPI

       SUBROUTINE  CLPPI (P1,P2,CENTER,RADIUS,EN1,EN2,MOVED1,MOVED2,
      X                  REJECT,ALPHA1,ALPHA2)
 C$    (Clip to Pie Segment)
 C$    Clip a line  segment to fit  in a pie  segment, as for  pie
 C$    chart filling.  The arguments are:
 C$
 C$    P1(*)..........(X,Y,Z,H) coordinates of first point.
 C$    P2(*)..........(X,Y,Z,H) coordinates of  second point.  For
 C$                   both points,  the Z  coordinate is  ignored,
 C$                   and H is assumed to be 1.
 C$    CENTER(*)......(X,Y,Z,H) coordinates of center of circle
 C$                   containing the pie segment.
 C$    RADIUS.........Radius of circle.
 C$    EN1(*).........Inward-pointing normal on segment edge 1.
 C$                   This vector is (-SIN(THETA1),COS(THETA1),0,0).
 C$    EN2(*).........Inward-pointing  normal  on segment  edge 2.
 C$                   This vector  is (SIN(THETA2),  -COS(THETA1),
 C$                   0, 0).  These edge  normals are provided  in
 C$                   place of  the  angles  so  that  unnecessary
 C$                   recomputation of the  sines and cosines  can
 C$                   be avoided while filling the pie segment  is
 C$                   in progress.  The angles must satisfy THETA2
 C$                   .GE. THETA1,  and  (THETA2  -  THETA1)  .LE.
 C$                   180.0, because only  one clipped segment  is
 C$                   returned.  If the interior angle of the  pie
 C$                   segment is  greater  than 180  degrees,  the
 C$                   segment must be divided in two and passed in
 C$                   separate calls to this routine.   ***NOTE***
 C$                   This requirement  is  not  tested  for,  and
 C$                   incorrect results may be generated if it  is
 C$                   not obeyed.
 C$    MOVED1.........LOGICAL value set .TRUE. if point 1 is moved.
 C$    MOVED2.........LOGICAL value set .TRUE. if point 2 is moved.
 C$    REJECT.........LOGICAL value set .TRUE.  if the segment  is
 C$                   rejected (i.e. invisible).  REJECT must have
 C$                   a value  on  entry, and  return  will  occur
 C$                   immediately if it is .TRUE..  If the line is
 C$                   rejected,  ALPHA1   and   ALPHA2   will   be
 C$                   unchanged on return.
 C$    ALPHA1.........Parameter alpha for the  first point in  the
 C$                   parametric line representation  (1-alpha)*P1
 C$                   + alpha*P2.
 C$    ALPHA2.........Parameter alpha for the second point.
 C$
 C$    ALPHA1 and ALPHA2 must have valid values on input (e.g. 0.0
 C$    and 1.0), and will only be  updated if MOVED1 or MOVED2  is
 C$    set .TRUE.  respectively.  P1(*) and P2(*) are  ***NEVER***
 C$    modified; the  clipped line  segment is  defined solely  in
 C$    terms of the ALPHA's.
 C$
 C$    (03-APR-82)