def paint_text(self, surface, parent_offset): parent_offset = Point(parent_offset) mid = len(self.line.current)/2 midvalues = self.line.current[mid:mid+2] if len(midvalues) < 2: # not enough control points to figure out where to put text return midsrc, middst = midvalues angle = ((middst - midsrc).angle() % (2*math.pi)) if 1*(2*math.pi)/4 < angle < 3*(2*math.pi)/4: angle += math.pi angle %= 2*math.pi t = self.rendered_text text_centering_vector = Point((-t.get_width()/2, -t.get_height())) text_centering_length = text_centering_vector.norm() text_centering_angle = text_centering_vector.angle() rt, coors = rotate_surface(t, angle) # coors[0] is where the original topleft is in the # rotated surface: topleft = coors[0] desired_topleft = midsrc + from_polar(text_centering_angle+angle, text_centering_length) pos = tuple(desired_topleft - topleft + parent_offset) draw.blit(surface, rt, map(int, pos))
def update_edges_lines(self, widget, node): center = Point(widget.final_rect().center) for edge in node.connections['in']: edge_w = self.edge_widgets[edge] edge_w.line.final[-1] = center.copy() edge_w.line.reset() for edge in node.connections['out']: edge_w = self.edge_widgets[edge] edge_w.line.final[0] = center.copy() edge_w.line.reset()