Revision: 54463
          http://brlcad.svn.sourceforge.net/brlcad/?rev=54463&view=rev
Author:   r_weiss
Date:     2013-02-21 20:11:59 +0000 (Thu, 21 Feb 2013)
Log Message:
-----------
Refactored mged grouper (i.e. gr) command to resolve namespace issues.

Modified Paths:
--------------
    brlcad/trunk/src/tclscripts/mged/grouper.tcl

Modified: brlcad/trunk/src/tclscripts/mged/grouper.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/mged/grouper.tcl        2013-02-21 19:22:53 UTC 
(rev 54462)
+++ brlcad/trunk/src/tclscripts/mged/grouper.tcl        2013-02-21 20:11:59 UTC 
(rev 54463)
@@ -39,143 +39,250 @@
 #       limitation.
 #
 
-namespace eval grouper_v2 {
+namespace eval Grouper {
+    set GroupNameGlobal ""
+    set GrouperRunning 0
+    set draw_orig ""
+    set pos_orig ""
+    set dim_orig ""
+    set fb_orig ""
+    set fb_all_orig ""
+    set listen_orig ""
+    set objs {}
+    set erase_status ""
+    set parent_only 0
+    set center_orig ""
+    set size_orig ""
+    set ae_orig ""
 
-namespace export gr
-namespace export grouper
-namespace export dg
-namespace export done_grouper
+    proc remdup { GroupName } {
+       set ItemList [search $GroupName -maxdepth 1]
+       set ItemList [lrange $ItemList 1 end]
+       set ItemList [lsort -unique $ItemList]
 
-set GroupNameGlobal ""
-set GrouperRunning 0
-set draw_orig ""
-set pos_orig ""
-set dim_orig ""
-set fb_orig ""
-set fb_all_orig ""
-set listen_orig ""
-set objs {}
-set erase_status ""
-set parent_only 0
-set center_orig ""
-set size_orig ""
-set ae_orig ""
+       set found_tmp 0
+       while { !$found_tmp } {
+           set tmp_grp [expr rand()]
+           if { [search -name $tmp_grp] == "" } {
+               set found_tmp 1
+           }
+       }
+       eval g $tmp_grp $ItemList
+       kill $GroupName
+       mv $tmp_grp $GroupName
+    }
 
-proc gr_remdup { GroupName } {
+    proc getObjInRectangle {} {
+       variable parent_only
+       set objs2 {}
+       set size [dm size]
+       set sizeX [lindex $size 0].0
+       set sizeY [lindex $size 1].0
+       set adjX [expr {($sizeX / 2.0) - 1.0}]
+       set adjY [expr {($sizeY / 2.0) - 1.0}]
+       set dim [rset r dim]
+       set dimX [lindex $dim 0].0
+       set dimY [lindex $dim 1].0
 
-    set ItemList [search $GroupName -maxdepth 1]
-    set ItemList [lrange $ItemList 1 end]
+       if { $dimX == 0.0 || $dimY == 0.0 } {
+           return "invalid_selection"
+       }
 
-    set ItemList [lsort -unique $ItemList]
+       set pos [rset r pos]
+       set posX [lindex $pos 0].0
+       set posY [lindex $pos 1].0
+       set posX [expr ($posX - $adjX) / $adjX]
+       set posY [expr ($posY - $adjY) / $adjY]
+       set dimX [expr ($dimX / $adjX)]
+       set dimY [expr ($dimY / $adjY)]
 
-    set found_tmp 0
+       if { $dimX > 0 } {
+           # Rectangle was created left-to-right. Select only
+           # objects completely in the rectangle.
+           set objs [select $posX $posY $dimX $dimY]
+       } else {
+           # Rectangle was created right-to-left. Select everything
+           # completely and partly in the rectangle.
+           set objs [select -p $posX $posY $dimX $dimY]
+       }
 
-    while { !$found_tmp } {
-       set tmp_grp [expr rand()]
-       if { [search -name $tmp_grp] == "" } {
-           set found_tmp 1
+       if { $objs == "" } {
+           return "no_result"
        }
-    }
 
-    eval g $tmp_grp $ItemList
+       if { $parent_only != 1 } {
+           foreach obj $objs {
+               set obj2 [file tail $obj]
+               lappend objs2 $obj2
+           }
+       } else {
+           foreach obj $objs {
+               set obj2 [file tail [file dirname $obj]]
+               # skip objects with no parent
+               if { $obj2 != "" } {
+                   lappend objs2 $obj2
+               }
+           }
+       }
 
-    kill $GroupName
+       if { $objs2 == {} } {
+           return "no_result"
+       }
 
-    mv $tmp_grp $GroupName
-}
+       return $objs2
+    }
 
+    proc do_grouper { GroupName Boolean ListLimit } {
+       variable objs
+       variable GroupNameGlobal
+       variable center_orig
+       variable size_orig
+       variable ae_orig
 
-proc gr_getObjInRectangle {} {
+       set GroupNameGlobal $GroupName
+       set center_orig [center]
+       set size_orig [size]
+       set ae_orig [ae]
 
-    variable parent_only
-    set objs2 {}
+       # Temporarily erase group from display while getting objects in 
rectangle"
+       after 1 {
+           if { [search -name $::Grouper::GroupNameGlobal] != "" } {
+               set ::Grouper::erase_status [erase $::Grouper::GroupNameGlobal]
+           } else {
+               set ::Grouper::erase_status 1
+           }
+       }
 
-    set size [dm size]
-    set sizeX [lindex $size 0].0
-    set sizeY [lindex $size 1].0
-    set adjX [expr {($sizeX / 2.0) - 1.0}]
-    set adjY [expr {($sizeY / 2.0) - 1.0}]
-    set dim [rset r dim]
-    set dimX [lindex $dim 0].0
-    set dimY [lindex $dim 1].0
+       # Wait for the group to be erased from the display before we continue
+       vwait ::Grouper::erase_status
 
-    if { $dimX == 0.0 || $dimY == 0.0 } {
-       return "invalid_selection"
-    }
+       after 1 {set ::Grouper::objs [::Grouper::getObjInRectangle]}
 
-    set pos [rset r pos]
-    set posX [lindex $pos 0].0
-    set posY [lindex $pos 1].0
-    set posX [expr ($posX - $adjX) / $adjX]
-    set posY [expr ($posY - $adjY) / $adjY]
-    set dimX [expr ($dimX / $adjX)]
-    set dimY [expr ($dimY / $adjY)]
+       puts stdout "Selection running ..."
+       vwait ::Grouper::objs
 
-    if { $dimX > 0 } {
-       # Rectangle was created left-to-right. Select only
-       # objects completely in the rectangle.
-       set objs [select $posX $posY $dimX $dimY]
-    } else {
-       # Rectangle was created right-to-left. Select everything
-       # completely and partly in the rectangle.
-       set objs [select -p $posX $posY $dimX $dimY]
-    }
+       if { $objs == "invalid_selection" } {
+           puts stdout "Invalid selection (zero area selection box)."
+           # highlight in yellow current group
+           if { [search -name $GroupName] != "" } {
+               e -C255/255/0 $GroupName
+               center $center_orig
+               size $size_orig
+               ae $ae_orig
+           }
+           return
+       }
 
-    if { $objs == "" } {
-       return "no_result"
-    }
+       if { $objs == "no_result" } {
+           puts stdout "Nothing selected."
+           # highlight in yellow current group
+           if { [search -name $GroupName] != "" } {
+               e -C255/255/0 $GroupName
+               center $center_orig
+               size $size_orig
+               ae $ae_orig
+           }
+           return
+       }
 
-    if { $parent_only != 1 } {
-       foreach obj $objs {
-           set obj2 [file tail $obj]
-           lappend objs2 $obj2
+       set objs [lsort -unique $objs]
+       set tot_obj_in_rect [llength $objs]
+
+       if { [search -name $GroupName] == "" } {
+           set grp_obj_list_before ""
+           set grp_obj_list_len_before 0
+       } else {
+           set grp_obj_list_before [search $GroupName -maxdepth 1]
+           set grp_obj_list_len_before [expr [llength $grp_obj_list_before] - 
1]
        }
-    } else {
-       foreach obj $objs {
-           set obj2 [file tail [file dirname $obj]]
-           # skip objects with no parent
-           if { $obj2 != "" } {
-               lappend objs2 $obj2
+
+       if { $Boolean == "+" } {
+           foreach obj $objs {
+               g $GroupName $obj
            }
+       } else {
+           foreach obj $objs {
+               catch {rm $GroupName $obj} tmp_msg
+           }
        }
-    }
 
-    if { $objs2 == {} } {
-       return "no_result"
-    }
+       if { ([search -name $GroupName] != "") && ($Boolean == "+") } {
+           remdup $GroupName
+       }
 
-    return $objs2
-}
+       if { [search -name $GroupName] == "" } {
+           set grp_obj_list_after ""
+           set grp_obj_list_len_after 0
+       } else {
+           set grp_obj_list_after [search $GroupName -maxdepth 1]
+           set grp_obj_list_len_after [expr [llength $grp_obj_list_after] - 1]
+       }
 
+       if { $grp_obj_list_len_after > $grp_obj_list_len_before } {
+           set objcnt_chng [expr $grp_obj_list_len_after - 
$grp_obj_list_len_before]
+           puts stdout "$objcnt_chng of $tot_obj_in_rect selected objects 
added to group '$GroupName'."
+       } elseif { $grp_obj_list_len_after < $grp_obj_list_len_before } {
+           set objcnt_chng [expr $grp_obj_list_len_before - 
$grp_obj_list_len_after]
+           puts stdout "$objcnt_chng of $tot_obj_in_rect selected objects 
removed from group '$GroupName'."
+       } else {
+           puts stdout "No change to group '$GroupName'."
+       }
 
+       set objcnt 0
+
+       # hack to prevent script lockup on windows
+       set max_objs_per_line 200
+
+       if { ($ListLimit > 0 && $ListLimit <= $max_objs_per_line) ||
+            ($ListLimit > 0 && $tot_obj_in_rect <= $max_objs_per_line) } {
+           puts stdout "Selected object list\:"
+           foreach obj $objs {
+               incr objcnt
+               if { $objcnt > $ListLimit } {
+                   puts -nonewline stdout "\nListed $ListLimit of 
$tot_obj_in_rect selected objects."
+                   break;
+               }
+               puts -nonewline stdout "$obj "
+           }
+           puts -nonewline stdout "\n"
+       } elseif { $ListLimit > 0 } {
+           puts stdout "Selected object list\:"
+           foreach obj $objs {
+               incr objcnt
+               if { $objcnt > $ListLimit } {
+                   puts -nonewline stdout "\nListed $ListLimit of 
$tot_obj_in_rect selected objects."
+                   break;
+               }
+               puts stdout "$objcnt\t$obj"
+           }
+       }
+
+       # highlight in yellow current group
+       if { [search -name $GroupName] != "" } {
+           e -C255/255/0 $GroupName
+           center $center_orig
+           size $size_orig
+           ae $ae_orig
+       }
+
+       puts stdout "Selection complete."
+    }
+}; # end namespace
+
 proc gr { args } {
     grouper $args
 }
 
-
 proc grouper { args } {
-
     global mged_gui mged_default mged_players
 
-    variable GrouperRunning
-    variable parent_only
-    variable draw_orig
-    variable pos_orig
-    variable dim_orig
-    variable fb_orig
-    variable fb_all_orig
-    variable listen_orig
-    variable center_orig
-    variable size_orig
-    variable ae_orig
-
     set GroupName ""
     set Boolean ""
     set ListLimit 0
-    set parent_only 0
+    set ::Grouper::parent_only 0
     set usage_msg "Usage: {GroupName} {+|-} \[ListLimit\] \[-p\]"
 
-    if {$GrouperRunning == 1} {
+    if {$::Grouper::GrouperRunning == 1} {
        return "Grouper already running, use the 'dg' command to exit grouper 
before restarting."
     }
 
@@ -194,7 +301,7 @@
 
     foreach arg $args {
        if { $arg == "-p" } {
-           set parent_only 1
+           set ::Grouper::parent_only 1
        } elseif { [string is integer $arg] && $arg > 0 } {
            incr listlimit_flag_cnt
            set ListLimit $arg
@@ -210,12 +317,13 @@
        }
     }
 
-    if { $groupname_flag_cnt != 1 || $boolean_flag_cnt != 1 || 
$listlimit_flag_cnt > 1 || $invalid_flag_cnt != 0} {
+    if { $groupname_flag_cnt != 1 || $boolean_flag_cnt != 1 ||
+        $listlimit_flag_cnt > 1 || $invalid_flag_cnt != 0} {
        puts stdout "$usage_msg"
        return
     }
 
-    set GrouperRunning 1
+    set ::Grouper::GrouperRunning 1
 
     for {set i 0} {1} {incr i} {
        set id [subst $mged_default(id)]_$i
@@ -224,15 +332,15 @@
        }
     }
 
-    set draw_orig [rset r draw]
-    set pos_orig [rset r pos]
-    set dim_orig [rset r dim]
-    set fb_orig [rset var fb]
-    set fb_all_orig [rset var fb_all]
-    set listen_orig [rset var listen]
-    set center_orig [center]
-    set size_orig [size]
-    set ae_orig [ae]
+    set ::Grouper::draw_orig [rset r draw]
+    set ::Grouper::pos_orig [rset r pos]
+    set ::Grouper::dim_orig [rset r dim]
+    set ::Grouper::fb_orig [rset var fb]
+    set ::Grouper::fb_all_orig [rset var fb_all]
+    set ::Grouper::listen_orig [rset var listen]
+    set ::Grouper::center_orig [center]
+    set ::Grouper::size_orig [size]
+    set ::Grouper::ae_orig [ae]
 
     set mged_gui($id,mouse_behavior) p
     set_mouse_behavior $id
@@ -240,176 +348,26 @@
     rset vars fb 0
     rset r draw 1
 
-    bind $mged_gui($id,active_dm) <ButtonRelease-2> " winset 
$mged_gui($id,active_dm); dm idle; ::grouper_v2::do_grouper $GroupName $Boolean 
$ListLimit"
+    bind $mged_gui($id,active_dm) <ButtonRelease-2> " winset 
$mged_gui($id,active_dm); dm idle; ::Grouper::do_grouper $GroupName $Boolean 
$ListLimit"
     bind $mged_gui($id,active_dm) <Control-ButtonRelease-2> " winset 
$mged_gui($id,active_dm); dm idle; done_grouper"
 
     # highlight in yellow current group
     if { [search -name $GroupName] != "" } {
        e -C255/255/0 $GroupName
-       center $center_orig
-       size $size_orig
-       ae $ae_orig
+       center $::Grouper::center_orig
+       size $::Grouper::size_orig
+       ae $::Grouper::ae_orig
     }
 }
 
-
-proc do_grouper { GroupName Boolean ListLimit } {
-
-    variable objs
-    variable GroupNameGlobal
-    variable center_orig
-    variable size_orig
-    variable ae_orig
-
-    set GroupNameGlobal $GroupName
-    set center_orig [center]
-    set size_orig [size]
-    set ae_orig [ae]
-
-    # Temporarily erase group from display while getting objects in rectangle"
-    after 1 {
-       if { [search -name $::grouper_v2::GroupNameGlobal] != "" } {
-           set ::grouper_v2::erase_status [erase 
$::grouper_v2::GroupNameGlobal]
-       } else {
-           set ::grouper_v2::erase_status 1
-       }
-    }
-
-    # Wait for the group to be erased from the display before we continue
-    vwait ::grouper_v2::erase_status
-
-    after 1 {set ::grouper_v2::objs [::grouper_v2::gr_getObjInRectangle]}
-
-    puts stdout "Selection running ..."
-    vwait ::grouper_v2::objs
-
-    if { $objs == "invalid_selection" } {
-       puts stdout "Invalid selection (zero area selection box)."
-       # highlight in yellow current group
-       if { [search -name $GroupName] != "" } {
-           e -C255/255/0 $GroupName
-           center $center_orig
-           size $size_orig
-           ae $ae_orig
-       }
-       return
-    }
-
-    if { $objs == "no_result" } {
-       puts stdout "Nothing selected."
-       # highlight in yellow current group
-       if { [search -name $GroupName] != "" } {
-           e -C255/255/0 $GroupName
-           center $center_orig
-           size $size_orig
-           ae $ae_orig
-       }
-       return
-    }
-
-    set objs [lsort -unique $objs]
-    set tot_obj_in_rect [llength $objs]
-
-    if { [search -name $GroupName] == "" } {
-       set grp_obj_list_before ""
-       set grp_obj_list_len_before 0
-    } else {
-       set grp_obj_list_before [search $GroupName -maxdepth 1]
-       set grp_obj_list_len_before [expr [llength $grp_obj_list_before] - 1]
-    }
-
-    if { $Boolean == "+" } {
-       foreach obj $objs {
-           g $GroupName $obj
-       }
-    } else {
-       foreach obj $objs {
-           catch {rm $GroupName $obj} tmp_msg
-       }
-    }
-
-    if { ([search -name $GroupName] != "") && ($Boolean == "+") } {
-       gr_remdup $GroupName
-    }
-
-    if { [search -name $GroupName] == "" } {
-       set grp_obj_list_after ""
-       set grp_obj_list_len_after 0
-    } else {
-       set grp_obj_list_after [search $GroupName -maxdepth 1]
-       set grp_obj_list_len_after [expr [llength $grp_obj_list_after] - 1]
-    }
-
-
-    if { $grp_obj_list_len_after > $grp_obj_list_len_before } {
-       set objcnt_chng [expr $grp_obj_list_len_after - 
$grp_obj_list_len_before]
-       puts stdout "$objcnt_chng of $tot_obj_in_rect selected objects added to 
group '$GroupName'."
-    } elseif { $grp_obj_list_len_after < $grp_obj_list_len_before } {
-       set objcnt_chng [expr $grp_obj_list_len_before - 
$grp_obj_list_len_after]
-       puts stdout "$objcnt_chng of $tot_obj_in_rect selected objects removed 
from group '$GroupName'."
-    } else {
-       puts stdout "No change to group '$GroupName'."
-    }
-
-    set objcnt 0
-
-    # hack to prevent script lockup on windows
-    set max_objs_per_line 200
-
-    if { ($ListLimit > 0 && $ListLimit <= $max_objs_per_line) || ($ListLimit > 
0 && $tot_obj_in_rect <= $max_objs_per_line) } {
-       puts stdout "Selected object list\:"
-       foreach obj $objs {
-           incr objcnt
-           if { $objcnt > $ListLimit } {
-               puts -nonewline stdout "\nListed $ListLimit of $tot_obj_in_rect 
selected objects."
-               break;
-           }
-           puts -nonewline stdout "$obj "
-       }
-       puts -nonewline stdout "\n"
-    } elseif { $ListLimit > 0 } {
-       puts stdout "Selected object list\:"
-       foreach obj $objs {
-           incr objcnt
-           if { $objcnt > $ListLimit } {
-               puts -nonewline stdout "\nListed $ListLimit of $tot_obj_in_rect 
selected objects."
-               break;
-           }
-           puts stdout "$objcnt\t$obj"
-       }
-    }
-
-    # highlight in yellow current group
-    if { [search -name $GroupName] != "" } {
-       e -C255/255/0 $GroupName
-       center $center_orig
-       size $size_orig
-       ae $ae_orig
-    }
-
-    puts stdout "Selection complete."
-}
-
-
 proc dg {} {
     done_grouper
 }
 
-
 proc done_grouper {} {
-
     global mged_gui mged_default mged_players
 
-    variable GroupNameGlobal
-    variable GrouperRunning
-    variable draw_orig
-    variable pos_orig
-    variable dim_orig
-    variable fb_orig
-    variable fb_all_orig
-    variable listen_orig
-
-    if {$GrouperRunning != 1} {
+    if {$::Grouper::GrouperRunning != 1} {
        return "Grouper not running."
     }
 
@@ -427,27 +385,22 @@
     bind $mged_gui($id,active_dm) <ButtonRelease-2> ""
 
     # remove yellow highlights from the display
-    if { [search -name $GroupNameGlobal] != "" } {
-       erase $GroupNameGlobal
+    if { [search -name $::Grouper::GroupNameGlobal] != "" } {
+       erase $::Grouper::GroupNameGlobal
     }
-    set GrouperRunning 0
+    set ::Grouper::GrouperRunning 0
 
     # return display to state before grouper changed it
-    rset r draw $draw_orig
-    rset r pos $pos_orig
-    rset r dim $dim_orig
-    rset var fb $fb_orig
-    rset var fb_all $fb_all_orig
-    rset var listen $listen_orig
+    rset r draw $::Grouper::draw_orig
+    rset r pos $::Grouper::pos_orig
+    rset r dim $::Grouper::dim_orig
+    rset var fb $::Grouper::fb_orig
+    rset var fb_all $::Grouper::fb_all_orig
+    rset var listen $::Grouper::listen_orig
 
     puts stdout "Grouper done."
 }
 
-}
-
-namespace import ::grouper_v2::*
-
-
 # Local Variables:
 # mode: Tcl
 # tab-width: 8

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to