%D \module
%D   [       file=meta-imp-clp,
%D        version=2000.07.06,
%D          title=\METAPOST\ Graphics,
%D       subtitle=Clipping,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

%D In this library, we define a bunch of clipping paths that
%D can be fed to \type {\clip}.

\startMPclip{ellipse}
  clip currentpicture to unitcircle
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{negellipse}
  clip currentpicture to (unitcircle peepholed unitsquare)
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{urellipse}
  clip currentpicture to urcircle scaled 2
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{ulellipse}
  clip currentpicture to ulcircle scaled 2 shifted (1,0)
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{llellipse}
  clip currentpicture to llcircle scaled 2 shifted (1,1)
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{lrellipse}
  clip currentpicture to lrcircle scaled 2 shifted (0,1)
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{tellipse}
  clip currentpicture to tcircle shifted (.5,0) yscaled 2
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{bellipse}
  clip currentpicture to bcircle shifted (.5,.5) yscaled 2
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{lellipse}
  clip currentpicture to lcircle shifted (.5,.5) xscaled 2
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{rellipse}
  clip currentpicture to rcircle shifted (0,.5) xscaled 2
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{diamond}
  clip currentpicture to unitdiamond
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{negdiamond}
  clip currentpicture to (unitdiamond peepholed unitsquare)
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{urtriangle}
  clip currentpicture to urtriangle scaled 2
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{ultriangle}
  clip currentpicture to ultriangle scaled 2 shifted (1,0)
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{lltriangle}
  clip currentpicture to lltriangle scaled 2 shifted (1,1)
    xscaled \width yscaled \height ;
\stopMPclip

\startMPclip{lrtriangle}
  clip currentpicture to lrtriangle scaled 2 shifted (0,1)
    xscaled \width yscaled \height ;
\stopMPclip

% More efficient:
%
% \def\dosimpleMPclip#1
%   {clip currentpicture to (#1) xscaled \width yscaled \height ;}
%
% \def\simpleMPclip#1#2%
%   {\startMPclip{#1}\dosimpleMPclip{#2}\stopMPclip}
%
% \simpleMPclip {ellipse}    {unitcircle}
% \simpleMPclip {diamond}    {unitdiamond}
%
% \simpleMPclip {negellipse} {unitcircle  peepholed unitsquare}
% \simpleMPclip {negdiamond} {unitdiamond peepholed unitsquare}
%
% \simpleMPclip {urellipse}  {urcircle scaled 2 shifted (0,0)}
% \simpleMPclip {ulellipse}  {ulcircle scaled 2 shifted (1,0)}
% \simpleMPclip {llellipse}  {llcircle scaled 2 shifted (1,1)}
% \simpleMPclip {lrellipse}  {lrcircle scaled 2 shifted (0,1)}
%
% \simpleMPclip {tellipse}   {tcircle shifted (.5,0)  yscaled 2}
% \simpleMPclip {bellipse}   {bcircle shifted (.5,.5) yscaled 2}
% \simpleMPclip {lellipse}   {lcircle shifted (.5,.5) xscaled 2}
% \simpleMPclip {rellipse}   {rcircle shifted (0,.5)  xscaled 2}
%
% \simpleMPclip {urtriangle} {urtriangle scaled 2 shifted (0,0)}
% \simpleMPclip {ultriangle} {ultriangle scaled 2 shifted (1,0)}
% \simpleMPclip {lltriangle} {lltriangle scaled 2 shifted (1,1)}
% \simpleMPclip {lrtriangle} {lrtriangle scaled 2 shifted (0,1)}

%D \in {Figure} [fig:clipping paths] shows which paths are
%D predefined. When applied to a whole picture, their usage
%D is:
%D
%D \starttyping
%D \clip[nx=1,ny=1,mp=ellipse]{some clippable content}
%D \stoptyping
%D
%D \startbuffer
%D \setupclipping  [nx=1,ny=1,x=1,y=1]
%D \setupblackrules[width=2cm,height=1cm]
%D \startcombination[6*3] % \startcombination[6*3]
%D   {\clip[mp=urellipse] {\blackrule}} {urellipse}
%D   {\clip[mp=ulellipse] {\blackrule}} {ulellipse}
%D   {\clip[mp=llellipse] {\blackrule}} {llellipse}
%D   {\clip[mp=lrellipse] {\blackrule}} {lrellipse}
%D   {\clip[mp=ellipse]   {\blackrule}} {ellipse}
%D   {\clip[mp=negellipse]{\blackrule}} {negellipse}
%D   {\clip[mp=tellipse]  {\blackrule}} {tellipse}
%D   {\clip[mp=bellipse]  {\blackrule}} {bellipse}
%D   {\clip[mp=lellipse]  {\blackrule}} {lellipse}
%D   {\clip[mp=rellipse]  {\blackrule}} {rellipse}
%D   {}                                 {}
%D   {}                                 {}
%D   {\clip[mp=urtriangle]{\blackrule}} {urtriangle}
%D   {\clip[mp=ultriangle]{\blackrule}} {ultriangle}
%D   {\clip[mp=lltriangle]{\blackrule}} {lltriangle}
%D   {\clip[mp=lrtriangle]{\blackrule}} {lrtriangle}
%D   {\clip[mp=diamond]   {\blackrule}} {diamond}
%D   {\clip[mp=negdiamond]{\blackrule}} {negdiamond}
%D \stopcombination % \stopcombination
%D \stopbuffer
%D
%D \placefigure % \placefigure
%D   [here][fig:clipping paths]
%D   {The predefined clipping paths.}
%D   {\getbuffer} % {\getbuffer}

\endinput