proc return_to_flip_menu {} { global error_menu global flip_ij_menu pack forget $error_menu pack $flip_ij_menu } #%%%%%%%%%%%%%%%%%CHANGE_CHOSEN_FLIP%%%%%%%%%%%# #change the chosen flip proc change_chosen_flip {flip_wanted} { global chosen_flip_sign global chosen_flip #enable reverse i and j together- but not to reverse i and flip i-j for example if {$flip_wanted == 1} { set chosen_flip_sign(1) "X" set chosen_flip_sign(2) "" set chosen_flip_sign(3) "" set chosen_flip(1) 1 set chosen_flip(2) 0 set chosen_flip(3) 0 } if {$flip_wanted == 2} { set chosen_flip_sign(1) "" set chosen_flip(1) 0 if {$chosen_flip(2) == 1 && $chosen_flip(3) == 1} { set chosen_flip(2) 0 set chosen_flip_sign(2) "" } else { set chosen_flip(2) 1 set chosen_flip_sign(2) "X" } } if {$flip_wanted == 3} { set chosen_flip_sign(1) "" set chosen_flip(1) 0 if {$chosen_flip(2) == 1 && $chosen_flip(3) == 1} { set chosen_flip(3) 0 set chosen_flip_sign(3) "" } else { set chosen_flip(3) 1 set chosen_flip_sign(3) "X" } } } #%%%%%%%%%%%%%%%%%%%%%%%%START_PICK_DOMAIN%%%%%%%%%%%# #pick the domains to flip proc start_pick_domain {} { global glyph_menu global all_picked_doms global picked_domains_number set all_domains [gg::domGetAll] if {[llength $all_domains] > 0} { wm iconify $glyph_menu set all_picked_doms [gg::dispPick domain -message "Pick domains" -type STRUCTURED] wm deiconify $glyph_menu set number [llength $all_picked_doms] set picked_domains_number "$number picked domains" } } #%%%%%%%%%%%%%%%%START_FLIP%%%%%%%%%%%%%%%%%# #flip all the picked domainsthe way the user asked proc start_flip {} { global chosen_flip global all_picked_doms global new_all_picked_doms global flip_ij_menu global error_msg global error_menu global flag_fliped_already global master_frame global error_text if {[llength $all_picked_doms] == 0} { return 0 } set new_all_picked_doms "" foreach dom $all_picked_doms { #get imax and jmax for each dom gg::domReport $dom Report STRUCTURE set imax [lindex $Report(dimensions) 0] set jmax [lindex $Report(dimensions) 1] #we remember the color and style of the domain set style [gg::domDisp $dom -style ] set color [gg::domDisp $dom -linecolor ] set outfile [open "temp_output_grid.grd" w] #if we want to flip i-j directions if {$chosen_flip(1) == 1} { #its only one domain puts $outfile "1" #its domains so kdim is 1 #we write the plot3d file in a reverse direction- change i and j puts $outfile "$jmax $imax 1" #now we write all the x,y,z when 'j' is the inner loop (since we reverse the direction) # and we write all of x first, than y and than z for {set direction 0} {$direction <= 2} {incr direction} { for {set i 1} {$i <= $imax} {incr i} { for {set j 1} {$j <= $jmax} {incr j} { set P [gg::domGetPt $dom "$i $j"] set value [lindex $P $direction] puts $outfile "$value" } } } close $outfile #now we will delete our last domain gg::domDelete $dom #read the new domain in after reversing the direction set dom [gg::domImport "temp_output_grid.grd" ] gg::domDisp $dom -style $style gg::domDisp $dom -linecolor $color } #if we want to flip i direction if {$chosen_flip(2) == 1 && $chosen_flip(3) == 0} { #its only one domain puts $outfile "1" #its domains so kdim is 1 puts $outfile "$imax $jmax 1" for {set direction 0} {$direction <= 2} {incr direction} { for {set j 1} {$j <= $jmax} {incr j} { for {set i $imax} {$i >= 1} {incr i -1} { set P [gg::domGetPt $dom "$i $j"] set value [lindex $P $direction] puts $outfile "$value" } } } close $outfile #now we will delete our last domain gg::domDelete $dom #read the new domain in after reversing the direction set dom [gg::domImport "temp_output_grid.grd" ] gg::domDisp $dom -style $style gg::domDisp $dom -linecolor $color } if {$chosen_flip(3) == 1 && $chosen_flip(2) == 0} { #its only one domain puts $outfile "1" #its domains so kdim is 1 puts $outfile "$imax $jmax 1" for {set direction 0} {$direction <= 2} {incr direction} { for {set j $jmax} {$j >= 1} {incr j -1} { for {set i 1} {$i <= $imax} {incr i} { set P [gg::domGetPt $dom "$i $j"] set value [lindex $P $direction] puts $outfile "$value" } } } close $outfile #now we will delete our last domain gg::domDelete $dom #read the new domain in after reversing the direction set dom [gg::domImport "temp_output_grid.grd" ] gg::domDisp $dom -style $style gg::domDisp $dom -linecolor $color } #reverse i and j directions if {$chosen_flip(3) == 1 && $chosen_flip(2) == 1} { #its only one domain puts $outfile "1" #its domains so kdim is 1 puts $outfile "$imax $jmax 1" for {set direction 0} {$direction <= 2} {incr direction} { for {set j $jmax} {$j >= 1} {incr j -1} { for {set i $imax} {$i >= 1} {incr i -1} { set P [gg::domGetPt $dom "$i $j"] set value [lindex $P $direction] puts $outfile "$value" } } } close $outfile #now we will delete our last domain gg::domDelete $dom #read the new domain in after reversing the direction set dom [gg::domImport "temp_output_grid.grd" ] gg::domDisp $dom -style $style gg::domDisp $dom -linecolor $color } set new_all_picked_doms [linsert $new_all_picked_doms end $dom] } set all_picked_doms $new_all_picked_doms #notify the user that the flip is done set error_text "" if {$chosen_flip(1) == 1} { set error_text "Swapped I-J direction" } if {$chosen_flip(2) == 1} { set error_text "Fliped I direction" } if {$chosen_flip(3) == 1} { if {[llength $error_text] == 0} { set error_text "Fliped J direction" } else { set error_text "$error_text\nFliped J direction" } } pack forget $flip_ij_menu if {$flag_fliped_already == 0} { set flag_fliped_already 1 set error_menu [frame $master_frame.error_menu] pack $error_menu -fill x set error_msg_text [label $error_menu.error_msg_text -textvariable error_text] pack $error_msg_text set ok_button [button $error_menu.ok_button -text "OK" -command {return_to_flip_menu}] pack $ok_button -pady 15 } else { pack $error_menu } } proc create_flip_ij_menu {} { global flip_ij_menu global picked_domains_number global all_picked_doms global chosen_flip_sign global chosen_flip global glyph_menu global master_frame #menu for fliping i and j directions set flip_ij_menu [frame $master_frame.flip_ij_menu] pack $flip_ij_menu -fill x set flip_ij_t [label $flip_ij_menu.flip_ij_t -text "FLIP DIRECTIONS"] pack $flip_ij_t set pick_domain_f [frame $flip_ij_menu.pick_domain_f] pack $pick_domain_f -pady 10 set pick_domain_t [label $pick_domain_f.pick_domain_t -textvariable picked_domains_number -width 25] pack $pick_domain_t -side left -padx 5 set pick_domain_b [button $pick_domain_f.pick_domain_b -text "Pick" -command {start_pick_domain}] pack $pick_domain_b -side left set flip_i_with_j_f [frame $flip_ij_menu.flip_i_with_j_f] pack $flip_i_with_j_f set flip_i_with_j_t [label $flip_i_with_j_f.flip_i_with_j_t -text "Swap I-J directions" -width 25] pack $flip_i_with_j_t -side left set flip_i_with_j_b [button $flip_i_with_j_f.flip_i_with_j_b -textvariable chosen_flip_sign(1) \ -width 1 -height 1 -relief groove -command {change_chosen_flip 1}] pack $flip_i_with_j_b -side left set flip_i_f [frame $flip_ij_menu.flip_i_f] pack $flip_i_f set flip_i_t [label $flip_i_f.flip_i_t -text "Flip I direction" -width 25] pack $flip_i_t -side left set flip_i_b [button $flip_i_f.flip_i_b -textvariable chosen_flip_sign(2) \ -width 1 -height 1 -relief groove -command {change_chosen_flip 2}] pack $flip_i_b -side left set flip_j_f [frame $flip_ij_menu.flip_j_f] pack $flip_j_f set flip_j_t [label $flip_j_f.flip_j_t -text "Flip J direction" -width 25] pack $flip_j_t -side left set flip_j_b [button $flip_j_f.flip_j_b -textvariable chosen_flip_sign(3) \ -width 1 -height 1 -relief groove -command {change_chosen_flip 3}] pack $flip_j_b -side left set command_f [frame $flip_ij_menu.command_f] pack $command_f -fill x -pady 10 set exit_b [button $command_f.exit_b -text "Exit" -command {exit}] pack $exit_b -side right set apply_b [button $command_f.apply_b -text "Apply" -command {start_flip}] pack $apply_b -side left } #Initialize Tk in Gridgen gg::tkLoad global picked_domains_number global all_picked_doms global chosen_flip_sign global chosen_flip global glyph_menu global master_frame global flag_fliped_already set flag_fliped_already 0 set picked_domains_number "0 picked domains" set all_picked_doms "" #initialize the chosen flip to be i-j flip set chosen_flip(1) 1 set chosen_flip(2) 0 set chosen_flip(3) 0 set chosen_flip_sign(1) "X" set chosen_flip_sign(2) "" set chosen_flip_sign(3) "" #define the glyph menu set glyph_menu [toplevel .glyph_menu -width 60 -height 80] #prevent resize of glyph menu wm resizable $glyph_menu 0 0 #write 'do no close' msg on the other window set top_window [frame .top_window] pack $top_window set do_not_close [label $top_window.do_not_close -text "DO NOT CLOSE \nTHIS WINDOW"] pack $do_not_close #define the master frame set master_frame [frame $glyph_menu.master_frame -width 60 -height 80] pack $master_frame -padx 20 -pady 10 create_flip_ij_menu #Keep the window up gg::tkLoop