;******************************************************************** ; daily-flow.stklos ; The dat2graph script creates graph files with ; attributes set for morning_flow, morning_size, etc. ; This file retrieves those attributes and adjusts the ; graphics accordingly. ;******************************************************************** (define (sensor-attributes ei) (let* ( (color (color ei)) (width (width ei)) (mark (find-attribute 'sensor (edge ei))) (original-head (find-attribute 'original_head (edge ei))) (original-tail (find-attribute 'original_tail (edge ei))) (morning-flow (find-attribute 'morning_flow (edge ei))) (day-flow (find-attribute 'day_flow (edge ei))) (evening-flow (find-attribute 'evening_flow (edge ei))) (night-flow (find-attribute 'night_flow (edge ei))) ) (list color width mark original-head original-tail morning-flow day-flow evening-flow night-flow))) (define (reset-sensor-attributes ei attrs) (set! (color ei) (list-ref attrs 0)) (set! (width ei) (list-ref attrs 1)) (set-attribute! 'sensor (list-ref attrs 2) (edge ei)) (set-attribute! 'original_head (list-ref attrs 3) (edge ei)) (set-attribute! 'original_tail (list-ref attrs 4) (edge ei)) (set-attribute! 'morning_flow (list-ref attrs 5) (edge ei)) (set-attribute! 'day_flow (list-ref attrs 6) (edge ei)) (set-attribute! 'evening_flow (list-ref attrs 7) (edge ei)) (set-attribute! 'night_flow (list-ref attrs 8) (edge ei))) (define (original-direction gv attrs) (let* ( (original-head (list-ref attrs 3)) (original-tail (list-ref attrs 4)) (v1 (vertex-item (find-vertex-by-name original-head (graph gv)))) (v2 (vertex-item (find-vertex-by-name original-tail (graph gv)))) (ei (add-edge-item! v1 v2 gv))) (reset-sensor-attributes ei attrs))) (define (reversed-direction gv attrs) (display attrs) (newline) (let* ( (original-head (list-ref attrs 3)) (original-tail (list-ref attrs 4)) (v1 (vertex-item (find-vertex-by-name original-head (graph gv)))) (v2 (vertex-item (find-vertex-by-name original-tail (graph gv)))) (ei (add-edge-item! v2 v1 gv))) (reset-sensor-attributes ei attrs))) (define (morning-edge gv ei) (let* ( (attrs (sensor-attributes ei)) (morning-flow (list-ref attrs 5))) (remove-edge-and-edge-item! ei gv) (cond ((= morning-flow 1) (original-direction gv attrs)) ((= morning-flow 0) (reversed-direction gv attrs))))) (define (day-edge gv ei) (let* ( (attrs (sensor-attributes ei)) (day-flow (list-ref attrs 6))) (remove-edge-and-edge-item! ei gv) (cond ((= day-flow 1) (original-direction gv attrs)) ((= day-flow 0) (reversed-direction gv attrs))))) (define (evening-edge gv ei) (let* ( (attrs (sensor-attributes ei)) (evening-flow (list-ref attrs 7))) (remove-edge-and-edge-item! ei gv) (cond ((= evening-flow 1) (original-direction gv attrs)) ((= evening-flow 0) (reversed-direction gv attrs))))) (define (night-edge gv ei) (let* ( (attrs (sensor-attributes ei)) (night-flow (list-ref attrs 8))) (remove-edge-and-edge-item! ei gv) (cond ((= night-flow 1) (original-direction gv attrs)) ((= night-flow 0) (reversed-direction gv attrs))))) (define (resize-vertices gv time) (map (lambda (v) (set! (size v) (inexact->exact (/(find-attribute time (vertex v))2)))) (vertices gv))) (define (long-arrows gv) (map (lambda (ei) (set! (arrow-shape ei) '(8 12 5))) (edges gv))) (define (morning gv) (resize-vertices gv 'morning_size) (map (lambda (e) (morning-edge gv e)) (edges gv)) (long-arrows gv) (hide-edge-labels gv) gv) (define (day gv) (resize-vertices gv 'day_size) (map (lambda (e) (day-edge gv e)) (edges gv)) (long-arrows gv) (hide-edge-labels gv) gv) (define (evening gv) (resize-vertices gv 'evening_size) (map (lambda (e) (evening-edge gv e)) (edges gv)) (long-arrows gv) (hide-edge-labels gv) gv) (define (night gv) (resize-vertices gv 'night_size) (map (lambda (e) (night-edge gv e)) (edges gv)) (long-arrows gv) (hide-edge-labels gv) gv) (provide "daily-flow")