Revision: 7842
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7842&view=rev
Author: leejjoon
Date: 2009-10-03 18:11:09 +0000 (Sat, 03 Oct 2009)
Log Message:
-----------
add PathPatch3d in mplot3d.art3d
Modified Paths:
--------------
trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
Added Paths:
-----------
trunk/matplotlib/examples/mplot3d/pathpatch3d_demo.py
Added: trunk/matplotlib/examples/mplot3d/pathpatch3d_demo.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/pathpatch3d_demo.py
(rev 0)
+++ trunk/matplotlib/examples/mplot3d/pathpatch3d_demo.py 2009-10-03
18:11:09 UTC (rev 7842)
@@ -0,0 +1,52 @@
+import matplotlib.pyplot as plt
+from matplotlib.patches import Circle, PathPatch
+from mpl_toolkits.mplot3d import Axes3D
+import mpl_toolkits.mplot3d.art3d as art3d
+from matplotlib.text import TextPath
+from matplotlib.transforms import Affine2D
+
+
+def text3d(ax, (x, y, z), s, zdir="z", size=None, angle=0, usetex=False,
+ **kwargs):
+
+ if zdir == "y":
+ xy1, z1 = (x, z), y
+ elif zdir == "y":
+ xy1, z1 = (y, z), x
+ else:
+ xy1, z1 = (x, y), z
+
+ text_path = TextPath((0, 0), s, size=size, usetex=usetex)
+ trans = Affine2D().rotate(angle).translate(xy1[0], xy1[1])
+
+ p1 = PathPatch(trans.transform_path(text_path), **kwargs)
+ ax.add_patch(p1)
+ art3d.pathpatch_2d_to_3d(p1, z=z1, zdir=zdir)
+
+
+fig = plt.figure()
+ax = Axes3D(fig)
+
+p = Circle((5, 5), 3)
+ax.add_patch(p)
+art3d.pathpatch_2d_to_3d(p, z=0, zdir="x")
+
+
+text3d(ax, (4, -2, 0), "X-axis", zdir="z", size=.5, usetex=False,
+ ec="none", fc="k")
+text3d(ax, (12, 4, 0), "Y-axis", zdir="z", size=.5, usetex=False,
angle=.5*3.14159,
+ ec="none", fc="k")
+text3d(ax, (12, 10, 4), "Z-axis", zdir="y", size=.5, usetex=False,
angle=.5*3.14159,
+ ec="none", fc="k")
+
+text3d(ax, (1, 5, 0),
+ r"$\displaystyle G_{\mu\nu} + \Lambda g_{\mu\nu} = \frac{8\pi G}{c^4}
T_{\mu\nu} $",
+ zdir="z", size=1, usetex=True,
+ ec="none", fc="k")
+
+ax.set_xlim3d(0, 10)
+ax.set_ylim3d(0, 10)
+ax.set_zlim3d(0, 10)
+
+plt.show()
+
Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py 2009-10-02 18:58:20 UTC
(rev 7841)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py 2009-10-03 18:11:09 UTC
(rev 7842)
@@ -217,6 +217,31 @@
def draw(self, renderer):
Patch.draw(self, renderer)
+
+class PathPatch3D(Patch3D):
+ '''
+ 3D PathPatch object.
+ '''
+
+ def __init__(self, path, **kwargs):
+ zs = kwargs.pop('zs', [])
+ zdir = kwargs.pop('zdir', 'z')
+ Patch.__init__(self, **kwargs)
+ self.set_3d_properties(path, zs, zdir)
+
+ def set_3d_properties(self, path, zs=0, zdir='z'):
+ Patch3D.set_3d_properties(self, path.vertices, zs=zs, zdir=zdir)
+ self._code3d = path.codes
+
+ def do_3d_projection(self, renderer):
+ s = self._segment3d
+ xs, ys, zs = zip(*s)
+ vxs, vys,vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)
+ self._path2d = mpath.Path(zip(vxs, vys), self._code3d)
+ # FIXME: coloring
+ self._facecolor2d = self._facecolor3d
+ return min(vzs)
+
def get_patch_verts(patch):
"""Return a list of vertices for the path of a patch."""
trans = patch.get_patch_transform()
@@ -233,6 +258,15 @@
patch.__class__ = Patch3D
patch.set_3d_properties(verts, z, zdir)
+def pathpatch_2d_to_3d(pathpatch, z=0, zdir='z'):
+ """Convert a PathPatch to a PathPatch3D object."""
+ path = pathpatch.get_path()
+ trans = pathpatch.get_patch_transform()
+
+ mpath = trans.transform_path(path)
+ pathpatch.__class__ = PathPatch3D
+ pathpatch.set_3d_properties(mpath, z, zdir)
+
class Patch3DCollection(PatchCollection):
'''
A collection of 3D patches.
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins