Menu

[r1166]: / trunk / htdocs / matplotlib.transforms.html.template  Maximize  Restore  History

Download this file

250 lines (248 with data), 24.4 kB

@header@
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="matplotlib.html"><font color="#ffffff">matplotlib</font></a>.transforms</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/usr/local/lib/python2.3/site-packages/matplotlib/transforms.py">/usr/local/lib/python2.3/site-packages/matplotlib/transforms.py</a></font></td></tr></table>
    <p><tt>The&nbsp;transforms&nbsp;module&nbsp;is&nbsp;broken&nbsp;into&nbsp;two&nbsp;parts,&nbsp;a&nbsp;collection&nbsp;of<br>
classes&nbsp;written&nbsp;in&nbsp;the&nbsp;extension&nbsp;module&nbsp;_transforms&nbsp;to&nbsp;handle<br>
efficient&nbsp;transformation&nbsp;of&nbsp;data,&nbsp;and&nbsp;some&nbsp;helper&nbsp;functions&nbsp;in<br>
transforms&nbsp;to&nbsp;make&nbsp;it&nbsp;easy&nbsp;to&nbsp;instantiate&nbsp;and&nbsp;use&nbsp;those&nbsp;objects.<br>
Hence&nbsp;the&nbsp;core&nbsp;of&nbsp;this&nbsp;module&nbsp;lives&nbsp;in&nbsp;_transforms.<br>
&nbsp;<br>
The&nbsp;transforms&nbsp;class&nbsp;is&nbsp;built&nbsp;around&nbsp;the&nbsp;idea&nbsp;of&nbsp;a&nbsp;LazyValue.&nbsp;&nbsp;A<br>
LazyValue&nbsp;is&nbsp;a&nbsp;base&nbsp;class&nbsp;that&nbsp;defines&nbsp;a&nbsp;method&nbsp;get&nbsp;that&nbsp;returns&nbsp;the<br>
value.&nbsp;&nbsp;The&nbsp;concrete&nbsp;derived&nbsp;class&nbsp;Value&nbsp;wraps&nbsp;a&nbsp;float,&nbsp;and&nbsp;simply<br>
returns&nbsp;the&nbsp;value&nbsp;of&nbsp;that&nbsp;float.&nbsp;&nbsp;The&nbsp;concrete&nbsp;derived&nbsp;class&nbsp;BinOp<br>
allows&nbsp;binary&nbsp;operations&nbsp;on&nbsp;LazyValues,&nbsp;so&nbsp;you&nbsp;can&nbsp;add&nbsp;them,&nbsp;multiply<br>
them,&nbsp;etc.&nbsp;&nbsp;When&nbsp;you&nbsp;do&nbsp;something&nbsp;like<br>
&nbsp;<br>
&nbsp;&nbsp;inches&nbsp;=&nbsp;<a href="#-Value">Value</a>(8)<br>
&nbsp;&nbsp;dpi&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;<a href="#-Value">Value</a>(72)<br>
&nbsp;&nbsp;width&nbsp;&nbsp;=&nbsp;inches&nbsp;*&nbsp;dpi<br>
&nbsp;<br>
width&nbsp;is&nbsp;a&nbsp;BinOp&nbsp;instance&nbsp;(that&nbsp;tells&nbsp;you&nbsp;the&nbsp;width&nbsp;of&nbsp;the&nbsp;figure&nbsp;in<br>
pixels.&nbsp;&nbsp;Later,&nbsp;if&nbsp;the&nbsp;figure&nbsp;size&nbsp;in&nbsp;changed,&nbsp;ie&nbsp;we&nbsp;call<br>
&nbsp;<br>
&nbsp;&nbsp;inches.set(10)<br>
&nbsp;<br>
The&nbsp;width&nbsp;variable&nbsp;is&nbsp;automatically&nbsp;updated&nbsp;because&nbsp;it&nbsp;stores&nbsp;a<br>
pointer&nbsp;to&nbsp;the&nbsp;inches&nbsp;variable,&nbsp;not&nbsp;the&nbsp;value.&nbsp;&nbsp;Since&nbsp;a&nbsp;BinOp&nbsp;is&nbsp;also<br>
a&nbsp;lazy&nbsp;value,&nbsp;you&nbsp;can&nbsp;define&nbsp;binary&nbsp;operations&nbsp;on&nbsp;BinOps&nbsp;as&nbsp;well,&nbsp;such<br>
as<br>
&nbsp;<br>
&nbsp;&nbsp;middle&nbsp;=&nbsp;<a href="#-Value">Value</a>(0.5)&nbsp;*&nbsp;width<br>
&nbsp;<br>
The&nbsp;bounding&nbsp;box&nbsp;class&nbsp;Bbox&nbsp;is&nbsp;also&nbsp;heavily&nbsp;used,&nbsp;and&nbsp;is&nbsp;defined&nbsp;by&nbsp;a<br>
lower&nbsp;left&nbsp;point&nbsp;ll&nbsp;and&nbsp;an&nbsp;upper&nbsp;right&nbsp;point&nbsp;ur.&nbsp;&nbsp;The&nbsp;points&nbsp;ll&nbsp;and&nbsp;ur<br>
are&nbsp;given&nbsp;by&nbsp;<a href="#-Point">Point</a>(x,&nbsp;y)&nbsp;instances,&nbsp;where&nbsp;x&nbsp;and&nbsp;y&nbsp;are&nbsp;LazyValues.&nbsp;&nbsp;So<br>
you&nbsp;can&nbsp;represent&nbsp;a&nbsp;point&nbsp;such&nbsp;as&nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;ll&nbsp;=&nbsp;<a href="#-Point">Point</a>(&nbsp;<a href="#-Value">Value</a>(0),&nbsp;<a href="#-Value">Value</a>(0)&nbsp;&nbsp;)&nbsp;&nbsp;#&nbsp;the&nbsp;origin<br>
&nbsp;&nbsp;ur&nbsp;=&nbsp;<a href="#-Point">Point</a>(&nbsp;width,&nbsp;height&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;the&nbsp;upper&nbsp;right&nbsp;of&nbsp;the&nbsp;figure<br>
&nbsp;<br>
where&nbsp;width&nbsp;and&nbsp;height&nbsp;are&nbsp;defined&nbsp;as&nbsp;above,&nbsp;using&nbsp;the&nbsp;product&nbsp;of&nbsp;the<br>
figure&nbsp;width&nbsp;in&nbsp;inches&nbsp;and&nbsp;the&nbsp;dpi.&nbsp;&nbsp;This&nbsp;is,&nbsp;in&nbsp;face,&nbsp;how&nbsp;the&nbsp;Figure<br>
bbox&nbsp;is&nbsp;defined<br>
&nbsp;<br>
&nbsp;&nbsp;bbox&nbsp;=&nbsp;<a href="#-Bbox">Bbox</a>(ll,&nbsp;ur)<br>
&nbsp;<br>
A&nbsp;bbox&nbsp;basically&nbsp;defines&nbsp;an&nbsp;x,y&nbsp;coordinate&nbsp;system,&nbsp;with&nbsp;ll&nbsp;giving&nbsp;the<br>
lower&nbsp;left&nbsp;of&nbsp;the&nbsp;coordinate&nbsp;system&nbsp;and&nbsp;ur&nbsp;giving&nbsp;the&nbsp;upper&nbsp;right.<br>
&nbsp;<br>
The&nbsp;bbox&nbsp;methods&nbsp;are<br>
&nbsp;<br>
&nbsp;&nbsp;ll()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;lower&nbsp;left&nbsp;Point<br>
&nbsp;&nbsp;ur()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;upper&nbsp;right&nbsp;Point<br>
&nbsp;&nbsp;contains(x,y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;True&nbsp;if&nbsp;self&nbsp;contains&nbsp;point<br>
&nbsp;&nbsp;overlaps(bbox)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;True&nbsp;if&nbsp;self&nbsp;overlaps&nbsp;bbox<br>
&nbsp;&nbsp;overlapsx(bbox)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;True&nbsp;if&nbsp;self&nbsp;overlaps&nbsp;bbox&nbsp;in&nbsp;the&nbsp;x&nbsp;interval<br>
&nbsp;&nbsp;overlapsy(bbox)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;True&nbsp;if&nbsp;self&nbsp;overlaps&nbsp;bbox&nbsp;in&nbsp;the&nbsp;y&nbsp;interval<br>
&nbsp;&nbsp;intervalx()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;x&nbsp;Interval&nbsp;instance<br>
&nbsp;&nbsp;intervaly()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;y&nbsp;interval&nbsp;instance<br>
&nbsp;&nbsp;get_bounds()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;get&nbsp;the&nbsp;left,&nbsp;bottom,&nbsp;width,&nbsp;height&nbsp;bounding&nbsp;tuple<br>
&nbsp;&nbsp;update(xys,&nbsp;ignore)&nbsp;-&nbsp;update&nbsp;the&nbsp;bbox&nbsp;to&nbsp;bound&nbsp;all&nbsp;the&nbsp;xy&nbsp;tuples&nbsp;in<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xys;&nbsp;if&nbsp;ignore&nbsp;is&nbsp;true&nbsp;ignore&nbsp;the&nbsp;current&nbsp;contents&nbsp;of&nbsp;bbox&nbsp;and<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;just&nbsp;bound&nbsp;the&nbsp;tuples.&nbsp;&nbsp;If&nbsp;ignore&nbsp;is&nbsp;false,&nbsp;bound&nbsp;self&nbsp;+&nbsp;tuples<br>
&nbsp;&nbsp;width()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;width&nbsp;of&nbsp;the&nbsp;bbox<br>
&nbsp;&nbsp;height()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;height&nbsp;of&nbsp;the&nbsp;bbox<br>
&nbsp;&nbsp;xmax()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;x&nbsp;coord&nbsp;of&nbsp;upper&nbsp;right<br>
&nbsp;&nbsp;ymax()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;y&nbsp;coord&nbsp;of&nbsp;upper&nbsp;right<br>
&nbsp;&nbsp;xmin()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;x&nbsp;coord&nbsp;of&nbsp;lower&nbsp;left<br>
&nbsp;&nbsp;ymin()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;y&nbsp;coord&nbsp;of&nbsp;lower&nbsp;left<br>
&nbsp;&nbsp;scale(sx,sy)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;scale&nbsp;the&nbsp;bbox&nbsp;by&nbsp;sx,&nbsp;sy<br>
&nbsp;&nbsp;deepcopy()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;a&nbsp;deep&nbsp;copy&nbsp;of&nbsp;self&nbsp;(pointers&nbsp;are&nbsp;lost)<br>
&nbsp;&nbsp;<br>
&nbsp;<br>
The&nbsp;basic&nbsp;transformation&nbsp;maps&nbsp;one&nbsp;bbox&nbsp;to&nbsp;another,&nbsp;with&nbsp;an&nbsp;optional<br>
nonlinear&nbsp;transformation&nbsp;of&nbsp;one&nbsp;of&nbsp;coordinates&nbsp;(eg&nbsp;log&nbsp;scaling).<br>
&nbsp;<br>
The&nbsp;base&nbsp;class&nbsp;for&nbsp;transformations&nbsp;is&nbsp;Transformation,&nbsp;and&nbsp;the&nbsp;concrete<br>
derived&nbsp;classes&nbsp;are&nbsp;SeparableTransformation&nbsp;and&nbsp;Affine.&nbsp;&nbsp;Earlier<br>
versions&nbsp;of&nbsp;matplotlib&nbsp;handled&nbsp;transformation&nbsp;of&nbsp;x&nbsp;and&nbsp;y&nbsp;separately<br>
(ie&nbsp;we&nbsp;assumed&nbsp;all&nbsp;transformations&nbsp;were&nbsp;separable)&nbsp;but&nbsp;this&nbsp;makes&nbsp;it<br>
difficult&nbsp;to&nbsp;do&nbsp;rotations&nbsp;or&nbsp;polar&nbsp;transformations,&nbsp;for&nbsp;example.&nbsp;&nbsp;All<br>
artists&nbsp;contain&nbsp;their&nbsp;own&nbsp;transformation,&nbsp;defaulting&nbsp;to&nbsp;the&nbsp;identity<br>
transform.<br>
&nbsp;<br>
The&nbsp;signature&nbsp;of&nbsp;a&nbsp;separable&nbsp;transformation&nbsp;instance&nbsp;is<br>
&nbsp;<br>
&nbsp;&nbsp;trans&nbsp;=&nbsp;<a href="#-SeparableTransformation">SeparableTransformation</a>(bbox1,&nbsp;bbox2,&nbsp;funcx,&nbsp;funcy)<br>
&nbsp;<br>
where&nbsp;funcx&nbsp;and&nbsp;funcy&nbsp;operate&nbsp;on&nbsp;x&nbsp;and&nbsp;y.&nbsp;&nbsp;The&nbsp;typical&nbsp;linear<br>
coordinate&nbsp;transformation&nbsp;maps&nbsp;one&nbsp;bounding&nbsp;box&nbsp;to&nbsp;another,&nbsp;with&nbsp;funcx<br>
and&nbsp;funcy&nbsp;both&nbsp;identity.&nbsp;&nbsp;Eg,<br>
&nbsp;<br>
&nbsp;&nbsp;transData&nbsp;=&nbsp;Transformation(viewLim,&nbsp;displayLim,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#-Func">Func</a>(IDENTITY),&nbsp;<a href="#-Func">Func</a>(IDENTITY))<br>
&nbsp;<br>
maps&nbsp;the&nbsp;axes&nbsp;view&nbsp;limits&nbsp;to&nbsp;display&nbsp;limits.&nbsp;&nbsp;If&nbsp;the&nbsp;xaxis&nbsp;scaling&nbsp;is<br>
changed&nbsp;to&nbsp;log,&nbsp;one&nbsp;simply&nbsp;calls<br>
&nbsp;<br>
&nbsp;&nbsp;transData.get_funcx.set_type(LOG10)<br>
&nbsp;<br>
For&nbsp;more&nbsp;general&nbsp;transformations&nbsp;including&nbsp;rotation,&nbsp;the&nbsp;Affine&nbsp;class<br>
is&nbsp;provided,&nbsp;which&nbsp;is&nbsp;constructed&nbsp;with&nbsp;6&nbsp;LazyValue&nbsp;instances:<br>
a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;tx,&nbsp;ty.&nbsp;&nbsp;These&nbsp;give&nbsp;the&nbsp;values&nbsp;of&nbsp;the&nbsp;matrix&nbsp;transformation<br>
&nbsp;<br>
&nbsp;&nbsp;[xo&nbsp;&nbsp;=&nbsp;&nbsp;|a&nbsp;&nbsp;c|&nbsp;[xi&nbsp;&nbsp;+&nbsp;[tx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;yo]&nbsp;&nbsp;&nbsp;&nbsp;|b&nbsp;&nbsp;d|&nbsp;&nbsp;yi]&nbsp;&nbsp;&nbsp;&nbsp;ty]<br>
&nbsp;<br>
where&nbsp;if&nbsp;sx,&nbsp;sy&nbsp;are&nbsp;the&nbsp;scaling&nbsp;components,&nbsp;tx,&nbsp;y&nbsp;are&nbsp;the&nbsp;translation<br>
components,&nbsp;and&nbsp;alpha&nbsp;is&nbsp;the&nbsp;rotation<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;sx*cos(alpha);<br>
&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;-sx*sin(alpha);<br>
&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;sy*sin(alpha);<br>
&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;sy*cos(alpha);<br>
&nbsp;<br>
From&nbsp;a&nbsp;user&nbsp;perspective,&nbsp;the&nbsp;most&nbsp;important&nbsp;Tranformation&nbsp;methods&nbsp;are<br>
&nbsp;<br>
All&nbsp;transformations<br>
-------------------<br>
&nbsp;&nbsp;freeze()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;eval&nbsp;and&nbsp;freeze&nbsp;the&nbsp;lazy&nbsp;objects<br>
&nbsp;&nbsp;thaw()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;release&nbsp;the&nbsp;lazy&nbsp;objects<br>
&nbsp;<br>
&nbsp;&nbsp;xy_tup(xy)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;transform&nbsp;the&nbsp;tuple&nbsp;(x,y)<br>
&nbsp;&nbsp;seq_x_y(x,&nbsp;y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;transform&nbsp;the&nbsp;python&nbsp;sequences&nbsp;x&nbsp;and&nbsp;y<br>
&nbsp;&nbsp;numerix_x_y(x,&nbsp;y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;x&nbsp;and&nbsp;y&nbsp;are&nbsp;numerix&nbsp;1D&nbsp;arrays<br>
&nbsp;&nbsp;seq_xy_tups(seq)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;seq&nbsp;is&nbsp;a&nbsp;sequence&nbsp;of&nbsp;xy&nbsp;tuples<br>
&nbsp;&nbsp;inverse_xy_tup(xy)&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;apply&nbsp;the&nbsp;inverse&nbsp;transformation&nbsp;to&nbsp;tuple&nbsp;xy&nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;set_offset(xy,&nbsp;trans)&nbsp;-&nbsp;xy&nbsp;is&nbsp;an&nbsp;x,y&nbsp;tuple&nbsp;and&nbsp;trans&nbsp;is&nbsp;a<br>
&nbsp;&nbsp;&nbsp;&nbsp;Transformation&nbsp;instance.&nbsp;&nbsp;This&nbsp;will&nbsp;apply&nbsp;a&nbsp;post&nbsp;transformational<br>
&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;of&nbsp;all&nbsp;future&nbsp;transformations&nbsp;by&nbsp;xt,yt&nbsp;=&nbsp;trans.xy_tup(xy[0],&nbsp;xy[1])<br>
&nbsp;<br>
&nbsp;<br>
Separable&nbsp;transformations<br>
-------------------------<br>
&nbsp;<br>
&nbsp;&nbsp;get_bbox1()&nbsp;-&nbsp;return&nbsp;the&nbsp;input&nbsp;bbox<br>
&nbsp;&nbsp;get_bbox2()&nbsp;-&nbsp;return&nbsp;the&nbsp;output&nbsp;bbox<br>
&nbsp;&nbsp;set_bbox1()&nbsp;-&nbsp;set&nbsp;the&nbsp;input&nbsp;bbox<br>
&nbsp;&nbsp;set_bbox2()&nbsp;-&nbsp;set&nbsp;the&nbsp;output&nbsp;bbox<br>
&nbsp;&nbsp;get_funcx()&nbsp;-&nbsp;return&nbsp;the&nbsp;Func&nbsp;instance&nbsp;on&nbsp;x<br>
&nbsp;&nbsp;get_funcy()&nbsp;-&nbsp;return&nbsp;the&nbsp;Func&nbsp;instance&nbsp;on&nbsp;y<br>
&nbsp;&nbsp;set_funcx()&nbsp;-&nbsp;set&nbsp;the&nbsp;Func&nbsp;instance&nbsp;on&nbsp;x<br>
&nbsp;&nbsp;set_funcy()&nbsp;-&nbsp;set&nbsp;the&nbsp;Func&nbsp;instance&nbsp;on&nbsp;y<br>
&nbsp;<br>
Affine&nbsp;transformations<br>
----------------------<br>
&nbsp;<br>
&nbsp;&nbsp;as_vec6()&nbsp;-&nbsp;return&nbsp;the&nbsp;affine&nbsp;as&nbsp;length&nbsp;6&nbsp;list&nbsp;of&nbsp;Values<br>
&nbsp;<br>
&nbsp;<br>
In&nbsp;general,&nbsp;you&nbsp;shouldn't&nbsp;need&nbsp;to&nbsp;construct&nbsp;your&nbsp;own&nbsp;transformations,<br>
but&nbsp;should&nbsp;use&nbsp;the&nbsp;helper&nbsp;functions&nbsp;defined&nbsp;in&nbsp;this&nbsp;module.<br>
&nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;zero&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;<a href="#-Value">Value</a>(0)<br>
&nbsp;&nbsp;one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;<a href="#-Value">Value</a>(1)<br>
&nbsp;&nbsp;origin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;<a href="#-Point">Point</a>(<a href="#-zero">zero</a>(),&nbsp;<a href="#-zero">zero</a>())<br>
&nbsp;&nbsp;unit_bbox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;0,0&nbsp;to&nbsp;1,1&nbsp;bounding&nbsp;box<br>
&nbsp;&nbsp;identity_affine&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;An&nbsp;affine&nbsp;identity&nbsp;transformation<br>
&nbsp;&nbsp;identity_transform&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;An&nbsp;identity&nbsp;separable&nbsp;transformation<br>
&nbsp;&nbsp;translation_transform&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;a&nbsp;pure&nbsp;translational&nbsp;affine<br>
&nbsp;&nbsp;scale_transform&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;a&nbsp;pure&nbsp;scale&nbsp;affine<br>
&nbsp;&nbsp;scale_sep_transform&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;a&nbsp;pure&nbsp;scale&nbsp;separable&nbsp;transformation<br>
&nbsp;&nbsp;scale_translation_transform&nbsp;-&nbsp;a&nbsp;scale&nbsp;and&nbsp;translate&nbsp;affine<br>
&nbsp;&nbsp;bound_vertices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;bbox&nbsp;that&nbsp;bounds&nbsp;all&nbsp;the&nbsp;xy&nbsp;tuples<br>
&nbsp;&nbsp;bbox_all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;bbox&nbsp;that&nbsp;bounds&nbsp;all&nbsp;the&nbsp;bboxes<br>
&nbsp;&nbsp;lbwh_to_bbox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;build&nbsp;a&nbsp;bbox&nbsp;from&nbsp;tuple<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left,&nbsp;bottom,&nbsp;width,&nbsp;height&nbsp;tuple<br>
&nbsp;<br>
&nbsp;&nbsp;multiply_affines&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;the&nbsp;affine&nbsp;that&nbsp;is&nbsp;the&nbsp;matrix&nbsp;product&nbsp;of<br>
&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;two&nbsp;affines<br>
&nbsp;<br>
&nbsp;&nbsp;get_bbox_transform&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;return&nbsp;a&nbsp;SeparableTransformation&nbsp;instance&nbsp;that<br>
&nbsp;&nbsp;&nbsp;&nbsp;transforms&nbsp;one&nbsp;bbox&nbsp;to&nbsp;another<br>
&nbsp;<br>
&nbsp;&nbsp;blend_xy_sep_transform&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;mix&nbsp;the&nbsp;x&nbsp;and&nbsp;y&nbsp;components&nbsp;of&nbsp;two&nbsp;separable<br>
&nbsp;&nbsp;&nbsp;&nbsp;transformations&nbsp;into&nbsp;a&nbsp;new&nbsp;transformation.&nbsp;&nbsp;This&nbsp;allows&nbsp;you&nbsp;to<br>
&nbsp;&nbsp;&nbsp;&nbsp;specify&nbsp;x&nbsp;and&nbsp;y&nbsp;in&nbsp;different&nbsp;coordinate&nbsp;systems<br>
&nbsp;<br>
&nbsp;&nbsp;transform_bbox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;apply&nbsp;a&nbsp;transformation&nbsp;to&nbsp;a&nbsp;bbox&nbsp;and&nbsp;return&nbsp;the<br>
&nbsp;&nbsp;&nbsp;&nbsp;transformed&nbsp;bbox<br>
&nbsp;<br>
&nbsp;&nbsp;inverse_transform_bbox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;apply&nbsp;the&nbsp;inverse&nbsp;transformation&nbsp;of&nbsp;a&nbsp;bbox<br>
&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;return&nbsp;the&nbsp;inverse&nbsp;transformed&nbsp;bbox<br>
&nbsp;<br>
&nbsp;<br>
The&nbsp;units/transform_unit.py&nbsp;code&nbsp;has&nbsp;many&nbsp;examples.</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-Affine"><strong>Affine</strong></a>(...)</dt><dd><tt><a href="#-Affine">Affine</a>(a,b,c,d,tx,ty)</tt></dd></dl>
 <dl><dt><a name="-Bbox"><strong>Bbox</strong></a>(...)</dt><dd><tt><a href="#-Bbox">Bbox</a>(ll,&nbsp;ur)</tt></dd></dl>
 <dl><dt><a name="-Func"><strong>Func</strong></a>(...)</dt><dd><tt><a href="#-Func">Func</a>(typecode)</tt></dd></dl>
 <dl><dt><a name="-FuncXY"><strong>FuncXY</strong></a>(...)</dt><dd><tt><a href="#-FuncXY">FuncXY</a>(funcx,&nbsp;funcy)</tt></dd></dl>
 <dl><dt><a name="-Interval"><strong>Interval</strong></a>(...)</dt><dd><tt><a href="#-Interval">Interval</a>(val1,&nbsp;val2)</tt></dd></dl>
 <dl><dt><a name="-NonseparableTransformation"><strong>NonseparableTransformation</strong></a>(...)</dt><dd><tt><a href="#-NonseparableTransformation">NonseparableTransformation</a>(box1,&nbsp;box2,&nbsp;funcxy))</tt></dd></dl>
 <dl><dt><a name="-Point"><strong>Point</strong></a>(...)</dt><dd><tt><a href="#-Point">Point</a>(x,&nbsp;y)</tt></dd></dl>
 <dl><dt><a name="-SeparableTransformation"><strong>SeparableTransformation</strong></a>(...)</dt><dd><tt><a href="#-SeparableTransformation">SeparableTransformation</a>(box1,&nbsp;box2,&nbsp;funcx,&nbsp;funcy))</tt></dd></dl>
 <dl><dt><a name="-Value"><strong>Value</strong></a>(...)</dt><dd><tt><a href="#-Value">Value</a>(x)</tt></dd></dl>
 <dl><dt><a name="-bbox_all"><strong>bbox_all</strong></a>(bboxes)</dt><dd><tt>Return&nbsp;the&nbsp;Bbox&nbsp;that&nbsp;bounds&nbsp;all&nbsp;bboxes</tt></dd></dl>
 <dl><dt><a name="-blend_xy_sep_transform"><strong>blend_xy_sep_transform</strong></a>(trans1, trans2)</dt><dd><tt>If&nbsp;trans1&nbsp;and&nbsp;trans2&nbsp;are&nbsp;SeparableTransformation&nbsp;instances,&nbsp;you&nbsp;can<br>
build&nbsp;a&nbsp;new&nbsp;SeparableTransformation&nbsp;from&nbsp;them&nbsp;by&nbsp;extracting&nbsp;the&nbsp;x&nbsp;and&nbsp;y<br>
bounding&nbsp;points&nbsp;and&nbsp;functions&nbsp;and&nbsp;recomposing&nbsp;a&nbsp;new&nbsp;SeparableTransformation<br>
&nbsp;<br>
This&nbsp;function&nbsp;extracts&nbsp;all&nbsp;the&nbsp;relevant&nbsp;bits&nbsp;from&nbsp;trans1&nbsp;and<br>
trans2&nbsp;and&nbsp;returns&nbsp;the&nbsp;new&nbsp;Transformation&nbsp;instance.&nbsp;&nbsp;This&nbsp;is<br>
useful,&nbsp;for&nbsp;example,&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;specify&nbsp;x&nbsp;in&nbsp;data&nbsp;coordinates<br>
and&nbsp;y&nbsp;in&nbsp;axes&nbsp;coordinates.</tt></dd></dl>
 <dl><dt><a name="-bound_vertices"><strong>bound_vertices</strong></a>(verts)</dt><dd><tt>Return&nbsp;the&nbsp;Bbox&nbsp;of&nbsp;the&nbsp;sequence&nbsp;of&nbsp;x,y&nbsp;tuples&nbsp;in&nbsp;verts</tt></dd></dl>
 <dl><dt><a name="-copy_bbox_transform"><strong>copy_bbox_transform</strong></a>(trans)</dt><dd><tt>return&nbsp;a&nbsp;deep&nbsp;copy&nbsp;of&nbsp;the&nbsp;bbox&nbsp;transform</tt></dd></dl>
 <dl><dt><a name="-get_bbox_transform"><strong>get_bbox_transform</strong></a>(boxin, boxout)</dt><dd><tt>return&nbsp;the&nbsp;transform&nbsp;that&nbsp;maps&nbsp;transform&nbsp;one&nbsp;bounding&nbsp;box&nbsp;to<br>
another</tt></dd></dl>
 <dl><dt><a name="-identity_affine"><strong>identity_affine</strong></a>()</dt><dd><tt>Get&nbsp;an&nbsp;affine&nbsp;transformation&nbsp;that&nbsp;maps&nbsp;x,y&nbsp;-&gt;&nbsp;x,y</tt></dd></dl>
 <dl><dt><a name="-identity_transform"><strong>identity_transform</strong></a>()</dt><dd><tt>Get&nbsp;an&nbsp;affine&nbsp;transformation&nbsp;that&nbsp;maps&nbsp;x,y&nbsp;-&gt;&nbsp;x,y</tt></dd></dl>
 <dl><dt><a name="-inverse_transform_bbox"><strong>inverse_transform_bbox</strong></a>(trans, bbox)</dt><dd><tt>inverse&nbsp;transform&nbsp;the&nbsp;bbox</tt></dd></dl>
 <dl><dt><a name="-lbwh_to_bbox"><strong>lbwh_to_bbox</strong></a>(l, b, w, h)</dt></dl>
 <dl><dt><a name="-multiply_affines"><strong>multiply_affines</strong></a>(v1, v2)</dt><dd><tt>v1&nbsp;and&nbsp;v2&nbsp;are&nbsp;Affine&nbsp;instances</tt></dd></dl>
 <dl><dt><a name="-one"><strong>one</strong></a>()</dt></dl>
 <dl><dt><a name="-origin"><strong>origin</strong></a>()</dt></dl>
 <dl><dt><a name="-scale_sep_transform"><strong>scale_sep_transform</strong></a>(sx, sy)</dt><dd><tt>Return&nbsp;a&nbsp;pure&nbsp;scale&nbsp;transformation&nbsp;as&nbsp;a&nbsp;SeparableTransformation;<br>
sx&nbsp;and&nbsp;sy&nbsp;are&nbsp;LazyValue&nbsp;instances&nbsp;(Values&nbsp;or&nbsp;binary&nbsp;opertations&nbsp;on<br>
values)</tt></dd></dl>
 <dl><dt><a name="-scale_transform"><strong>scale_transform</strong></a>(sx, sy)</dt><dd><tt>Return&nbsp;a&nbsp;pure&nbsp;scale&nbsp;transformation&nbsp;as&nbsp;an&nbsp;Affine&nbsp;instance;&nbsp;sx&nbsp;and<br>
sy&nbsp;are&nbsp;LazyValue&nbsp;instances&nbsp;(Values&nbsp;or&nbsp;binary&nbsp;opertations&nbsp;on<br>
values)</tt></dd></dl>
 <dl><dt><a name="-transform_bbox"><strong>transform_bbox</strong></a>(trans, bbox)</dt><dd><tt>transform&nbsp;the&nbsp;bbox&nbsp;to&nbsp;a&nbsp;new&nbsp;bbox</tt></dd></dl>
 <dl><dt><a name="-translation_transform"><strong>translation_transform</strong></a>(tx, ty)</dt><dd><tt>return&nbsp;a&nbsp;pure&nbsp;tranlational&nbsp;transformation&nbsp;tx&nbsp;and&nbsp;ty&nbsp;are&nbsp;LazyValue<br>
instances&nbsp;(Values&nbsp;or&nbsp;binary&nbsp;opertations&nbsp;on&nbsp;values)</tt></dd></dl>
 <dl><dt><a name="-unit_bbox"><strong>unit_bbox</strong></a>()</dt><dd><tt>Get&nbsp;a&nbsp;0,0&nbsp;-&gt;&nbsp;1,1&nbsp;Bbox&nbsp;instance</tt></dd></dl>
 <dl><dt><a name="-zero"><strong>zero</strong></a>()</dt></dl>
</td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#55aa55">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
    
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><strong>IDENTITY</strong> = 0<br>
<strong>LOG10</strong> = 1<br>
<strong>POLAR</strong> = 0</td></tr></table>
@footer@
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.