diff options
Diffstat (limited to 'ipl/gpacks/drawtree/draw_bar.icn')
-rw-r--r-- | ipl/gpacks/drawtree/draw_bar.icn | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/ipl/gpacks/drawtree/draw_bar.icn b/ipl/gpacks/drawtree/draw_bar.icn new file mode 100644 index 0000000..470fab0 --- /dev/null +++ b/ipl/gpacks/drawtree/draw_bar.icn @@ -0,0 +1,105 @@ +$define Win_Size 600 +$define BG "white" +$define FG "black" + +# set the default for DrawTree_Square_R +procedure drawtree_bar_default(fg, bg) + + local draw_record + + draw_record := DrawTree_Square_R() + + draw_record.win_width := Win_Size + 200 + draw_record.win_height := Win_Size + if /fg then draw_record.fg := FG else draw_record.fg := fg + if /bg then draw_record.bg := BG else draw_record.bg := bg + draw_record.color_list := [1, 2, 3, 4] + draw_record.color_list_u := ["red", "blue", "green", "orange", "yellow", "brown", "purple"] + draw_record.num_color := 4 + draw_record.win := WOpen("canvas=hidden", "size=" || Win_Size || "," || Win_Size + 100, + "bg=" || draw_record.bg, "fg=" || draw_record.fg) + draw_record.linewidth := 10 + draw_record.length := 580 + draw_record.space := 2 + draw_record.move := 15 + draw_record.x := draw_record.move + draw_record.y := 10 + + draw_record.menu := ["background", format_square_cb, "color list", format_square_cb, "linewidth", format_square_cb, + "space", format_square_cb, "length", format_square_cb, "snapshot", format_square_cb, "grid", format_square_cb] + + return draw_record + +end + + +procedure drawtree_bar(draw_record) + + draw_grid_bar(draw_record) + drawtree_bar_rec(draw_record, children, 0, draw_record.x, + draw_record.y, draw_record.linewidth, + draw_record.length) + +end + + +# draw a grid by using color +procedure draw_grid_bar(draw_record, size) + + local win, row, id, length + + /size & size := 2 + + EraseArea(draw_record.win) + + win := Clone(draw_record.win, "linewidth=" || size) + id := 1 + length := 2 * draw_record.move + draw_record.length + + every row := draw_record.move to draw_record.length/2 by draw_record.move do { + + Fg(win, draw_record.color_list_u[draw_record.color_list[id]]) + DrawLine(win, 15, row, draw_record.win_width, row) + DrawLine(win, 15, length - row, draw_record.win_width, length - row) + + if id >= draw_record.num_color then id := 1 else id +:= 1 + + } + +end + + + +# draw the tree in a circle seperated with line between each node +procedure drawtree_bar_rec(draw_record, children, id, x, y, width, length) + + local gen, new_id, win + + win := Clone(draw_record.win) + Fg(win, draw_record.color_list_u[draw_record.color_list[(children.all[id].generation) % + draw_record.num_color + 1]]) + + FillRectangle(win, x, y, width - draw_record.space, length) + + gen := 1 + every new_id := !children.all[id].children_id do + { + drawtree_bar_rec(draw_record, children, new_id, + (x + (gen * draw_record.linewidth)), + (y + draw_record.move), + (draw_record.linewidth), + (length - (2 * draw_record.move))) + gen := children.all[new_id].children_num + gen + 1 + } + +end + + + + + + + + + + |