21.4 Clipping

A rectangle, polygon, or ellipsis can be used to define a clipping region. Any drawing commands ( see Section 21) issued afterward are confined in the region. You can even nest multiple clipping regions, in which case, drawings will be clipped to the intersection of the regions. canvas.endclip() ends the clipping. Clipping commands and endclip() must nest properly.

Image cliptest

Clipping test

Below is the source code that produces the above chart. /home/ysaito/pychart/demos/cliptest.py

#
# Copyright (C) 2000-2005 by Hewlett Packard Development Company, LP 
# 
# Author: Yasushi Saito (yasushi.saito@hp.com)
#
# Jockey is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.
#
# Jockey is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
from pychart import *

can = canvas.default_canvas()

data = [(10, 20), (20, 65), (30, 55), (40, 45)]

# tic_angle is the angle X values are displayed below the axis.
xaxis = axis.X(label="Stuff")
yaxis = axis.Y(label="Value")

ar = area.T(x_axis=xaxis, y_axis=yaxis)

plot = line_plot.T(label="foo", data=data, xcol=0, ycol=1,
                   tick_mark=tick_mark.star)

ar.add_plot(plot)
can.ellipsis(line_style.T(width=1.5,dash=(4,4)), None, 30, 20, 80, 0.8)
can.clip_ellipsis(30, 20, 80, 0.8)
ar.draw(can)
can.endclip()

The following canvas.T methods are used to control clipping:

clip( x1, y1, x2, y2)
Activate a rectangular clip region, (X1, Y1) - (X2, Y2). You must call endclip() after you completed drawing.

canvas.clip(x,y,x2,y2) draw something ... canvas.endclip()

clip_ellipsis( x, y, radius, y_elongation)
Draw an ellipsis with line_style and fill PATTERN. The center is (X, Y), X radius is RADIUS, and Y radius is RADIUS*RATIO, whose default value is 1.0. SHADOW is either None or a tuple (XDELTA, YDELTA, fillstyle). If non-null, a shadow of FILLSTYLE is drawn beneath the polygon at the offset of (XDELTA, YDELTA).

clip_polygon( [(x1,y2),(x2,y2), ..., (xn, yn)])
Create a polygonal clip region. You must call endclip() after you completed drawing. See also the polygon method.

endclip( )
End the current clip region. When clip calls are nested, it ends the most recently created crip region.