# displays robot actions as flow-field in x,y, with one fixed phi; from file /tmp/obs_flowfield.dat
# belongs to simulator language file: CortexDocking_analyze.enr


set file /tmp/obs_flowfield.dat


    if {[file exists $file]} {
       set fp [open $file r]
    } else {
       puts "no input file $file"
    }

    seek $fp 0

    # read the header
    # discrete dimensions (number of data = xdim*ydim)
    gets $fp line
    set xdim [lindex $line 0]
    set ydim [lindex $line 1]

    # size of the field (xvalues=[0 .. xsize]; yvalues=[-ysize/2 .. ysize/2])
    gets $fp line
    set xsize [lindex $line 0]
    set ysize [lindex $line 1]

    # angle
    gets $fp phi

    for {set x_ct 0} {$x_ct < $xdim} {incr x_ct} {
        for {set y_ct 0} {$y_ct < $ydim} {incr y_ct} {

            gets $fp line
            set xpos($x_ct,$y_ct) [lindex $line 0]
            set ypos($x_ct,$y_ct) [lindex $line 1]
            set forw($x_ct,$y_ct) [lindex $line 2]
            set back($x_ct,$y_ct) [lindex $line 3]
            set left($x_ct,$y_ct) [lindex $line 4]
            set righ($x_ct,$y_ct) [lindex $line 5]
        }
    }

    close $fp

    puts "xdim=$xdim ydim=$ydim"
    puts "xsize=$xsize ysize=$ysize"
    puts "phi=$phi"



set mygreen #000bbb000
set shape "3 7 3"

set fieldscale 20
set arrowscale 7
set fieldheight [expr $fieldscale * $xsize + 50]
set fieldheight [lindex [split $fieldheight "."] 0]
set fieldwidth [expr $fieldscale * $ysize + 50]
set fieldwidth [lindex [split $fieldwidth "."] 0]
canvas .field -height $fieldheight -width $fieldwidth -bg white
pack .field
bind . <q> {destroy .}

# .field create rectangle 25 25 [expr $fieldwidth - 25] [expr $fieldheight - 25] -outline grey


    for {set x_ct 0} {$x_ct < $xdim} {incr x_ct} {
        for {set y_ct 0} {$y_ct < $ydim} {incr y_ct} {

            set xpos_ [expr 25 + $xpos($x_ct,$y_ct) * $fieldscale]
            set ypos_ [expr 25 + ($ysize * 0.5 + $ypos($x_ct,$y_ct)) * $fieldscale]
            set forw_ [expr $forw($x_ct,$y_ct) * $arrowscale]
            set back_ [expr $back($x_ct,$y_ct) * $arrowscale]
            set left_ [expr $left($x_ct,$y_ct) * $arrowscale]
            set righ_ [expr $righ($x_ct,$y_ct) * $arrowscale]

            # the following is for little lines which originate from little circles

            #.field create line $ypos_ $xpos_ [expr $ypos_] [expr $xpos_ - $forw_] -fill black
            #.field create line $ypos_ $xpos_ [expr $ypos_] [expr $xpos_ + $back_] -fill red
            #.field create line $ypos_ $xpos_ [expr $ypos_ + $righ_] [expr $xpos_] -fill blue
            #.field create line $ypos_ $xpos_ [expr $ypos_ - $left_] [expr $xpos_] -fill $mygreen
            #if  {$forw($x_ct,$y_ct) == 1.000000} {
            #    .field create oval [expr $ypos_ - 1] [expr $xpos_ - 1] [expr $ypos_ + 1] [expr $xpos_ + 1] -outline black -fill black
            #}
            #if  {$back($x_ct,$y_ct) == 1.000000} {
            #    .field create oval [expr $ypos_ - 1] [expr $xpos_ - 1] [expr $ypos_ + 1] [expr $xpos_ + 1] -outline red -fill red
            #}
            #if  {$righ($x_ct,$y_ct) == 1.000000} {
            #    .field create oval [expr $ypos_ - 1] [expr $xpos_ - 1] [expr $ypos_ + 1] [expr $xpos_ + 1] -outline blue -fill blue
            #}
            #if  {$left($x_ct,$y_ct) == 1.000000} {
            #    .field create oval [expr $ypos_ - 1] [expr $xpos_ - 1] [expr $ypos_ + 1] [expr $xpos_ + 1] -outline $mygreen -fill $mygreen
            #}

            if  {$forw($x_ct,$y_ct) == 1.000000} {
                .field create line [expr $ypos_ + $forw_ * sin ($phi)] [expr $xpos_ + $forw_ * cos ($phi)] \
                                   [expr $ypos_ - $forw_ * sin ($phi)] [expr $xpos_ - $forw_ * cos ($phi)] -arrow last -arrowshape $shape -fill black
            }
            if  {$back($x_ct,$y_ct) == 1.000000} {
                .field create line [expr $ypos_ - $back_ * sin ($phi)] [expr $xpos_ - $back_ * cos ($phi)] \
                                   [expr $ypos_ + $back_ * sin ($phi)] [expr $xpos_ + $back_ * cos ($phi)] -arrow last -arrowshape $shape -fill red
            }
            if  {$righ($x_ct,$y_ct) == 1.000000} {
                .field create line [expr $ypos_ - $righ_ * cos ($phi)] [expr $xpos_ + $righ_ * sin ($phi)] \
                                   [expr $ypos_ + $righ_ * cos ($phi)] [expr $xpos_ - $righ_ * sin ($phi)] -arrow last -arrowshape $shape -fill blue
            }
            if  {$left($x_ct,$y_ct) == 1.000000} {
                .field create line [expr $ypos_ + $left_ * cos ($phi)] [expr $xpos_ - $left_ * sin ($phi)] \
                                   [expr $ypos_ - $left_ * cos ($phi)] [expr $xpos_ + $left_ * sin ($phi)] -arrow last -arrowshape $shape -fill $mygreen
            }
        }
    }


update
.field postscript -file "flow.eps"