def __draw_lines_hide(self, gc, x, y, transform=None): """ x and y are equal length arrays, draw lines connecting each point in x, y """ if debugPS: self._pswriter.write('% draw_lines \n') if transform: if transform.need_nonlinear(): x, y, mask = transform.nonlinear_only_numerix(x, y, returnMask=1) else: mask = ones(x.shape) vec6 = transform.as_vec6_val() a, b, c, d, tx, ty = vec6 sx, sy = get_vec6_scales(vec6) start = 0 end = 1000 points = zip(x, y) write = self._pswriter.write write('gsave\n') self.push_gc(gc) write('[%f %f %f %f %f %f] concat\n' % (a, b, c, d, tx, ty)) while start < len(x): # put moveto on all the bad data and on the first good # point after the bad data codes = where(mask[start:end + 1], 'l', 'm') ind = nonzero(mask[start:end + 1] == 0) + 1 if ind[-1] >= len(codes): ind = ind[:-1] put(codes, ind, 'm') thisx = x[start:end + 1] thisy = y[start:end + 1] to_draw = izip(thisx, thisy, codes) if not to_draw: break ps = ['%1.3f %1.3f m' % to_draw.next()[:2]] ps.extend(["%1.3f %1.3f %c" % tup for tup in to_draw]) # we don't want to scale the line width, etc so invert the # scale for the stroke ps.append('\ngsave %f %f scale stroke grestore\n' % (1. / sx, 1. / sy)) write('\n'.join(ps)) start = end end += 1000 write("grestore\n")
def __draw_lines_hide(self, gc, x, y, transform=None): """ x and y are equal length arrays, draw lines connecting each point in x, y """ if debugPS: self._pswriter.write('% draw_lines \n') if transform: if transform.need_nonlinear(): x, y, mask = transform.nonlinear_only_numerix(x, y, returnMask=1) else: mask = ones(x.shape) vec6 = transform.as_vec6_val() a,b,c,d,tx,ty = vec6 sx, sy = get_vec6_scales(vec6) start = 0 end = 1000 points = zip(x,y) write = self._pswriter.write write('gsave\n') self.push_gc(gc) write('[%f %f %f %f %f %f] concat\n'%(a,b,c,d,tx,ty)) while start < len(x): # put moveto on all the bad data and on the first good # point after the bad data codes = where(mask[start:end+1], 'l', 'm') ind = nonzero(mask[start:end+1]==0)+1 if ind[-1]>=len(codes): ind = ind[:-1] put(codes, ind, 'm') thisx = x[start:end+1] thisy = y[start:end+1] to_draw = izip(thisx, thisy, codes) if not to_draw: break ps = ['%1.3f %1.3f m' % to_draw.next()[:2]] ps.extend(["%1.3f %1.3f %c" % tup for tup in to_draw]) # we don't want to scale the line width, etc so invert the # scale for the stroke ps.append('\ngsave %f %f scale stroke grestore\n'%(1./sx,1./sy)) write('\n'.join(ps)) start = end end += 1000 write("grestore\n")