예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
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)
예제 #4
0
파일: 20110525a.py 프로젝트: BIGtigr/xgcode
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)