Revision: 65351
          http://sourceforge.net/p/brlcad/code/65351
Author:   bob1961
Date:     2015-06-17 14:51:34 +0000 (Wed, 17 Jun 2015)
Log Message:
-----------
Fixed multiple issues that broke grouper. Now calling select with -- to 
indicate end of options. Fixed the issue where the group being added to was 
getting added to itself.

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

Modified: brlcad/branches/eab/src/tclscripts/mged/grouper.tcl
===================================================================
--- brlcad/branches/eab/src/tclscripts/mged/grouper.tcl 2015-06-17 14:50:41 UTC 
(rev 65350)
+++ brlcad/branches/eab/src/tclscripts/mged/grouper.tcl 2015-06-17 14:51:34 UTC 
(rev 65351)
@@ -55,18 +55,31 @@
     set size_orig ""
     set ae_orig ""
 
+
+    proc getTreeMembers {_comb} {
+       if {![exists $_comb]} {
+           return ""
+       }
+
+       set i 0
+
+       set tlist {}
+       foreach item [regsub -all {/|/R} [lrange [split [tree -d 1 $_comb] 
"\n"] 1 end-1] ""] {
+           lappend tlist [lindex $item 1]
+           incr i
+       }
+
+       return $tlist
+    }
+
+
     proc remdup { GroupName } {
-       set ItemList [search $GroupName -maxdepth 1]
-       set ItemList [lrange $ItemList 1 end]
+       set ItemList [getTreeMembers $GroupName]
        set ItemList [lsort -unique $ItemList]
 
-       set found_tmp 0
-       while { !$found_tmp } {
-           set tmp_grp [expr rand()]
-           if { [search -name $tmp_grp] == "" } {
-               set found_tmp 1
-           }
-       }
+       make_name -s 0
+       set tmp_grp [make_name tmp_group]
+
        eval g $tmp_grp $ItemList
        kill $GroupName
        mv $tmp_grp $GroupName
@@ -99,11 +112,19 @@
        if { $dimX > 0 } {
            # Rectangle was created left-to-right. Select only
            # objects completely in the rectangle.
-           set objs [select $posX $posY $dimX $dimY]
+#          set objs [select $posX $posY $dimX $dimY]
+           if {[catch {select -- $posX $posY $dimX $dimY} objs]} {
+               puts $objs
+               return "no_result"
+           }
        } else {
            # Rectangle was created right-to-left. Select everything
            # completely and partly in the rectangle.
-           set objs [select -p $posX $posY $dimX $dimY]
+#          set objs [select -p $posX $posY $dimX $dimY]
+           if {[catch {select -p -- $posX $posY $dimX $dimY} objs]} {
+               puts $objs
+               return "no_result"
+           }
        }
 
        if { $objs == "" } {
@@ -144,27 +165,15 @@
        set size_orig [size]
        set ae_orig [ae]
 
-       # 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
-           }
+       if {[exists $::Grouper::GroupNameGlobal]} {
+           erase $::Grouper::GroupNameGlobal
        }
+       set ::Grouper::objs [::Grouper::getObjInRectangle]
 
-       # Wait for the group to be erased from the display before we continue
-       vwait ::Grouper::erase_status
-
-       after 1 {set ::Grouper::objs [::Grouper::getObjInRectangle]}
-
-       puts stdout "Selection running ..."
-       vwait ::Grouper::objs
-
        if { $objs == "invalid_selection" } {
            puts stdout "Invalid selection (zero area selection box)."
            # highlight in yellow current group
-           if { [search -name $GroupName] != "" } {
+           if {[exists $GroupName]} {
                e -C255/255/0 $GroupName
                center $center_orig
                size $size_orig
@@ -176,7 +185,7 @@
        if { $objs == "no_result" } {
            puts stdout "Nothing selected."
            # highlight in yellow current group
-           if { [search -name $GroupName] != "" } {
+           if {[exists $GroupName]} {
                e -C255/255/0 $GroupName
                center $center_orig
                size $size_orig
@@ -188,34 +197,36 @@
        set objs [lsort -unique $objs]
        set tot_obj_in_rect [llength $objs]
 
-       if { [search -name $GroupName] == "" } {
+       if {![exists $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]
+           set grp_obj_list_before [getTreeMembers $GroupName]
+           set grp_obj_list_len_before [llength $grp_obj_list_before]
        }
 
        if { $Boolean == "+" } {
            foreach obj $objs {
-               g $GroupName $obj
+               #puts "Adding $obj to $GroupName ..."
+               catch {g $GroupName $obj}
            }
        } else {
            foreach obj $objs {
-               catch {rm $GroupName $obj} tmp_msg
+               #puts "Removing $obj from $GroupName ..."
+               catch {rm $GroupName $obj}
            }
        }
 
-       if { ([search -name $GroupName] != "") && ($Boolean == "+") } {
+       if {[exists $GroupName] && $Boolean == "+"} {
            remdup $GroupName
        }
 
-       if { [search -name $GroupName] == "" } {
+       if {![exists $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]
+           set grp_obj_list_after [getTreeMembers $GroupName]
+           set grp_obj_list_len_after [llength $grp_obj_list_after]
        }
 
        if { $grp_obj_list_len_after > $grp_obj_list_len_before } {
@@ -258,7 +269,7 @@
        }
 
        # highlight in yellow current group
-       if { [search -name $GroupName] != "" } {
+       if {[exists $GroupName]} {
            e -C255/255/0 $GroupName
            center $center_orig
            size $size_orig
@@ -352,7 +363,7 @@
     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] != "" } {
+    if {[exists $GroupName]} {
        e -C255/255/0 $GroupName
        center $::Grouper::center_orig
        size $::Grouper::size_orig
@@ -385,7 +396,7 @@
     bind $mged_gui($id,active_dm) <ButtonRelease-2> ""
 
     # remove yellow highlights from the display
-    if { [search -name $::Grouper::GroupNameGlobal] != "" } {
+    if {[exists $::Grouper::GroupNameGlobal]} {
        erase $::Grouper::GroupNameGlobal
     }
     set ::Grouper::GrouperRunning 0

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


------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to