示例#1
0
 def add_rect(self, rect, color=None, row=None, col=None,
             draggable_edge=True,
             draggable_corner=True,
             draggable_region=True,   
             invisible_region=False,
             invisible_edge=False,
             invisible_corner=False):
     """ Add rectangle to object as another region
     """                
     rec_ps = [None] * 4
     ulX, ulY = rect[0][0], rect[0][1]
     lrX, lrY = rect[1][0], rect[1][1]
     sr = SelectRegion(self, rect=[(ulX,ulY),(lrX,lrY)],
                     draggable=draggable_region,
                     invisible=invisible_region,
                     color=color, row=row, col=col)
     self.regions.append(sr)         # Add region
     self.add_part(sr)       
     rec_ps[0] = (ulX, ulY)
     rec_ps[1] = (lrX, ulY) 
     rec_ps[2] = (lrX, lrY)
     rec_ps[3] = (ulX, lrY)
     for pi1 in range(0, 3+1):
         pi2 = pi1 + 1
         if pi2 >= len(rec_ps):
             pi2 = 0          # Ends at first
         pt1 = rec_ps[pi1]
         pt2 = rec_ps[pi2]
         self.add_edge(sr, pt1, pt2,
                     draggable_edge=draggable_edge,
                     draggable_corner=draggable_corner,
                     invisible_edge=invisible_edge,
                     invisible_corner=invisible_corner)
示例#2
0
 def add_rect(self, rect):
     """ Add rectangle to object as another region
     """
     rec_ps = [None] * 4
     ulX, ulY = rect[0][0], rect[0][1]
     lrX, lrY = rect[1][0], rect[1][1]
     sr = SelectRegion(rect=[(ulX, ulY), (lrX, lrY)])  # Just one region now
     self.regions.append(sr)  # Add region
     self.add_part(sr)
     rec_ps[0] = (ulX, ulY)
     rec_ps[1] = (lrX, ulY)
     rec_ps[2] = (lrX, lrY)
     rec_ps[3] = (ulX, lrY)
     for pi1 in range(0, 3 + 1):
         pi2 = pi1 + 1
         if pi2 >= len(rec_ps):
             pi2 = 0  # Ends at first
         pt1 = rec_ps[pi1]
         pt2 = rec_ps[pi2]
         self.add_edge(sr, pt1, pt2)
示例#3
0
def set_figure_button():
    global frame, sr, figure_new, sar
    global width, height, nx, ny
    global n_rearrange_cycles, rearrange_cycle
    SlTrace.lg("srtest Set Button", "button")
    ###    if canvas is not None:
    ###        SlTrace.lg("delete canvas")
    ###        canvas.delete()
    ###        canvas = None
    if frame is not None:
        SlTrace.lg("destroy frame", "destroy frame")
        frame.destroy()
        frame = None
    
    app.update_form()
    n_rearrange_cycles = app.get_current_val("arrange_number", 1)
    rearrange_cycle = 1    
    width = app.get_current_val("window_width", width)
    width = int(width)
    height = app.get_current_val("window_height", height)
    height = int(height)
    nx = app.get_current_val("figure_columns", nx)
    if nx == 0:
        new_nx = 1
        SlTrace.lg("nx:%d is too low - set to %d" % (nx, new_nx), "adjust_size")
        nx = new_nx
    ny = app.get_current_val("figure_rows", ny)
    if ny == 0:
        new_ny = 1
        SlTrace.lg("ny:%d is too low - set to %d" % (ny, new_ny), "adjust_size")
        ny = new_ny
        
        
        
    rects =  []
    rects_rows = []         # So we can pass row, col
    rects_cols = []
    min_xlen = app.get_component_val("figure_size", "min", 10)
    min_xlen = float(min_xlen)
    min_xlen = str(min_xlen)
    min_ylen = min_xlen
    
    ###rects.append(rect1)
    ###rects.append(rect2)
    xmin = .1*float(width)
    xmax = .9*float(width)
    xlen = (xmax-xmin)/float(nx)
    min_xlen = float(min_xlen)
    if xlen < min_xlen:
        SlTrace.lg("xlen(%.0f) set to %.0f" % (xlen, min_xlen))
        xlen = min_xlen
    ymin = .1*float(height)
    ymax = .9*float(height)
    ylen = (ymax-ymin)/float(ny)
    min_ylen = float(min_ylen)
    if ylen < min_ylen:
        SlTrace.lg("ylen(%.0f) set to %.0f" % (ylen, min_ylen))
        ylen = min_ylen
    def rn(val):
        return int(round(val))
    
    min_side = min(xlen, ylen)
    corner_width = max(min_side/15., 4)               
    for i in range(int(nx)):
        col = i+1
        x1 = xmin + i*xlen
        x2 = x1 + xlen
        for j in range(int(ny)):
            row = j+1
            y1 = ymin + j*ylen
            y2 = y1 + ylen
            rect = ((rn(x1), rn(y1)), (rn(x2), rn(y2)))
            rects.append(rect)
            rects_rows.append(row)
            rects_cols.append(col)
    
    im = Image.new("RGB", (width, height))
    frame = Frame(mw, width=width, height=height, bg="", colormap="new")
    frame.pack()
    canvas = Canvas(frame, width=width, height=height)
    canvas.pack()   
    sr = SelectArea(canvas, image=im)
    color_spec = app.get_current_val("color_spec", default= "freq")
    color_prog = app.get_current_val("color_prog", default="ascend")
    color_min = None        # Use internal defaults
    color_max = None
    ###if color_spec == "freq":
    ###    color_min = app.get_component_val("color_value", "min", default=400)
    ###    color_max = app.get_component_val("color_value", "max", default=700)
        
    reg_cc = SelectColor(ncolor=len(rects),
                         spec=color_spec,
                         prog=color_prog,
                         cmin=color_min,
                         cmax=color_max)

    SlTrace.lg("ncolor=%d" % len(rects), "get_color")
    SelectRegion.reset()
    for i, rect in enumerate(rects):
        row = rects_rows[i]
        col = rects_cols[i]
        col_rect = reg_cc.get_color()
        sr.add_rect(rect, color=col_rect, row=row, col=col)
    s_width = 20
    for part in sr.get_parts():
        if part.is_corner():
            part.set(display_shape="circle",
            ###part.set(display_shape="dot",
                    color="blue",
                    edge_width_display=corner_width,
                    edge_width_select=corner_width,
                    edge_width_enlarge=corner_width*.1,
                    )
        elif part.is_edge():
            part.set(
                    edge_width_select=s_width,
                    edge_width_enlarge=s_width*.1,
                    )

    sr.display()        
    app.set_call("run", run_button)
    app.set_call("set", set_figure_button)
    app.set_call("pause", pause_button)
    app.set_call("step", step_button)
    app.set_call("step_down", step_down_button)
    if SlTrace.trace("step_button"):
        SlTrace.lg("color_spec: %s color_prog: %s color_min: %d color_max: %d")
    sar = SelectArrange(arc, sr, n_major_cycle = n_arrange, mw=mw)        # Setup for color rearrangement
    figure_new = False