def fit(self, max_size): """ Set the display transformation parameters to fit in a box of max_size. Search angles in a range of 180 degrees. This function sets a new scale, a new rotation, and a new translation. """ self.scale = 1 self.theta = 0 self.center = (0, 0) sf_theta_pairs = [] increment_count = 60 for i in range(increment_count): self.theta = i * math.pi / increment_count xmin, ymin, xmax, ymax = self.get_extents() cx = xmax - xmin cy = ymax - ymin if cx == 0: cx = cy / 100 if cy == 0: cy = cx / 100 current_size = (cx, cy) sf = layout.get_scaling_factor(current_size, max_size) sf_theta_pairs.append((sf, self.theta)) self.scale, self.theta = max(sf_theta_pairs) xmin, ymin, xmax, ymax = self.get_extents() self.center = ((xmin + xmax) / 2.0, (ymin + ymax) / 2.0)
def get_response_content(fs): """ @param fs: a FieldStorage object containing the cgi arguments @return: the response """ # get a properly formatted newick tree with branch lengths T, B, N = FtreeIO.newick_to_TBN(fs.tree) # get the vertex valuations reflect = False all_valuations = TB_to_harmonic_valuations(T, B, reflect) fiedler_valuations = all_valuations[1] # do the layout v_to_location = FtreeAux.equal_daylight_layout(T, B, 3) # get the vertex list and the initial vertex locations vertices = Ftree.T_to_leaves(T) + Ftree.T_to_internal_vertices(T) X_in = np.array([tuple(v_to_location[v]) for v in vertices]) # fit the tree to the physical size physical_size = (fs.width, fs.height) theta = layout.get_best_angle(X_in, physical_size) X = layout.rotate_2d_centroid(X_in, theta) sz = layout.get_axis_aligned_size(X) sf = layout.get_scaling_factor(sz, physical_size) X *= sf # get the map from id to location for the final tree layout v_to_location = dict((v, tuple(r)) for v, r in zip(vertices, X)) # draw the image context = TikzContext() draw_plain_branches_ftree(T, B, context, v_to_location) draw_ticks_ftree(T, B, context, fiedler_valuations, v_to_location) draw_labels_ftree(T, N, context, v_to_location) context.finish() # get the response tikzpicture = context.get_text() return tikz.get_response(tikzpicture, fs.tikzformat)