Exemple #1
0
    def add_collection3d(self, col, zs=0, zdir='z'):
        '''
        Add a 3D collection object to the plot.

        2D collection types are converted to a 3D version by
        modifying the object and adding z coordinate information.

        Supported are:
            - PolyCollection
            - LineCollection
            - PatchCollection
        '''
        zvals = np.atleast_1d(zs)
        if len(zvals) > 0:
            zsortval = min(zvals)
        else:
            zsortval = 0  # FIXME: Fairly arbitrary. Is there a better value?

        # FIXME: use issubclass() (although, then a 3D collection
        #       object would also pass.)  Maybe have a collection3d
        #       abstract class to test for and exclude?
        if type(col) is mcoll.PolyCollection:
            art3d.poly_collection_2d_to_3d(col, zs=zs, zdir=zdir)
            col.set_sort_zpos(zsortval)
        elif type(col) is mcoll.LineCollection:
            art3d.line_collection_2d_to_3d(col, zs=zs, zdir=zdir)
            col.set_sort_zpos(zsortval)
        elif type(col) is mcoll.PatchCollection:
            art3d.patch_collection_2d_to_3d(col, zs=zs, zdir=zdir)
            col.set_sort_zpos(zsortval)

        return super().add_collection(col)
def add_objs(xyzss, liness, rectss, obj_type, netname, color, alpha,
             linewidth):
    for z, (xs, ys, zs) in enumerate(xyzss):
        if len(xs) > 0:
            obj = ax.scatter(xs,
                             ys,
                             zs,
                             color=get_color(color, z),
                             alpha=alpha,
                             linewidth=linewidth)
            add_obj(obj, z, k, netname)
    for z, lines in enumerate(liness):
        if len(lines) > 0:
            obj = ax.add_collection(
                Line3DCollection(lines,
                                 colors=get_color(color, z),
                                 alpha=alpha,
                                 linewidth=linewidth))
            add_obj(obj, z, k, netname)
    for z, rects in enumerate(rectss):
        if len(rects) > 0:
            coll = PatchCollection(rects,
                                   color=get_color(color, z),
                                   alpha=alpha)
            art3d.poly_collection_2d_to_3d(coll, z)
            obj = ax.add_collection(coll)
            add_obj(obj, z, k, netname)
def test_poly_collection_2d_to_3d_empty():
    poly = PolyCollection([])
    art3d.poly_collection_2d_to_3d(poly)
    assert isinstance(poly, art3d.Poly3DCollection)
    assert poly.get_paths() == []

    fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
    ax.add_artist(poly)
    minz = poly.do_3d_projection()
    assert np.isnan(minz)

    # Ensure drawing actually works.
    fig.canvas.draw()
Exemple #4
0
def convert_to_gl(obj, zs=0, zdir='z'):
    from art3d_gl import polygon_2d_to_gl
    from art3d_gl import line_3d_to_gl
    from art3d_gl import poly_collection_3d_to_gl
    from art3d_gl import line_collection_3d_to_gl
    from matplotlib.patches import Polygon
    from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3D, \
                           poly_collection_2d_to_3d, Line3DCollection

    if isinstance(obj, Line3D):
        line3d_to_gl(obj)
    elif isinstance(obj, Polygon):
        polygon_2d_to_gl(obj, zs, zdir)
    elif isinstance(obj, Poly3DCollection):
        poly_collection_3d_to_gl(obj)
    elif isinstance(obj, Line3DCollection):
        line_collection_3d_to_gl(obj)
    elif isinstance(obj, PolyCollection):
        poly_collection_2d_to_3d(obj, zs=zs, zdir=zdir)
        poly_collection_3d_to_gl(obj)
Exemple #5
0
def convert_to_gl(obj, zs = 0, zdir = 'z'):
    from art3d_gl import polygon_2d_to_gl 
    from art3d_gl import line_3d_to_gl 
    from art3d_gl import poly_collection_3d_to_gl
    from art3d_gl import line_collection_3d_to_gl     
    from matplotlib.patches import Polygon
    from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3D, \
                           poly_collection_2d_to_3d, Line3DCollection

    if isinstance(obj, Line3D):
       line3d_to_gl(obj)
    elif isinstance(obj, Polygon):
       polygon_2d_to_gl(obj, zs, zdir)
    elif isinstance(obj, Poly3DCollection):
       poly_collection_3d_to_gl(obj)
    elif isinstance(obj, Line3DCollection):
       line_collection_3d_to_gl(obj)        
    elif isinstance(obj, PolyCollection):
       poly_collection_2d_to_3d(obj, zs=zs, zdir=zdir)
       poly_collection_3d_to_gl(obj)
def test_poly_collection_2d_to_3d_empty():
    poly = PolyCollection([])
    art3d.poly_collection_2d_to_3d(poly)
    assert isinstance(poly, art3d.Poly3DCollection)
    assert poly.get_paths() == []
Exemple #7
0
def test_poly_collection_2d_to_3d_empty():
    poly = PolyCollection([])
    art3d.poly_collection_2d_to_3d(poly)
    assert isinstance(poly, art3d.Poly3DCollection)
    assert poly.get_paths() == []