Server IP : 127.0.0.2 / Your IP : 13.58.216.183 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/graphviz/lefty/ |
Upload File : |
load ('def.lefty'); definit (); # # initialize window data # canvas = defcanvas; wrect = [0 = ['x' = -5; 'y' = 0;]; 1 = ['x' = 410; 'y' = 500;];]; setwidgetattr (canvas, ['window' = wrect;]); # # data structures # nodearray = []; nodenum = 0; dist = ['x' = 40; 'y' = 40;]; defsize = ['x' = 10; 'y' = 10;]; fontname = 'fixed'; fontsize = 18; tree = null; # drawing functions # boxnode = function (node) { local center; box (canvas, node, node.rect, ['color' = 0; 'fill' = 'on';]); box (canvas, node, node.rect); center = [ 'x' = (node.rect[0].x + node.rect[1].x) / 2; 'y' = (node.rect[0].y + node.rect[1].y) / 2; ]; if (node.name) text (canvas, node, center, node.name, fontname, fontsize, 'cc'); }; circlenode = function (node) { local center, radius; center = [ 'x' = (node.rect[0].x + node.rect[1].x) / 2; 'y' = (node.rect[0].y + node.rect[1].y) / 2; ]; radius = [ 'x' = center.x - node.rect[0].x; 'y' = center.y - node.rect[0].y; ]; arc (canvas, node, center, radius, ['color' = 0; 'fill' = 'on';]); arc (canvas, node, center, radius); if (node.name) text (canvas, node, center, node.name, fontname, fontsize, 'cc'); }; drawnode = boxnode; drawedge = function (node1, node2) { line (canvas, null, [ 'x' = (node1.rect[1].x + node1.rect[0].x) / 2; 'y' = node1.rect[0].y; ], [ 'x' = (node2.rect[1].x + node2.rect[0].x) / 2; 'y' = node2.rect[1].y; ]); }; drawtree = function (node) { local i; for (i in nodearray) drawnode (nodearray[i]); drawtreerec (node); }; drawtreerec = function (node) { local i, n; if ((n = tablesize (node.ch)) > 0) { for (i = 0; i < n; i = i + 1) { drawedge (node, node.ch[i]); drawtreerec (node.ch[i]); } } }; redraw = function (c) { if (tree) drawtree (tree); }; # layout functions # complayout = function () { leafx = 0; leafrank = 0; dolayout (tree, wrect[1].y - 10); remove ('leafx'); remove ('leafrank'); }; dolayout = function (node, pary) { local r, n, i, size, lchp, rchp; size = nodesize (node); if (node.chn > 0) { for (i = 0; i < node.chn; i = i + 1) dolayout (node.ch[i], pary - size.y - dist.y); node.rank = (node.ch[0].rank + node.ch[node.chn - 1].rank) / 2; lchp = node.ch[0].rect; rchp = node.ch[node.chn - 1].rect; r[0].x = lchp[0].x + ((rchp[1].x - lchp[0].x) - size.x) / 2; r[0].y = pary - size.y; r[1].x = r[0].x + size.x; r[1].y = pary; node.rect = r; } else { node.rank = leafrank; r[0].x = leafx; r[0].y = pary - size.y; r[1].x = r[0].x + size.x; r[1].y = pary; leafrank = leafrank + 1; leafx = r[1].x + dist.x; node.rect = r; } }; # editing functions # inode = function (point, name) { local i, nnum, size; nnum = nodenum; if (~name) name = ask ('give name of node:'); nodearray[nnum].ch = []; nodearray[nnum].chn = 0; nodearray[nnum].name = name; size = nodesize (nodearray[nnum]); nodearray[nnum].rect[0] = point; nodearray[nnum].rect[1] = ['x' = point.x + size.x; 'y' = point.y + size.y;]; nodenum = nodenum + 1; if (~tree) { tree = nodearray[nnum]; tree.depth = 0; complayout (); drawtree (tree); } else drawtree (nodearray[nnum]); return nodearray[nnum]; }; iedge = function (node1, node2) { node1.ch[node1.chn] = node2; node1.chn = node1.chn + 1; node2.depth = node1.depth + 1; complayout (); clear (canvas); drawtree (tree); }; fix = function (node, op, np) { if (node.depth ~= 0) dist.y = dist.y + (op.y - np.y) / node.depth; if (node.rank ~= 0) dist.x = dist.x + (np.x - op.x) / node.rank; complayout (); clear (canvas); drawtree (tree); }; nodesize = function (node) { local siz; if (~(siz = textsize (canvas, node.name, fontname, fontsize))) siz = defsize; else { siz.x = siz.x + 8; siz.y = siz.y + 8; } return siz; }; changenode = function (nodestyle) { drawnode = nodestyle; clear (canvas); drawtree (tree); }; # user interface functions # leftdown = function (data) { if (~data.obj) inode (data.pos, null); }; leftup = function (data) { if (data.pobj) fix (data.pobj, data.ppos, data.pos); }; middleup = function (data) { if (data.pobj & data.obj) iedge (data.pobj, data.obj); }; dops = function () { local s; s = ['x' = 8 * 300; 'y' = 10.5 * 300;]; fontname = 'Times-Roman'; canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]); setwidgetattr (canvas, ['window' = wrect;]); drawtree (tree); destroywidget (canvas); canvas=defcanvas; fontname = 'fixed'; };