def test_clipping_full(): p = Path([[1e30, 1e30]] * 5) simplified = list(p.iter_segments(clip=[0, 0, 100, 100])) assert simplified == [] p = Path([[50, 40], [75, 65]], [1, 2]) simplified = list(p.iter_segments(clip=[0, 0, 100, 100])) assert ([(list(x), y) for x, y in simplified] == [([50, 40], 1), ([75, 65], 2)]) p = Path([[50, 40]], [1]) simplified = list(p.iter_segments(clip=[0, 0, 100, 100])) assert ([(list(x), y) for x, y in simplified] == [([50, 40], 1)])
def test_start_with_moveto(): # Should be entirely clipped away to a single MOVETO data = b""" ZwAAAAku+v9UAQAA+Tj6/z8CAADpQ/r/KAMAANlO+v8QBAAAyVn6//UEAAC6ZPr/2gUAAKpv+v+8 BgAAm3r6/50HAACLhfr/ewgAAHyQ+v9ZCQAAbZv6/zQKAABepvr/DgsAAE+x+v/lCwAAQLz6/7wM AAAxx/r/kA0AACPS+v9jDgAAFN36/zQPAAAF6Pr/AxAAAPfy+v/QEAAA6f36/5wRAADbCPv/ZhIA AMwT+/8uEwAAvh77//UTAACwKfv/uRQAAKM0+/98FQAAlT/7/z0WAACHSvv//RYAAHlV+/+7FwAA bGD7/3cYAABea/v/MRkAAFF2+//pGQAARIH7/6AaAAA3jPv/VRsAACmX+/8JHAAAHKL7/7ocAAAP rfv/ah0AAAO4+/8YHgAA9sL7/8QeAADpzfv/bx8AANzY+/8YIAAA0OP7/78gAADD7vv/ZCEAALf5 +/8IIgAAqwT8/6kiAACeD/z/SiMAAJIa/P/oIwAAhiX8/4QkAAB6MPz/HyUAAG47/P+4JQAAYkb8 /1AmAABWUfz/5SYAAEpc/P95JwAAPmf8/wsoAAAzcvz/nCgAACd9/P8qKQAAHIj8/7cpAAAQk/z/ QyoAAAWe/P/MKgAA+aj8/1QrAADus/z/2isAAOO+/P9eLAAA2Mn8/+AsAADM1Pz/YS0AAMHf/P/g LQAAtur8/10uAACr9fz/2C4AAKEA/f9SLwAAlgv9/8ovAACLFv3/QDAAAIAh/f+1MAAAdSz9/ycx AABrN/3/mDEAAGBC/f8IMgAAVk39/3UyAABLWP3/4TIAAEFj/f9LMwAANm79/7MzAAAsef3/GjQA ACKE/f9+NAAAF4/9/+E0AAANmv3/QzUAAAOl/f+iNQAA+a/9/wA2AADvuv3/XDYAAOXF/f+2NgAA 29D9/w83AADR2/3/ZjcAAMfm/f+7NwAAvfH9/w44AACz/P3/XzgAAKkH/v+vOAAAnxL+//04AACW Hf7/SjkAAIwo/v+UOQAAgjP+/905AAB5Pv7/JDoAAG9J/v9pOgAAZVT+/606AABcX/7/7zoAAFJq /v8vOwAASXX+/207AAA/gP7/qjsAADaL/v/lOwAALZb+/x48AAAjof7/VTwAABqs/v+LPAAAELf+ /788AAAHwv7/8TwAAP7M/v8hPQAA9df+/1A9AADr4v7/fT0AAOLt/v+oPQAA2fj+/9E9AADQA/// +T0AAMYO//8fPgAAvRn//0M+AAC0JP//ZT4AAKsv//+GPgAAojr//6U+AACZRf//wj4AAJBQ///d PgAAh1v///c+AAB+Zv//Dz8AAHRx//8lPwAAa3z//zk/AABih///TD8AAFmS//9dPwAAUJ3//2w/ AABHqP//ej8AAD6z//+FPwAANb7//48/AAAsyf//lz8AACPU//+ePwAAGt///6M/AAAR6v//pj8A AAj1//+nPwAA/////w==""" verts = np.frombuffer(base64.decodebytes(data), dtype='<i4') verts = verts.reshape((len(verts) // 2, 2)) path = Path(verts) segs = path.iter_segments(transforms.IdentityTransform(), clip=(0.0, 0.0, 100.0, 100.0)) segs = list(segs) assert len(segs) == 1 assert segs[0][1] == Path.MOVETO
def draw_path(self, gc: GraphicsContextBase, path: Path, transform, rgbFace=None): # if path.codes is not None: self.__drawing_context.begin_path() for vertex, code in path.iter_segments(simplify=False, curves=True): if code == Path.MOVETO: point = transform.transform_point(vertex) self.__drawing_context.move_to(point[0], self.__height - point[1]) elif code == Path.LINETO: point = transform.transform_point(vertex) self.__drawing_context.line_to(point[0], self.__height - point[1]) elif code == Path.CLOSEPOLY: self.__drawing_context.close_path() elif code == Path.CURVE4: cpoint0 = transform.transform_point(vertex[0:2]) cpoint1 = transform.transform_point(vertex[2:4]) endpoint = transform.transform_point(vertex[4:]) self.__drawing_context.bezier_curve_to( cpoint0[0], self.__height - cpoint0[1], cpoint1[0], self.__height - cpoint1[1], endpoint[0], self.__height - endpoint[1]) elif code == Path.CURVE3: cpoint0 = transform.transform_point(vertex[0:2]) endpoint = transform.transform_point(vertex[2:]) self.__drawing_context.quadratic_curve_to( cpoint0[0], self.__height - cpoint0[1], endpoint[0], self.__height - endpoint[1]) if rgbFace is not None: self.__drawing_context.fill_style = self.__setup_color(rgbFace) self.__drawing_context.fill() self.__drawing_context.line_width = self.points_to_pixels( gc.get_linewidth()) self.__drawing_context.stroke_style = self.__setup_color(gc.get_rgb()) self.__drawing_context.stroke()
data = np.load(vertfilename) verts = data['vertices'] path = Path(verts, closed = True) print len(path) path.should_simplify = True path.simplify_threshold = 10.0 # <codecell> vertices = [] codes = [] for (vertex, code) in path.iter_segments(simplify = True): vertices.append(vertex.tolist()) codes.append(code) # <codecell> cleanpath = Path(vertices, codes) len(cleanpath) # <codecell> codes[-1] = Path.CLOSEPOLY # <codecell> bbox = cleanpath.get_extents()
y = np.sin(x) fig = plt.figure() ax = fig.add_subplot(111) line1 = ax.plot(x,y) patch1 = patches.PathPatch(path1, facecolor='red', edgecolor = 'blue', alpha=0.3, lw=2) patch2 = patches.PathPatch(path2, facecolor='red', edgecolor = 'blue', alpha=0.3, lw=2) patch2_rot = patches.PathPatch(path2_rot, facecolor = 'red', edgecolor = 'blue', alpha = 0.3, lw=2) pc = x0,y0 epatch1 = patches.Ellipse(pc, w, h, angle=0, ec='blue', fc='blue', alpha=0.2) epatch2 = patches.Ellipse(pc, w, h, angle=45, ec='blue', fc='blue', alpha=0.2) epatch3 = patches.FancyBboxPatch((0,0), w, h) for a,b in path1.iter_segments(): print a,b ax.add_patch(epatch1) ax.add_patch(epatch2) ax.add_patch(epatch3) ax.add_patch(patch1) ax.add_patch(patch2) ax.add_patch(patch2_rot) ax.set_xlim(-5,5) ax.set_ylim(-5,5) plt.show() verts = [ (0.0,0.0), # P0