def on_render(self, cvs, system): Box.on_render(self, cvs, system) Atom.on_render(self, cvs, system) n = self.n_top + self.n_bot if n == 0: return y = system[self.y] top = system[self.top] + PIP bot = system[self.bot] + PIP y_top = y + top y_bot = y - bot x_mid, y_mid = self.get_align("center") x0, y0 = system[x_mid], system[y_mid] x_top = [system[x] for x in self.x_top] x_bot = [system[x] for x in self.x_bot] x0 = self._get_pipx(x_top, x_bot) conv = lambda x0, x1, t: (1. - t) * x0 + t * x1 top_attrs = self.top_attrs bot_attrs = self.bot_attrs trace = self.trace trace["top"] = [] trace["bot"] = [] y3 = y_top for x3, attrs in zip(x_top, top_attrs): x2, y2 = x3, conv(y3, y0, 0.3) x1, y1 = conv(x0, x3, 0.7), conv(y3, y0, 0.7) p = path.curve(x3, y3, x2, y2, x1, y1, x0, y0) trace["top"].append(p) cvs.stroke(p, attrs) y3 = y_bot for x3, attrs in zip(x_bot, bot_attrs): x2, y2 = x3, conv(y3, y0, 0.3) x1, y1 = conv(x0, x3, 0.7), conv(y3, y0, 0.7) p = path.curve(x0, y0, x1, y1, x2, y2, x3, y3) trace["bot"].append(p) cvs.stroke(p, attrs) #cvs.fill(path.circle(x0, y0, 0.04)) if self.pip is not None: self.pip.render(cvs, x0, y0)
def on_render(self, cvs, system): Multi.on_render(self, cvs, system) y = system[self.y] top = system[self.top] + PIP bot = system[self.bot] + PIP y_top = y+top y_bot = y-bot y_mid = conv(self.lly, self.ury) y_mid = system[y_mid] x_top = [system[x] for x in self.x_top] x_bot = [system[x] for x in self.x_bot] x_mid = conv(x_bot[0], x_bot[1]) alpha = self.space under = self.inverse x0, x1 = x_bot[1], x_top[0] for i0, i1 in [(0, 1), (1, 0)]: x0, x1 = x_bot[i0], x_top[i1] if under: # I think this is de Casteljau subdivision... xt, yt = conv(x0, x1, 0.25), conv(y_bot, y_mid, 0.75) # control point p = path.curve( x0, y_bot, x0, conv(y_bot, y_mid), xt, yt, conv(xt, x_mid, alpha), conv(yt, y_mid, alpha)) cvs.stroke(p) xt, yt = conv(x0, x1, 0.75), conv(y_mid, y_top, 0.25) # control point p = path.curve( conv(xt, x_mid, alpha), conv(yt, y_mid, alpha), xt, yt, x1, conv(y_mid, y_top), x1, y_top) cvs.stroke(p) else: p = path.curve(x0, y_bot, x0, y_mid, x1, y_mid, x1, y_top) cvs.stroke(p) under = not under
def on_render(self, cvs, system): Multi.on_render(self, cvs, system) n = self.n_top + self.n_bot if n==0: return y = system[self.y] top = system[self.top] + PIP bot = system[self.bot] + PIP y_top = y+top y_bot = y-bot x_mid, y_mid = self.get_align("center") x_mid, y_mid = system[x_mid], system[y_mid] x_top = [system[x] for x in self.x_top] x_bot = [system[x] for x in self.x_bot] x_avg = (1./n)*sum(x_top + x_bot) attrs = self.attrs top_attrs = self.top_attrs bot_attrs = self.bot_attrs conv = lambda x0, x1, t=0.5: (1.-t)*x0 + t*x1 for (i_top, j_top) in self.toptop: x0 = x_top[i_top] x1 = x_top[j_top] #cvs.stroke(path.curve(x0, y_bot, x0, y_mid, x1, y_mid, x1, y_top)) x = conv(x0, x1) r = 0.5*(x1-x0) cvs.stroke(path.arc(x, y_top, r, pi, 2*pi), attrs + top_attrs[i_top]) for (i_top, i_bot) in self.topbot: x0 = x_bot[i_bot] x1 = x_top[i_top] cvs.stroke(path.curve(x0, y_bot, x0, y_mid, x1, y_mid, x1, y_top), attrs + top_attrs[i_top] + bot_attrs[i_bot]) for (i_bot, j_bot) in self.botbot: x0 = x_bot[i_bot] x1 = x_bot[j_bot] x = conv(x0, x1) r = 0.5*(x1-x0) cvs.stroke(path.arc(x, y_bot, r, 0, pi), attrs + bot_attrs[i_bot])