@@ -63,6 +63,7 @@ def __init__(self, fig, rect=None, *args, **kwargs):
6363 *elev* Elevation viewing angle (default 30)
6464 *zscale* [%(scale)s]
6565 *sharez* Other axes to share z-limits with
66+ *persp* Perspective projection (default True)
6667 ================ =========================================
6768
6869 .. versionadded :: 1.2.1
@@ -78,6 +79,7 @@ def __init__(self, fig, rect=None, *args, **kwargs):
7879 self .initial_elev = kwargs .pop ('elev' , 30 )
7980 zscale = kwargs .pop ('zscale' , None )
8081 sharez = kwargs .pop ('sharez' , None )
82+ self .set_persp (kwargs .pop ('persp' , True ))
8183
8284 self .xy_viewLim = unit_bbox ()
8385 self .zz_viewLim = unit_bbox ()
@@ -959,6 +961,18 @@ def view_init(self, elev=None, azim=None):
959961 else :
960962 self .azim = azim
961963
964+ def set_persp (self , persp ):
965+ """
966+ Set whether the projection should be perspective.
967+
968+ If set to *False*, orthographic projection will be used.
969+
970+ """
971+ if persp :
972+ self ._projection = proj3d .persp_transformation
973+ else :
974+ self ._projection = proj3d .ortho_transformation
975+
962976 def get_proj (self ):
963977 """
964978 Create the projection matrix from the current viewing position.
@@ -1001,9 +1015,9 @@ def get_proj(self):
10011015 zfront , zback = - self .dist , self .dist
10021016
10031017 viewM = proj3d .view_transformation (E , R , V )
1004- perspM = proj3d . persp_transformation (zfront , zback )
1018+ projM = self . _projection (zfront , zback )
10051019 M0 = np .dot (viewM , worldM )
1006- M = np .dot (perspM , M0 )
1020+ M = np .dot (projM , M0 )
10071021 return M
10081022
10091023 def mouse_init (self , rotate_btn = 1 , zoom_btn = 3 ):
0 commit comments