Thread: [brlcad-commits] SF.net SVN: brlcad:[34089] brlcad/trunk/src/tclscripts/archer/ArcherCore. tcl
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <bo...@us...> - 2009-03-26 19:52:42
|
Revision: 34089 http://brlcad.svn.sourceforge.net/brlcad/?rev=34089&view=rev Author: bob1961 Date: 2009-03-26 19:52:37 +0000 (Thu, 26 Mar 2009) Log Message: ----------- Minor cleanup. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-03-26 19:52:21 UTC (rev 34088) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-03-26 19:52:37 UTC (rev 34089) @@ -4443,20 +4443,16 @@ -text $text } {} - set hbc [$itk_component($name1\L) cget -background] - itk_component add $name1\F { ::frame $parent.$name2\F \ -relief sunken \ -bd 0 } {} - set listHeight [expr [llength $listOfChoices] * 19] itk_component add $name1\CB { ::ttk::combobox $itk_component($name1\F).$name2\CB \ -state readonly \ -textvariable [::itcl::scope $varName] \ - -height $listHeight \ -values $listOfChoices } {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2009-03-30 04:19:38
|
Revision: 34104 http://brlcad.svn.sourceforge.net/brlcad/?rev=34104&view=rev Author: brlcad Date: 2009-03-30 04:19:24 +0000 (Mon, 30 Mar 2009) Log Message: ----------- try catching the error in case we're using a system iwidgets that doesn't have bob's patch for referencing the unitialized _ret var in panedwindow Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-03-29 19:32:27 UTC (rev 34103) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-03-30 04:19:24 UTC (rev 34104) @@ -1982,7 +1982,9 @@ return } - set fractions [$itk_component(hpane) fraction] + if {[catch {$itk_component(hpane) fraction} fractions]} { + return + } if {[llength $fractions] == 2} { set mHPaneFraction1 [lindex $fractions 0] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-04-29 20:10:49
|
Revision: 34365 http://brlcad.svn.sourceforge.net/brlcad/?rev=34365&view=rev Author: bob1961 Date: 2009-04-29 20:10:33 +0000 (Wed, 29 Apr 2009) Log Message: ----------- Catch calls to toggleTreePath to so that mRestoringTree gets set back to 0. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-04-29 18:05:15 UTC (rev 34364) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-04-29 20:10:33 UTC (rev 34365) @@ -2313,14 +2313,18 @@ if {$restore == 1} { set mRestoringTree 1 - # set the open state of nodes - foreach path $paths { - toggleTreePath $path + + catch { + # set the open state of nodes + foreach path $paths { + toggleTreePath $path + } + + if {$selNodePath != ""} { + toggleTreePath $selNodePath + } } - if {$selNodePath != ""} { - toggleTreePath $selNodePath - } set mRestoringTree 0 } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-05-11 17:14:46
|
Revision: 34490 http://brlcad.svn.sourceforge.net/brlcad/?rev=34490&view=rev Author: bob1961 Date: 2009-05-11 17:14:43 +0000 (Mon, 11 May 2009) Log Message: ----------- Modify ArcherCore::loadMenu to select snode. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-05-11 15:17:58 UTC (rev 34489) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-05-11 17:14:43 UTC (rev 34490) @@ -2538,14 +2538,8 @@ set mRenderMode 2 } - set mPrevSelectedObjPath $mSelectedObjPath - set mPrevSelectedObj $mSelectedObj - set mSelectedObjPath $node - set mSelectedObj [$itk_component(tree) query -text $element] + $itk_component(tree) toggle $snode - $itk_component(tree) selection clear - $itk_component(tree) selection set $snode - if {$nodeType == "leaf"} { $menu add radiobutton -label "Wireframe" \ -indicatoron 1 -value 0 -variable [::itcl::scope mRenderMode] \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-06-05 20:45:17
|
Revision: 34679 http://brlcad.svn.sourceforge.net/brlcad/?rev=34679&view=rev Author: bob1961 Date: 2009-06-05 20:44:43 +0000 (Fri, 05 Jun 2009) Log Message: ----------- Bringing up the menu shouldn't toggle (i.e. expand/collapse) the tree. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-06-05 20:22:58 UTC (rev 34678) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-06-05 20:44:43 UTC (rev 34679) @@ -2541,8 +2541,6 @@ set mRenderMode 2 } - $itk_component(tree) toggle $snode - if {$nodeType == "leaf"} { $menu add radiobutton -label "Wireframe" \ -indicatoron 1 -value 0 -variable [::itcl::scope mRenderMode] \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-07-28 20:46:47
|
Revision: 35350 http://brlcad.svn.sourceforge.net/brlcad/?rev=35350&view=rev Author: bob1961 Date: 2009-07-28 20:46:34 +0000 (Tue, 28 Jul 2009) Log Message: ----------- Tweak getNodeChildren's regsub invocation to better remove matrices. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-07-28 20:46:06 UTC (rev 35349) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-07-28 20:46:34 UTC (rev 35350) @@ -1988,7 +1988,7 @@ } # first remove any matrices - regsub -all {\{[0-9]+[^\}]+[0-9]+\}} $tlist "" tlist + regsub -all -- {\{-?[0-9]+[^\}]+-?[0-9]+\}} $tlist "" tlist # remove all other unwanted stuff regsub -all {^[lun!GXN^-] |\{[lun!GXN^-]|\}} $tlist "" tlist This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-07-29 14:11:23
|
Revision: 35367 http://brlcad.svn.sourceforge.net/brlcad/?rev=35367&view=rev Author: bob1961 Date: 2009-07-29 14:11:08 +0000 (Wed, 29 Jul 2009) Log Message: ----------- Tweak dbExpand in ArcherCore. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-07-29 11:18:09 UTC (rev 35366) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-07-29 14:11:08 UTC (rev 35367) @@ -3415,8 +3415,12 @@ # find indices of matching children set mi [lsearch -all $searchType $lsItems $child] - foreach i $mi { - lappend tobjects [lindex $lsItems $i] + if {[llength $mi] == 0} { + lappend tobjects $obj + } else { + foreach i $mi { + lappend tobjects [lindex $lsItems $i] + } } } else { set path [file dirname $obj] @@ -3433,8 +3437,12 @@ # find indices of matching children set mi [lsearch -all $searchType $children $child] - foreach i $mi { - lappend tobjects "/$path/[lindex $children $i]" + if {[llength $mi] == 0} { + lappend tobjects $obj + } else { + foreach i $mi { + lappend tobjects "/$path/[lindex $children $i]" + } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-08-20 16:56:42
|
Revision: 35665 http://brlcad.svn.sourceforge.net/brlcad/?rev=35665&view=rev Author: bob1961 Date: 2009-08-20 16:56:35 +0000 (Thu, 20 Aug 2009) Log Message: ----------- Erase now takes options, so include them. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-08-20 16:40:48 UTC (rev 35664) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-08-20 16:56:35 UTC (rev 35665) @@ -3543,7 +3543,7 @@ lappend tobjects [regsub {^/} $obj ""] } - if {[catch {eval gedCmd erase $tobjects} ret]} { + if {[catch {eval gedCmd erase $options $tobjects} ret]} { gedCmd configure -primitiveLabels {} refreshTree SetNormalCursor $this This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-11-13 17:30:52
|
Revision: 36476 http://brlcad.svn.sourceforge.net/brlcad/?rev=36476&view=rev Author: bob1961 Date: 2009-11-13 17:30:45 +0000 (Fri, 13 Nov 2009) Log Message: ----------- Component pick now prints a string to the command window instead of popping up another window. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-11-13 17:28:49 UTC (rev 36475) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-11-13 17:30:45 UTC (rev 36476) @@ -542,6 +542,7 @@ method initCenterMode {} method initCompPick {} + method mrayCallback_pick {_start _target _partitions} method initMeasure {} method beginMeasure {_dm _x _y} @@ -1672,9 +1673,20 @@ return } + $itk_component(ged) add_mouse_ray_callback [::itcl::code $this mrayCallback_pick] $itk_component(ged) init_comp_pick } +::itcl::body ArcherCore::mrayCallback_pick {_start _target _partitions} { + set partition [lindex $_partitions 0] + if {$partition == {}} { + $itk_component(cmd) putstring "Missed!" + } else { + set region [bu_get_value_by_keyword "region" $partition] + $itk_component(cmd) putstring "$region" + } +} + ::itcl::body ArcherCore::initMeasure {} { if {![info exists itk_component(ged)]} { return This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-11-13 18:13:13
|
Revision: 36482 http://brlcad.svn.sourceforge.net/brlcad/?rev=36482&view=rev Author: bob1961 Date: 2009-11-13 18:13:06 +0000 (Fri, 13 Nov 2009) Log Message: ----------- Added a component erase mode. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-11-13 18:11:02 UTC (rev 36481) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-11-13 18:13:06 UTC (rev 36482) @@ -64,11 +64,12 @@ common SCALE_MODE 2 common CENTER_MODE 3 common COMP_PICK_MODE 4 - common MEASURE_MODE 5 - common OBJECT_ROTATE_MODE 6 - common OBJECT_TRANSLATE_MODE 7 - common OBJECT_SCALE_MODE 8 - common OBJECT_CENTER_MODE 9 + common COMP_ERASE_MODE 5 + common MEASURE_MODE 6 + common OBJECT_ROTATE_MODE 7 + common OBJECT_TRANSLATE_MODE 8 + common OBJECT_SCALE_MODE 9 + common OBJECT_CENTER_MODE 10 common OBJ_EDIT_VIEW_MODE 0 common OBJ_ATTR_VIEW_MODE 1 @@ -541,7 +542,9 @@ method initCenterMode {} + method initCompErase {} method initCompPick {} + method mrayCallback_erase {_start _target _partitions} method mrayCallback_pick {_start _target _partitions} method initMeasure {} @@ -1571,6 +1574,13 @@ -value $COMP_PICK_MODE \ -command [::itcl::code $this initCompPick] \ -state disabled + $itk_component(primaryToolbar) add radiobutton cerase \ + -balloonstr "Component Erase" \ + -helpstr "Component Erase" \ + -variable [::itcl::scope mDefaultBindingMode] \ + -value $COMP_ERASE_MODE \ + -command [::itcl::code $this initCompErase] \ + -state disabled $itk_component(primaryToolbar) add radiobutton measure \ -balloonstr "Measuring Tool" \ -helpstr "Measuring Tool" \ @@ -1584,6 +1594,7 @@ $itk_component(primaryToolbar) itemconfigure scale -state disabled $itk_component(primaryToolbar) itemconfigure center -state disabled $itk_component(primaryToolbar) itemconfigure cpick -state disabled + $itk_component(primaryToolbar) itemconfigure cerase -state disabled $itk_component(primaryToolbar) itemconfigure measure -state disabled eval pack configure [pack slaves $itk_component(primaryToolbar)] -padx 2 @@ -1668,15 +1679,49 @@ $itk_component(ged) init_view_center } +::itcl::body ArcherCore::initCompErase {} { + if {![info exists itk_component(ged)]} { + return + } + + $itk_component(ged) clear_mouse_ray_callback_list + $itk_component(ged) add_mouse_ray_callback [::itcl::code $this mrayCallback_erase] + $itk_component(ged) init_comp_pick +} + ::itcl::body ArcherCore::initCompPick {} { if {![info exists itk_component(ged)]} { return } + $itk_component(ged) clear_mouse_ray_callback_list $itk_component(ged) add_mouse_ray_callback [::itcl::code $this mrayCallback_pick] $itk_component(ged) init_comp_pick } +::itcl::body ArcherCore::mrayCallback_erase {_start _target _partitions} { + if {$_partitions == ""} { + return + } + + set partition [lindex $_partitions 0] + + if {[catch {bu_get_value_by_keyword in $partition} in]} { + puts "Partition does not contain an \"in\"" + puts "$in" + return + } + + if {[catch {bu_get_value_by_keyword path $in} path]} { + puts "Partition does not contain an \"in\" path" + puts "[subst $[subst pt_$i]]" + return + } + + erase $path + $itk_component(cmd) putstring "erase $path" +} + ::itcl::body ArcherCore::mrayCallback_pick {_start _target _partitions} { set partition [lindex $_partitions 0] if {$partition == {}} { @@ -1757,6 +1802,7 @@ $itk_component(primaryToolbar) itemconfigure scale -state normal $itk_component(primaryToolbar) itemconfigure center -state normal $itk_component(primaryToolbar) itemconfigure cpick -state normal + $itk_component(primaryToolbar) itemconfigure cerase -state normal $itk_component(primaryToolbar) itemconfigure measure -state normal $itk_component(ged) init_view_bindings @@ -2954,6 +3000,9 @@ $itk_component(primaryToolbar) itemconfigure cpick \ -image [image create photo \ -file [file join $dir compSelect.png]] + $itk_component(primaryToolbar) itemconfigure cerase \ + -image [image create photo \ + -file [file join $dir compErase.png]] $itk_component(primaryToolbar) itemconfigure measure \ -image [image create photo \ -file [file join $dir measure.png]] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-11-18 21:01:58
|
Revision: 36542 http://brlcad.svn.sourceforge.net/brlcad/?rev=36542&view=rev Author: bob1961 Date: 2009-11-18 21:01:50 +0000 (Wed, 18 Nov 2009) Log Message: ----------- Added a public putString method. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-11-18 20:31:27 UTC (rev 36541) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-11-18 21:01:50 UTC (rev 36542) @@ -126,6 +126,7 @@ method setSave {} method getLastSelectedDir {} method refreshDisplay {} + method putString {_str} # Commands exposed to the user via the command line. # More to be added later... @@ -3280,6 +3281,10 @@ } } +::itcl::body ArcherCore::putString {_str} { + $itk_component(cmd) putstring $_str +} + ::itcl::body ArcherCore::mouseRay {_dm _x _y} { set target [$_dm screen2model $_x $_y] set view [$_dm screen2view $_x $_y] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2009-11-24 17:32:54
|
Revision: 36614 http://brlcad.svn.sourceforge.net/brlcad/?rev=36614&view=rev Author: bob1961 Date: 2009-11-24 17:32:42 +0000 (Tue, 24 Nov 2009) Log Message: ----------- Modify mrayCallback_cvo to do a vslew if no objects were hit (i.e. same as original view center op). Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-11-24 17:30:42 UTC (rev 36613) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2009-11-24 17:32:42 UTC (rev 36614) @@ -1724,6 +1724,8 @@ ::itcl::body ArcherCore::mrayCallback_cvo {_start _target _partitions} { if {$_partitions == ""} { + set rpos [$itk_component(ged) lastMouseRayPos] + eval $itk_component(ged) vslew $rpos return } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-01-11 20:49:39
|
Revision: 37227 http://brlcad.svn.sourceforge.net/brlcad/?rev=37227&view=rev Author: bob1961 Date: 2010-01-11 20:49:32 +0000 (Mon, 11 Jan 2010) Log Message: ----------- Added setStatusString, colorMenuStatusCB, transparencyMenuStatusCB, initViewMeasure and endViewMeasure methods. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-01-11 20:45:31 UTC (rev 37226) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-01-11 20:49:32 UTC (rev 37227) @@ -127,6 +127,7 @@ method getLastSelectedDir {} method refreshDisplay {} method putString {_str} + method setStatusString {_str} # Commands exposed to the user via the command line. # More to be added later... @@ -276,6 +277,8 @@ variable mLighting 1 variable mRenderMode -1 variable mActivePane + variable mActivePaneName + variable mCurrentPaneName "" variable mStatusStr "" variable mDbType "" variable mDbReadOnly 0 @@ -433,9 +436,8 @@ variable mDbUnits "" variable mDbTitle "" - variable mCurrentDisplay "" - variable mMouseRayCallbacks "" + variable mLastTags "" method handleMoreArgs {args} @@ -445,7 +447,11 @@ method redrawObj {_obj {_wflag 1}} + method colorMenuStatusCB {_w} method menuStatusCB {_w} + method menuStatusCB_junk {_w} + method transparencyMenuStatusCB {_w} + method updateTheme {} method updateSaveMode {} method createTargetCopy {} @@ -477,9 +483,6 @@ variable mImages - variable mMeasureStart - variable mMeasureEnd - # init functions method initTree {} method initGed {} @@ -552,10 +555,8 @@ method mrayCallback_erase {_start _target _partitions} method mrayCallback_pick {_start _target _partitions} - method initMeasure {} - method beginMeasure {_dm _x _y} - method handleMeasure {_dm _x _y} - method endMeasure {_dm} + method initViewMeasure {} + method endViewMeasure {_mstring} method initDefaultBindings {{_comp ""}} method initBrlcadBindings {} @@ -1270,6 +1271,7 @@ } bind $itk_component(canvasF) <Configure> [::itcl::code $this updateRtControl] + setActivePane ur } ::itcl::body ArcherCore::closeMged {} { @@ -1598,7 +1600,7 @@ -helpstr "Measuring Tool" \ -variable [::itcl::scope mDefaultBindingMode] \ -value $MEASURE_MODE \ - -command [::itcl::code $this initMeasure] \ + -command [::itcl::code $this initViewMeasure] \ -state disabled $itk_component(primaryToolbar) itemconfigure rotate -state disabled @@ -1732,14 +1734,14 @@ set partition [lindex $_partitions 0] if {[catch {bu_get_value_by_keyword in $partition} in]} { - puts "Partition does not contain an \"in\"" - puts "$in" + putString "Partition does not contain an \"in\"" + putString "$in" return } if {[catch {bu_get_value_by_keyword point $in} point]} { - puts "Partition does not contain an \"in\" point" - puts "$point" + putString "Partition does not contain an \"in\" point" + putString "$point" return } @@ -1755,96 +1757,54 @@ set partition [lindex $_partitions 0] if {[catch {bu_get_value_by_keyword in $partition} in]} { - puts "Partition does not contain an \"in\"" - puts "$in" + putString "Partition does not contain an \"in\"" + putString "$in" return } if {[catch {bu_get_value_by_keyword path $in} path]} { - puts "Partition does not contain an \"in\" path" - puts "[subst $[subst pt_$i]]" + putString "Partition does not contain an \"in\" path" + putString "[subst $[subst pt_$i]]" return } erase $path - $itk_component(cmd) putstring "erase $path" + putString "erase $path" + set mStatusStr "erase $path" } ::itcl::body ArcherCore::mrayCallback_pick {_start _target _partitions} { set partition [lindex $_partitions 0] if {$partition == {}} { - $itk_component(cmd) putstring "Missed!" + putString "Missed!" + set mStatusStr "Missed!" } else { set region [bu_get_value_by_keyword "region" $partition] - $itk_component(cmd) putstring "$region" + putString "$region" + set mStatusStr "$region" } } -::itcl::body ArcherCore::initMeasure {} { +::itcl::body ArcherCore::initViewMeasure {} { if {![info exists itk_component(ged)]} { return } + $itk_component(ged) clear_view_measure_callback_list + $itk_component(ged) add_view_measure_callback [::itcl::code $this endViewMeasure] $itk_component(ged) init_view_measure } -::itcl::body ArcherCore::beginMeasure {_dm _x _y} { - if {$mMeasuringStickMode == 0} { - # Draw on the front face of the viewing cube - set view [$_dm screen2view $_x $_y] - set bounds [$_dm bounds] - set vZ [expr {[lindex $bounds 4] / -2048.0}] - set mMeasureStart [$_dm v2mPoint [lindex $view 0] [lindex $view 1] $vZ] - } else { - # Draw on the center of the viewing cube (i.e. view Z is 0) - set mMeasureStart [$_dm screen2model $_x $_y] - } - - # start receiving motion events - set win [$_dm component dm] - bind $win <Motion> "[::itcl::code $this handleMeasure $_dm %x %y]; break" - - set mMeasuringStickColorVDraw [getVDrawColor $mMeasuringStickColor] +::itcl::body ArcherCore::endViewMeasure {_mstring} { + putString $_mstring + set mStatusStr $_mstring } -::itcl::body ArcherCore::handleMeasure {_dm _x _y} { - catch {gedCmd vdraw vlist delete $MEASURING_STICK} - - if {$mMeasuringStickMode == 0} { - # Draw on the front face of the viewing cube - set view [$_dm screen2view $_x $_y] - set bounds [$_dm bounds] - set vZ [expr {[lindex $bounds 4] / -2048.0}] - set mMeasureEnd [$_dm v2mPoint [lindex $view 0] [lindex $view 1] $vZ] - } else { - # Draw on the center of the viewing cube (i.e. view Z is 0) - set mMeasureEnd [$_dm screen2model $_x $_y] +::itcl::body ArcherCore::initDefaultBindings {{_comp ""}} { + if {![info exists itk_component(ged)]} { + return } - set move 0 - set draw 1 - gedCmd vdraw open $MEASURING_STICK - gedCmd vdraw params color $mMeasuringStickColorVDraw - eval gedCmd vdraw write next $move $mMeasureStart - eval gedCmd vdraw write next $draw $mMeasureEnd - gedCmd vdraw send -} - -::itcl::body ArcherCore::endMeasure {_dm} { - $_dm idle_mode - - catch {gedCmd vdraw vlist delete $MEASURING_STICK} - gedCmd erase _VDRW$MEASURING_STICK - - set diff [vsub2 $mMeasureEnd $mMeasureStart] - set delta [expr {[magnitude $diff] * [gedCmd base2local]}] - tk_messageBox -title "Measured Distance" \ - -icon info \ - -message "Measured distance: $delta [gedCmd units -s]" -} - - -::itcl::body ArcherCore::initDefaultBindings {{_comp ""}} { $itk_component(primaryToolbar) itemconfigure rotate -state normal $itk_component(primaryToolbar) itemconfigure translate -state normal $itk_component(primaryToolbar) itemconfigure scale -state normal @@ -1855,6 +1815,10 @@ $itk_component(primaryToolbar) itemconfigure measure -state normal $itk_component(ged) init_view_bindings + + # Initialize rotate mode + set mDefaultBindingMode $ROTATE_MODE + beginViewRotate } ::itcl::body ArcherCore::initBrlcadBindings {} { @@ -1862,6 +1826,15 @@ return } + $itk_component(primaryToolbar) itemconfigure rotate -state disabled + $itk_component(primaryToolbar) itemconfigure translate -state disabled + $itk_component(primaryToolbar) itemconfigure scale -state disabled + $itk_component(primaryToolbar) itemconfigure center -state disabled + $itk_component(primaryToolbar) itemconfigure centervo -state disabled + $itk_component(primaryToolbar) itemconfigure cpick -state disabled + $itk_component(primaryToolbar) itemconfigure cerase -state disabled + $itk_component(primaryToolbar) itemconfigure measure -state disabled + $itk_component(ged) init_view_bindings brlcad } @@ -1916,6 +1889,7 @@ ::itcl::body ArcherCore::backgroundColor {r g b} { + set mCurrentPaneName "" set mBackground [list $r $g $b] if {![info exists itk_component(ged)]} { @@ -2142,6 +2116,9 @@ set plnode {} } + $itk_component(ged) refresh_off + + catch { if {[catch {gedCmd attr get \ $tnode displayColor} displayColor]} { switch -exact -- $state { @@ -2161,6 +2138,10 @@ gedCmd configure -primitiveLabels $plnode gedCmd E $node } + "4" { + gedCmd configure -primitiveLabels $plnode + gedCmd draw -h $node + } "-1" { gedCmd configure -primitiveLabels {} gedCmd erase $node @@ -2187,12 +2168,20 @@ gedCmd configure -primitiveLabels $plnode gedCmd E -C$displayColor $node } + "4" { + gedCmd configure -primitiveLabels $plnode + gedCmd draw -h -C$displayColor $node + } "-1" { gedCmd configure -primitiveLabels {} gedCmd erase $node } } } + } + + $itk_component(ged) refresh_on + $itk_component(ged) refresh_all # Turn ground plane back on if it was on before the draw if {$saveGroundPlane} { @@ -2286,18 +2275,29 @@ } } -::itcl::body ArcherCore::setActivePane {pane} { - $itk_component(ged) pane $pane - updateActivePane $pane +::itcl::body ArcherCore::setActivePane {_pane} { + $itk_component(ged) pane $_pane } ::itcl::body ArcherCore::updateActivePane {args} { # update active pane radiobuttons switch -- $args { - ul {set mActivePane 0} - ur {set mActivePane 1} - ll {set mActivePane 2} - lr {set mActivePane 3} + ul { + set mActivePane 0 + set mActivePaneName ul + } + ur { + set mActivePane 1 + set mActivePaneName ur + } + ll { + set mActivePane 2 + set mActivePaneName ll + } + lr { + set mActivePane 3 + set mActivePaneName lr + } } set mShowModelAxes [gedCmd cget -modelAxesEnable] @@ -2327,6 +2327,7 @@ return } + set mCurrentPaneName "" gedCmd autoview_all gedCmd default_views } @@ -2336,7 +2337,14 @@ return } - gedCmd autoview_all + if {$mCurrentPaneName == ""} { + set pane $mActivePaneName + } else { + set pane $mCurrentPaneName + } + set mCurrentPaneName "" + + $itk_component(ged) pane_autoview $pane } ::itcl::body ArcherCore::doViewCenter {} { @@ -2344,32 +2352,37 @@ return } - if {$mCurrentDisplay == ""} { - set dm gedCmd + if {$mCurrentPaneName == ""} { + set pane $mActivePaneName } else { - set dm $mCurrentDisplay + set pane $mCurrentPaneName } + set mCurrentPaneName "" - set center [$dm center] + set center [$itk_component(ged) pane_center $pane] set mCenterX [lindex $center 0] set mCenterY [lindex $center 1] set mCenterZ [lindex $center 2] set mDbUnits [gedCmd units -s] $itk_component(centerDialog) center [namespace tail $this] + ::update if {[$itk_component(centerDialog) activate]} { - $dm center $mCenterX $mCenterY $mCenterZ + $itk_component(ged) pane_center $pane $mCenterX $mCenterY $mCenterZ } } -::itcl::body ArcherCore::doAe {az el} { - if {$mCurrentDisplay == ""} { - gedCmd ae $az $el +::itcl::body ArcherCore::doAe {_az _el} { + if {$mCurrentPaneName == ""} { + set pane $mActivePaneName } else { - $mCurrentDisplay ae $az $el + set pane $mCurrentPaneName } + set mCurrentPaneName "" - addHistory "ae $az $el" + $itk_component(ged) pane_ae $pane $_az $_el + + addHistory "ae $_az $_el" } ::itcl::body ArcherCore::showViewAxes {} { @@ -2535,6 +2548,7 @@ } ::itcl::body ArcherCore::selectNode {tags {rflag 1}} { + set mLastTags $tags set tags [split $tags ":"] if {[llength $tags] > 1} { set element [lindex $tags 1] @@ -2570,15 +2584,23 @@ # label the object if it's being drawn set mRenderMode [gedCmd how $node] - if {$mShowPrimitiveLabels && 0 <= $mRenderMode} { - gedCmd configure -primitiveLabels $node - } else { - gedCmd configure -primitiveLabels {} + if {$mShowPrimitiveLabels} { + if {0 <= $mRenderMode} { + gedCmd configure -primitiveLabels $node + } else { + gedCmd configure -primitiveLabels {} + } } - if {$rflag} { - gedCmd refresh - } +# if {$mShowPrimitiveLabels && 0 <= $mRenderMode} { +# gedCmd configure -primitiveLabels $node +# } else { +# gedCmd configure -primitiveLabels {} +# } +# +# if {$rflag} { +# gedCmd refresh +# } set mPrevSelectedObjPath $mSelectedObjPath set mPrevSelectedObj $mSelectedObj @@ -2592,6 +2614,7 @@ } ::itcl::body ArcherCore::dblClick {tags} { + set mLastTags $tags set element [split $tags ":"] if {[llength $element] > 1} { set element [lindex $element 1] @@ -2651,12 +2674,15 @@ -indicatoron 1 -value 0 -variable [::itcl::scope mRenderMode] \ -command [::itcl::code $this render $node 0 1 1] - $menu add radiobutton -label "Shaded (Mode 1)" \ + $menu add radiobutton -label "Shaded" \ -indicatoron 1 -value 1 -variable [::itcl::scope mRenderMode] \ -command [::itcl::code $this render $node 1 1 1] - $menu add radiobutton -label "Shaded (Mode 2)" \ +# $menu add radiobutton -label "Shaded (Mode 2)" \ +# -indicatoron 1 -value 2 -variable [::itcl::scope mRenderMode] \ +# -command [::itcl::code $this render $node 2 1 1] + $menu add radiobutton -label "Hidden Line)" \ -indicatoron 1 -value 2 -variable [::itcl::scope mRenderMode] \ - -command [::itcl::code $this render $node 2 1 1] + -command [::itcl::code $this render $node 4 1 1] if {$mEnableBigE} { $menu add radiobutton \ @@ -2674,10 +2700,12 @@ $menu add command -label "Wireframe" \ -command [::itcl::code $this render $node 0 1 1] - $menu add command -label "Shaded (Mode 1)" \ + $menu add command -label "Shaded" \ -command [::itcl::code $this render $node 1 1 1] - $menu add command -label "Shaded (Mode 2)" \ - -command [::itcl::code $this render $node 2 1 1] +# $menu add command -label "Shaded (Mode 2)" \ +# -command [::itcl::code $this render $node 2 1 1] + $menu add command -label "Hidden Line" \ + -command [::itcl::code $this render $node 4 1 1] if {$mEnableBigE} { $menu add command \ @@ -2772,11 +2800,17 @@ -command [::itcl::code $this setTransparency $node 0.03] $trans add command -label "99%" \ -command [::itcl::code $this setTransparency $node 0.01] + + # set up bindings for transparency status + bind $trans <<MenuSelect>> \ + [::itcl::code $this transparencyMenuStatusCB %W] } # set up bindings for status bind $menu <<MenuSelect>> \ [::itcl::code $this menuStatusCB %W] + bind $color <<MenuSelect>> \ + [::itcl::code $this colorMenuStatusCB %W] } # ------------------------------------------------------------ @@ -2863,8 +2897,6 @@ if {$mBindingMode == 0} { initDefaultBindings $itk_component(ged) - set mDefaultBindingMode $ROTATE_MODE - beginViewRotate } SetNormalCursor $this } @@ -2891,6 +2923,7 @@ } $itk_component(saveDialog) center [namespace tail $this] + ::update if {[$itk_component(saveDialog) activate]} { saveDb return 1 @@ -2899,14 +2932,83 @@ return 0 } -::itcl::body ArcherCore::menuStatusCB {w} { +::itcl::body ArcherCore::colorMenuStatusCB {_w} { if {$mDoStatus} { # entry might not support -label (i.e. tearoffs) - if {[catch {$w entrycget active -label} op]} { + if {[catch {$_w entrycget active -label} op]} { set op "" } switch -- $op { + "Red" { + set mStatusStr "Set this object's color to red" + } + "Orange" { + set mStatusStr "Set this object's color to orange" + } + "Yellow" { + set mStatusStr "Set this object's color to yellow" + } + "Green" { + set mStatusStr "Set this object's color to green" + } + "Blue" { + set mStatusStr "Set this object's color to blue" + } + "Indigo" { + set mStatusStr "Set this object's color to indigo" + } + "Violet" { + set mStatusStr "Set this object's color to violet" + } + "Default" { + set mStatusStr "Set this object's color to the default color" + } + "Select..." { + set mStatusStr "Set this object's color to the selected color" + } + default { + set mStatusStr "" + } + } + } +} + +::itcl::body ArcherCore::menuStatusCB {_w} { + if {$mDoStatus} { + # entry might not support -label (i.e. tearoffs) + if {[catch {$_w entrycget active -label} op]} { + set op "" + } + + switch -- $op { + "Wireframe" { + set mStatusStr "Draw object as wireframe" + } + "Shaded" { + set mStatusStr "Draw object as shaded if a bot or polysolid (unevalutated)" + } + "Hidden Line" { + set mStatusStr "Draw object as hidden line" + } + "Off" { + set mStatusStr "Erase object" + } + default { + set mStatusStr "" + } + } + } +} + +::itcl::body ArcherCore::menuStatusCB_junk {_w} { + if {$mDoStatus} { + # entry might not support -label (i.e. tearoffs) + if {[catch {$_w entrycget active -label} op]} { + set op "" + } + + switch -- $op { "Open..." { set mStatusStr "Open a target description" } @@ -2997,11 +3099,11 @@ "Wireframe" { set mStatusStr "Draw object as wireframe" } - "Shaded (Mode 1)" { + "Shaded" { set mStatusStr "Draw object as shaded if a bot or polysolid (unevalutated)" } - "Shaded (Mode 2)" { - set mStatusStr "Draw object as shaded (unevalutated)" + "Hidden Line" { + set mStatusStr "Draw object as hidden line" } "Off" { set mStatusStr "Erase object" @@ -3013,6 +3115,42 @@ } } +::itcl::body ArcherCore::transparencyMenuStatusCB {_w} { + if {$mDoStatus} { + # entry might not support -label (i.e. tearoffs) + if {[catch {$_w entrycget active -label} op]} { + set op "" + } + + switch -- $op { + "None" { + set mStatusStr "Set this object's transparency to 0%" + } + "80%" { + set mStatusStr "Set this object's transparency to 80%" + } + "85%" { + set mStatusStr "Set this object's transparency to 85%" + } + "90%" { + set mStatusStr "Set this object's transparency to 90%" + } + "95%" { + set mStatusStr "Set this object's transparency to 95%" + } + "97%" { + set mStatusStr "Set this object's transparency to 97%" + } + "99%" { + set mStatusStr "Set this object's transparency to 99%" + } + default { + set mStatusStr "" + } + } + } +} + ::itcl::body ArcherCore::updateTheme {} { set dir [file join $mImgDir Themes $mTheme] @@ -3217,7 +3355,12 @@ return } - redrawObj $mSelectedObjPath + if {!$mShowPrimitiveLabels} { + gedCmd configure -primitiveLabels {} + } + + selectNode $mLastTags +# redrawObj $mSelectedObjPath } ::itcl::body ArcherCore::showViewParams {} { @@ -3253,8 +3396,8 @@ return } - $itk_component(cmd) putstring "nirt -b" - $itk_component(cmd) putstring [$itk_component(ged) nirt -b] + putString "nirt -b" + putString [$itk_component(ged) nirt -b] } ::itcl::body ArcherCore::launchRtApp {app size} { @@ -3276,17 +3419,24 @@ } ::itcl::body ArcherCore::refreshDisplay {} { - if {$mCurrentDisplay == ""} { - gedCmd refresh + if {$mCurrentPaneName == ""} { + set pane $mActivePaneName } else { - $mCurrentDisplay refresh + set pane $mCurrentPaneName } + set mCurrentPaneName "" + + $itk_component(ged) pane_refresh $pane } ::itcl::body ArcherCore::putString {_str} { $itk_component(cmd) putstring $_str } +::itcl::body ArcherCore::setStatusString {_str} { + set mStatusStr $_str +} + ::itcl::body ArcherCore::mouseRay {_dm _x _y} { set target [$_dm screen2model $_x $_y] set view [$_dm screen2view $_x $_y] @@ -3366,7 +3516,7 @@ set ret 1 } \ $MEASURE_MODE { \ - initMeasure \ + initViewMeasure \ set ret 1 } @@ -4355,7 +4505,7 @@ mModelAxesTickMajorColor { $itk_component(ged) configure -modelAxesTickMajorColor $mModelAxesTickMajorColor } - mPrimitveLabelColor { + mPrimitiveLabelColor { $itk_component(ged) configure -primitiveLabelColor $mPrimitiveLabelColor } mScaleColor { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-01-29 22:51:28
|
Revision: 37497 http://brlcad.svn.sourceforge.net/brlcad/?rev=37497&view=rev Author: bob1961 Date: 2010-01-29 22:51:22 +0000 (Fri, 29 Jan 2010) Log Message: ----------- Fixed two misuses/typos of lsearch in the cmd method. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-01-29 22:48:06 UTC (rev 37496) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-01-29 22:51:22 UTC (rev 37497) @@ -2028,11 +2028,11 @@ function { if {[llength $args] == 3} { set subcmd [lindex $args 2] - if {[lsearch $subcmd $mArcherCoreCommands] == -1 && - [lsearch $subcmd $mUnwrappedDbCommands] == -1} { + if {[lsearch $mArcherCoreCommands $subcmd] == -1 && + [lsearch $mUnwrappedDbCommands $subcmd] == -1} { error "ArcherCore::cmd: unrecognized command - $subcmd" } else { - return + return $subcmd } } else { return [eval list $mArcherCoreCommands $mUnwrappedDbCommands] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-03-30 13:37:48
|
Revision: 38229 http://brlcad.svn.sourceforge.net/brlcad/?rev=38229&view=rev Author: bob1961 Date: 2010-03-30 13:37:39 +0000 (Tue, 30 Mar 2010) Log Message: ----------- Added the sed command. Modified the mrayCallback_pick method to select the picked item in the tree. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-03-30 13:31:09 UTC (rev 38228) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-03-30 13:37:39 UTC (rev 38229) @@ -224,6 +224,7 @@ method rmater {args} method rotate_arb_face {args} method search {args} + method sed {_prim} method shader {args} method shells {args} method tire {args} @@ -426,7 +427,7 @@ mv mvall nmg_collapse nmg_simplify \ ocenter orotate oscale otranslate p packTree prefix protate pscale ptranslate \ push put put_comb putmat pwd r rcodes red rfarb rm rmater \ - rotate_arb_face search shader shells tire title track \ + rotate_arb_face search sed shader shells tire title track \ unhide units unpackTree \ vmake wmater xpush Z zap } @@ -1788,9 +1789,16 @@ putString "Missed!" set mStatusStr "Missed!" } else { - set region [bu_get_value_by_keyword "region" $partition] - putString "$region" - set mStatusStr "$region" + set in [bu_get_value_by_keyword "in" $partition] + set path [bu_get_value_by_keyword "path" $in] +# $itk_component(tree) selectpath [regsub {^/} $path {}] + set leaf [file tail $path] + set paths [gedCmd search -name $leaf] + $itk_component(tree) selectpaths $paths + +# set region [bu_get_value_by_keyword "region" $partition] +# putString "$region" +# set mStatusStr "$region" } } @@ -4169,14 +4177,24 @@ } ::itcl::body ArcherCore::search {args} { - if {$args == {}} { + if {$args == {}} { return [gedCmd search] } else { return [eval gedCmd search $args] } } +::itcl::body ArcherCore::sed {_prim} { + if {$_prim == ""} { + return "Usage: sed prim" + } + set paths [gedCmd search -name $_prim] + $itk_component(tree) selectpaths $paths + +# $itk_component(tree) selectitem $_prim +} + ::itcl::body ArcherCore::shader {args} { eval gedWrapper shader 0 0 1 0 $args } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-04-07 16:34:39
|
Revision: 38366 http://brlcad.svn.sourceforge.net/brlcad/?rev=38366&view=rev Author: bob1961 Date: 2010-04-07 16:34:33 +0000 (Wed, 07 Apr 2010) Log Message: ----------- Using a new tree widget. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-07 16:21:26 UTC (rev 38365) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-07 16:34:33 UTC (rev 38366) @@ -498,11 +498,106 @@ variable mCenterY "" variable mCenterZ "" - variable mImages + # variables for the new tree + variable mImage_air "" + variable mImage_airInter "" + variable mImage_airSub "" + variable mImage_airUnion "" + variable mImage_comb "" + variable mImage_combInter "" + variable mImage_combSub "" + variable mImage_combUnion "" + variable mImage_region "" + variable mImage_regionInter "" + variable mImage_regionSub "" + variable mImage_regionUnion "" + variable mImage_arb8 "" + variable mImage_arb8Inter "" + variable mImage_arb8Sub "" + variable mImage_arb8Union "" + variable mImage_arbn "" + variable mImage_arbnInter "" + variable mImage_arbnSub "" + variable mImage_arbnUnion "" + variable mImage_ars "" + variable mImage_arsInter "" + variable mImage_arsSub "" + variable mImage_arsUnion "" + variable mImage_bot "" + variable mImage_botInter "" + variable mImage_botSub "" + variable mImage_botUnion "" + variable mImage_dsp "" + variable mImage_dspInter "" + variable mImage_dspSub "" + variable mImage_dspUnion "" + variable mImage_ehy "" + variable mImage_ehyInter "" + variable mImage_ehySub "" + variable mImage_ehyUnion "" + variable mImage_ell "" + variable mImage_ellInter "" + variable mImage_ellSub "" + variable mImage_ellUnion "" + variable mImage_epa "" + variable mImage_epaInter "" + variable mImage_epaSub "" + variable mImage_epaUnion "" + variable mImage_eto "" + variable mImage_etoInter "" + variable mImage_etoSub "" + variable mImage_etoUnion "" + variable mImage_extrude "" + variable mImage_extrudeInter "" + variable mImage_extrudeSub "" + variable mImage_extrudeUnion "" + variable mImage_half "" + variable mImage_halfInter "" + variable mImage_halfSub "" + variable mImage_halfUnion "" + variable mImage_hyp "" + variable mImage_hypInter "" + variable mImage_hypSub "" + variable mImage_hypUnion "" + variable mImage_nmg "" + variable mImage_nmgInter "" + variable mImage_nmgSub "" + variable mImage_nmgUnion "" + variable mImage_pipe "" + variable mImage_pipeInter "" + variable mImage_pipeSub "" + variable mImage_pipeUnion "" + variable mImage_rhc "" + variable mImage_rhcInter "" + variable mImage_rhcSub "" + variable mImage_rhcUnion "" + variable mImage_rpc "" + variable mImage_rpcInter "" + variable mImage_rpcSub "" + variable mImage_rpcUnion "" + variable mImage_sketch "" + variable mImage_sketchInter "" + variable mImage_sketchSub "" + variable mImage_sketchUnion "" + variable mImage_tgc "" + variable mImage_tgcInter "" + variable mImage_tgcSub "" + variable mImage_tgcUnion "" + variable mImage_tor "" + variable mImage_torInter "" + variable mImage_torSub "" + variable mImage_torUnion "" + variable mCNode2PList + variable mPNode2CList + variable mNode2Text + variable mText2Node + # init functions + method initNewTree {} method initTree {} - method initGed {} + method initNewTreeImages {} + method initGed {} method closeMged {} method updateRtControl {} @@ -519,12 +614,25 @@ method toggleTreePath {_path} method updateTree {} method fillTree {{_node ""}} + method fillNewTree {_pnode _ctext} method selectNode {_tags {_rflag 1}} method dblClick {_tags} method loadMenu {_menu _snode} + method loadMenuPartI {_menu} + method loadMenuPartII {_menu _node _nodeType} + method getCNodeFromCText {_pnode _text} + method getNewTreeImage {_obj {_op ""}} + method getNewTreePath {_node _path} + method handleNewTreeClose {} + method handleNewTreeOpen {} + method handleNewTreePopup {_x _y _X _Y} + method handleNewTreeSelect {} + method newTreeLoadMenu {} + method refreshNewTree {} # db/display commands method getNodeChildren {_node} + method getTreeOp {_parent _child} method renderComp {_node} method render {_node _state _trans _updateTree {_wflag 1}} method selectDisplayColor {_node} @@ -831,7 +939,7 @@ pack $itk_component(advancedTabs) -fill both -expand yes pack $itk_component(statusF) -before $itk_component(south) -side bottom -fill x } - pack $itk_component(tree) -fill both -expand yes + pack $itk_component(hierarchyTabs) -fill both -expand yes pack $itk_component(hpane) -fill both -expand yes pack $itk_component(vpane) -fill both -expand yes pack $itk_component(canvasF) -fill both -expand yes @@ -877,6 +985,7 @@ [lindex $mBackground 2] updateTheme + initNewTreeImages $itk_component(primaryToolbar) itemconfigure open -state normal @@ -1150,10 +1259,58 @@ } } +::itcl::body ArcherCore::initNewTree {} { + set mNode2Text() "" + set mText2Node() "" + set mCNode2PList() "" + set mPNode2CList() "" + + itk_component add newtreeF { + ::frame $itk_component(hierarchyTabs).newtreeF + } {} + + itk_component add newtree { + ::ttk::treeview $itk_component(newtreeF).tree + } {} + + bind $itk_component(newtree) <<TreeviewSelect>> [::itcl::code $this handleNewTreeSelect] + bind $itk_component(newtree) <<TreeviewOpen>> [::itcl::code $this handleNewTreeOpen] + bind $itk_component(newtree) <<TreeviewClose>> [::itcl::code $this handleNewTreeClose] + $itk_component(newtree) tag bind popup <Button-3> [::itcl::code $this handleNewTreePopup %x %y %X %Y] + + itk_component add newtreepopup { + ::menu $itk_interior.newtreemenu \ + -tearoff 0 + } {} + + itk_component add newtreehscroll { + ::ttk::scrollbar $itk_component(newtreeF).newtreehscroll + } {} + + itk_component add newtreevscroll { + ::ttk::scrollbar $itk_component(newtreeF).newtreevscroll + } {} + + # Hook up scrollbars + $itk_component(newtree) configure -xscrollcommand "$itk_component(newtreehscroll) set" + $itk_component(newtree) configure -yscrollcommand "$itk_component(newtreevscroll) set" + $itk_component(newtreehscroll) configure -command "$itk_component(newtree) xview" + $itk_component(newtreevscroll) configure -command "$itk_component(newtree) yview" + + grid $itk_component(newtree) $itk_component(newtreevscroll) -sticky nsew + grid columnconfigure $itk_component(newtreeF) 0 -weight 1 + grid rowconfigure $itk_component(newtreeF) 0 -weight 1 +} + ::itcl::body ArcherCore::initTree {} { set parent [$itk_component(vpane) childsite hierarchyView] + + itk_component add hierarchyTabs { + ::ttk::notebook $parent.htabs + } {} + itk_component add tree { - ::swidgets::tree $parent.tree \ + ::swidgets::tree $itk_component(hierarchyTabs).tree \ -background white \ -selectfill 1 \ -selectbackground black \ @@ -1168,8 +1325,125 @@ -background $SystemButtonFace \ -activebackground $SystemHighlight \ -activeforeground $SystemHighlightText + + initNewTree + + $itk_component(hierarchyTabs) add $itk_component(tree) -text "Old Tree" + $itk_component(hierarchyTabs) add $itk_component(newtreeF) -text "New Tree" } +::itcl::body ArcherCore::initNewTreeImages {} { + set mImage_air [image create photo -file [file join $mImgDir air.png]] + set mImage_airInter [image create photo -file [file join $mImgDir air_intersect.png]] + set mImage_airSub [image create photo -file [file join $mImgDir air_subtract.png]] + set mImage_airUnion [image create photo -file [file join $mImgDir air_union.png]] + + set mImage_comb [image create photo -file [file join $mImgDir comb.png]] + set mImage_combInter [image create photo -file [file join $mImgDir comb_intersect.png]] + set mImage_combSub [image create photo -file [file join $mImgDir comb_subtract.png]] + set mImage_combUnion [image create photo -file [file join $mImgDir comb_union.png]] + + set mImage_region [image create photo -file [file join $mImgDir region.png]] + set mImage_regionInter [image create photo -file [file join $mImgDir region_intersect.png]] + set mImage_regionSub [image create photo -file [file join $mImgDir region_subtract.png]] + set mImage_regionUnion [image create photo -file [file join $mImgDir region_union.png]] + + set mImage_arb8 [image create photo -file [file join $mImgDir arb8.png]] + set mImage_arb8Inter [image create photo -file [file join $mImgDir arb8_intersect.png]] + set mImage_arb8Sub [image create photo -file [file join $mImgDir arb8_subtract.png]] + set mImage_arb8Union [image create photo -file [file join $mImgDir arb8_union.png]] + + set mImage_arbn [image create photo -file [file join $mImgDir arbn.png]] + set mImage_arbnInter [image create photo -file [file join $mImgDir arbn_intersect.png]] + set mImage_arbnSub [image create photo -file [file join $mImgDir arbn_subtract.png]] + set mImage_arbnUnion [image create photo -file [file join $mImgDir arbn_union.png]] + + set mImage_ars [image create photo -file [file join $mImgDir ars.png]] + set mImage_arsInter [image create photo -file [file join $mImgDir ars_intersect.png]] + set mImage_arsSub [image create photo -file [file join $mImgDir ars_subtract.png]] + set mImage_arsUnion [image create photo -file [file join $mImgDir ars_union.png]] + + set mImage_bot [image create photo -file [file join $mImgDir bot.png]] + set mImage_botInter [image create photo -file [file join $mImgDir bot_intersect.png]] + set mImage_botSub [image create photo -file [file join $mImgDir bot_subtract.png]] + set mImage_botUnion [image create photo -file [file join $mImgDir bot_union.png]] + + set mImage_dsp [image create photo -file [file join $mImgDir dsp.png]] + set mImage_dspInter [image create photo -file [file join $mImgDir dsp_intersect.png]] + set mImage_dspSub [image create photo -file [file join $mImgDir dsp_subtract.png]] + set mImage_dspUnion [image create photo -file [file join $mImgDir dsp_union.png]] + + set mImage_ehy [image create photo -file [file join $mImgDir ehy.png]] + set mImage_ehyInter [image create photo -file [file join $mImgDir ehy_intersect.png]] + set mImage_ehySub [image create photo -file [file join $mImgDir ehy_subtract.png]] + set mImage_ehyUnion [image create photo -file [file join $mImgDir ehy_union.png]] + + set mImage_ell [image create photo -file [file join $mImgDir ell.png]] + set mImage_ellInter [image create photo -file [file join $mImgDir ell_intersect.png]] + set mImage_ellSub [image create photo -file [file join $mImgDir ell_subtract.png]] + set mImage_ellUnion [image create photo -file [file join $mImgDir ell_union.png]] + + set mImage_epa [image create photo -file [file join $mImgDir epa.png]] + set mImage_epaInter [image create photo -file [file join $mImgDir epa_intersect.png]] + set mImage_epaSub [image create photo -file [file join $mImgDir epa_subtract.png]] + set mImage_epaUnion [image create photo -file [file join $mImgDir epa_union.png]] + + set mImage_eto [image create photo -file [file join $mImgDir eto.png]] + set mImage_etoInter [image create photo -file [file join $mImgDir eto_intersect.png]] + set mImage_etoSub [image create photo -file [file join $mImgDir eto_subtract.png]] + set mImage_etoUnion [image create photo -file [file join $mImgDir eto_union.png]] + + set mImage_extrude [image create photo -file [file join $mImgDir extrude.png]] + set mImage_extrudeInter [image create photo -file [file join $mImgDir extrude_intersect.png]] + set mImage_extrudeSub [image create photo -file [file join $mImgDir extrude_subtract.png]] + set mImage_extrudeUnion [image create photo -file [file join $mImgDir extrude_union.png]] + + set mImage_half [image create photo -file [file join $mImgDir half.png]] + set mImage_halfInter [image create photo -file [file join $mImgDir half_intersect.png]] + set mImage_halfSub [image create photo -file [file join $mImgDir half_subtract.png]] + set mImage_halfUnion [image create photo -file [file join $mImgDir half_union.png]] + + set mImage_hyp [image create photo -file [file join $mImgDir hyp.png]] + set mImage_hypInter [image create photo -file [file join $mImgDir hyp_intersect.png]] + set mImage_hypSub [image create photo -file [file join $mImgDir hyp_subtract.png]] + set mImage_hypUnion [image create photo -file [file join $mImgDir hyp_union.png]] + + set mImage_nmg [image create photo -file [file join $mImgDir nmg.png]] + set mImage_nmgInter [image create photo -file [file join $mImgDir nmg_intersect.png]] + set mImage_nmgSub [image create photo -file [file join $mImgDir nmg_subtract.png]] + set mImage_nmgUnion [image create photo -file [file join $mImgDir nmg_union.png]] + + set mImage_pipe [image create photo -file [file join $mImgDir pipe.png]] + set mImage_pipeInter [image create photo -file [file join $mImgDir pipe_intersect.png]] + set mImage_pipeSub [image create photo -file [file join $mImgDir pipe_subtract.png]] + set mImage_pipeUnion [image create photo -file [file join $mImgDir pipe_union.png]] + + set mImage_rhc [image create photo -file [file join $mImgDir rhc.png]] + set mImage_rhcInter [image create photo -file [file join $mImgDir rhc_intersect.png]] + set mImage_rhcSub [image create photo -file [file join $mImgDir rhc_subtract.png]] + set mImage_rhcUnion [image create photo -file [file join $mImgDir rhc_union.png]] + + set mImage_rpc [image create photo -file [file join $mImgDir rpc.png]] + set mImage_rpcInter [image create photo -file [file join $mImgDir rpc_intersect.png]] + set mImage_rpcSub [image create photo -file [file join $mImgDir rpc_subtract.png]] + set mImage_rpcUnion [image create photo -file [file join $mImgDir rpc_union.png]] + + set mImage_sketch [image create photo -file [file join $mImgDir sketch.png]] + set mImage_sketchInter [image create photo -file [file join $mImgDir sketch_intersect.png]] + set mImage_sketchSub [image create photo -file [file join $mImgDir sketch_subtract.png]] + set mImage_sketchUnion [image create photo -file [file join $mImgDir sketch_union.png]] + + set mImage_tgc [image create photo -file [file join $mImgDir tgc.png]] + set mImage_tgcInter [image create photo -file [file join $mImgDir tgc_intersect.png]] + set mImage_tgcSub [image create photo -file [file join $mImgDir tgc_subtract.png]] + set mImage_tgcUnion [image create photo -file [file join $mImgDir tgc_union.png]] + + set mImage_tor [image create photo -file [file join $mImgDir tor.png]] + set mImage_torInter [image create photo -file [file join $mImgDir tor_intersect.png]] + set mImage_torSub [image create photo -file [file join $mImgDir tor_subtract.png]] + set mImage_torUnion [image create photo -file [file join $mImgDir tor_union.png]] +} + ::itcl::body ArcherCore::initGed {} { itk_component add ged { if {$mDbNoCopy || $mDbReadOnly} { @@ -2107,6 +2381,39 @@ } +::itcl::body ArcherCore::getTreeOp {_parent _child} { + if {$_parent == ""} { + return "" + } + + #XXX The quick and dirty solution calls "l". There should be an option to + # get a clean list of the members and their respective operators. + set ldata [split [$itk_component(ged) l $_parent] "\n"] + foreach line [lrange $ldata 1 end] { + if {[catch {lindex $line 1} member]} { + continue + } + + if {$member == $_child} { + switch -- [lindex $line 0] { + "-" { + return "Sub" + } + "+" { + return "Inter" + } + default { + return "Union" + } + + } + return + } + } + + return "" +} + ::itcl::body ArcherCore::renderComp {_node} { set renderMode [gedCmd how $_node] if {$renderMode < 0} { @@ -2442,6 +2749,8 @@ } ::itcl::body ArcherCore::refreshTree {{restore 1}} { + refreshNewTree + if {$restore == 1} { # get selected node set selNode [$itk_component(tree) query -selected] @@ -2507,6 +2816,9 @@ } ::itcl::body ArcherCore::updateTree {} { + # Breaks when using the new tree so, return (for now) + return + # grab selection set select [$itk_component(tree) selection get] #set element [lindex [split $select ":"] 1] @@ -2579,6 +2891,54 @@ ::update idletasks } +::itcl::body ArcherCore::fillNewTree {_pnode _ctext} { + set cdata [$itk_component(ged) get $_ctext] + set ctype [lindex $cdata 0] + set cnode [getCNodeFromCText $_pnode $_ctext] + + if {$cnode == ""} { + set ptext $mNode2Text($_pnode) + + if {$ctype == "comb"} { + set op [getTreeOp $ptext $_ctext] + set img [getNewTreeImage $_ctext $op] + set cnode [$itk_component(newtree) insert $_pnode end \ + -tags popup \ + -text $_ctext \ + -image $img] + + foreach gctext [getNodeChildren $_ctext] { + set gcdata [$itk_component(ged) get $gctext] + set gctype [lindex $gcdata 0] + + set op [getTreeOp $_ctext $gctext] + set img [getNewTreeImage $gctext $op] + set gcnode [$itk_component(newtree) insert $cnode end \ + -tags popup \ + -text $gctext \ + -image $img] + + lappend mText2Node($gctext) [list $gcnode $cnode] + set mNode2Text($gcnode) $gctext + lappend mPNode2CList($cnode) [list $gctext $gcnode] + set mCNode2PList($gcnode) [list $_ctext $cnode] + } + } else { + set op [getTreeOp $ptext $_ctext] + set img [getNewTreeImage $_ctext $op] + set cnode [$itk_component(newtree) insert $_pnode end \ + -tags popup \ + -text $_ctext \ + -image $img] + } + + lappend mText2Node($_ctext) [list $cnode $_pnode] + set mNode2Text($cnode) $_ctext + lappend mPNode2CList($_pnode) [list $_ctext $cnode] + set mCNode2PList($cnode) [list $ptext $_pnode] + } +} + ::itcl::body ArcherCore::selectNode {tags {rflag 1}} { set mLastTags $tags set tags [split $tags ":"] @@ -2674,20 +3034,24 @@ } } -::itcl::body ArcherCore::loadMenu {menu snode} { +::itcl::body ArcherCore::loadMenuPartI {_menu} { # destroy old menu - if [winfo exists $menu.color] { - $menu.color delete 0 end - destroy $menu.color + if [winfo exists $_menu.color] { + $_menu.color delete 0 end + destroy $_menu.color } - if {[winfo exists $menu.trans]} { - $menu.trans delete 0 end - destroy $menu.trans + if {[winfo exists $_menu.trans]} { + $_menu.trans delete 0 end + destroy $_menu.trans } - $menu delete 0 end + $_menu delete 0 end +} - #set element [lindex [split $snode ":"] 1] - set element [split $snode ":"] +::itcl::body ArcherCore::loadMenu {_menu _snode} { + loadMenuPartI $_menu + + #set element [lindex [split $_snode ":"] 1] + set element [split $_snode ":"] if {[llength $element] > 1} { set element [lindex $element 1] } @@ -2695,143 +3059,147 @@ set node [$itk_component(tree) query -path $element] set nodeType [$itk_component(tree) query -nodetype $element] - set mRenderMode [gedCmd how $node] + loadMenuPartII $_menu $node $nodeType +} + +::itcl::body ArcherCore::loadMenuPartII {_menu _node _nodeType} { + set mRenderMode [gedCmd how $_node] # do this in case "ev" was used from the command line if {2 < $mRenderMode} { set mRenderMode 2 } - if {$nodeType == "leaf"} { - $menu add radiobutton -label "Wireframe" \ + if {$_nodeType == "leaf"} { + $_menu add radiobutton -label "Wireframe" \ -indicatoron 1 -value 0 -variable [::itcl::scope mRenderMode] \ - -command [::itcl::code $this render $node 0 1 1] + -command [::itcl::code $this render $_node 0 1 1] - $menu add radiobutton -label "Shaded" \ + $_menu add radiobutton -label "Shaded" \ -indicatoron 1 -value 1 -variable [::itcl::scope mRenderMode] \ - -command [::itcl::code $this render $node 1 1 1] -# $menu add radiobutton -label "Shaded (Mode 2)" \ + -command [::itcl::code $this render $_node 1 1 1] +# $_menu add radiobutton -label "Shaded (Mode 2)" \ # -indicatoron 1 -value 2 -variable [::itcl::scope mRenderMode] \ -# -command [::itcl::code $this render $node 2 1 1] - $menu add radiobutton -label "Hidden Line)" \ +# -command [::itcl::code $this render $_node 2 1 1] + $_menu add radiobutton -label "Hidden Line)" \ -indicatoron 1 -value 2 -variable [::itcl::scope mRenderMode] \ - -command [::itcl::code $this render $node 4 1 1] + -command [::itcl::code $this render $_node 4 1 1] if {$mEnableBigE} { - $menu add radiobutton \ + $_menu add radiobutton \ -label "Evaluated" \ -indicatoron 1 \ -value 3 \ -variable [::itcl::scope mRenderMode] \ - -command [::itcl::code $this render $node 3 1 1] + -command [::itcl::code $this render $_node 3 1 1] } - $menu add radiobutton -label "Off" \ + $_menu add radiobutton -label "Off" \ -indicatoron 1 -value -1 -variable [::itcl::scope mRenderMode] \ - -command [::itcl::code $this render $node -1 1 1] + -command [::itcl::code $this render $_node -1 1 1] } else { - $menu add command -label "Wireframe" \ - -command [::itcl::code $this render $node 0 1 1] + $_menu add command -label "Wireframe" \ + -command [::itcl::code $this render $_node 0 1 1] - $menu add command -label "Shaded" \ - -command [::itcl::code $this render $node 1 1 1] -# $menu add command -label "Shaded (Mode 2)" \ -# -command [::itcl::code $this render $node 2 1 1] - $menu add command -label "Hidden Line" \ - -command [::itcl::code $this render $node 4 1 1] + $_menu add command -label "Shaded" \ + -command [::itcl::code $this render $_node 1 1 1] +# $_menu add command -label "Shaded (Mode 2)" \ +# -command [::itcl::code $this render $_node 2 1 1] + $_menu add command -label "Hidden Line" \ + -command [::itcl::code $this render $_node 4 1 1] if {$mEnableBigE} { - $menu add command \ + $_menu add command \ -label "Evaluated" \ - -command [::itcl::code $this render $node 3 1 1] + -command [::itcl::code $this render $_node 3 1 1] } - $menu add command -label "Off" \ - -command [::itcl::code $this render $node -1 1 1] + $_menu add command -label "Off" \ + -command [::itcl::code $this render $_node -1 1 1] } #XXX need to copy over - # $menu add separator - # $menu add command -label "Copy" \ + # $_menu add separator + # $_menu add command -label "Copy" \ # -command [::itcl::code $this alterObj "Copy" $mSelectedComp] - # $menu add command -label "Rename" \ + # $_menu add command -label "Rename" \ # -command [::itcl::code $this alterObj "Rename" $mSelectedComp] - # $menu add command -label "Delete" \ + # $_menu add command -label "Delete" \ # -command [::itcl::code $this deleteObj $mSelectedComp] - $menu add separator + $_menu add separator # Build color menu - $menu add cascade -label "Color" \ - -menu $menu.color - set color [menu $menu.color -tearoff 0] + $_menu add cascade -label "Color" \ + -menu $_menu.color + set color [menu $_menu.color -tearoff 0] $color configure \ -background $SystemButtonFace $color add command -label "Red" \ - -command [::itcl::code $this setDisplayColor $node {255 0 0}] + -command [::itcl::code $this setDisplayColor $_node {255 0 0}] $color add command -label "Orange" \ - -command [::itcl::code $this setDisplayColor $node {204 128 51}] + -command [::itcl::code $this setDisplayColor $_node {204 128 51}] $color add command -label "Yellow" \ - -command [::itcl::code $this setDisplayColor $node {219 219 112}] + -command [::itcl::code $this setDisplayColor $_node {219 219 112}] $color add command -label "Green" \ - -command [::itcl::code $this setDisplayColor $node {0 255 0}] + -command [::itcl::code $this setDisplayColor $_node {0 255 0}] $color add command -label "Blue" \ - -command [::itcl::code $this setDisplayColor $node {0 0 255}] + -command [::itcl::code $this setDisplayColor $_node {0 0 255}] $color add command -label "Indigo" \ - -command [::itcl::code $this setDisplayColor $node {0 0 128}] + -command [::itcl::code $this setDisplayColor $_node {0 0 128}] $color add command -label "Violet" \ - -command [::itcl::code $this setDisplayColor $node {128 0 128}] + -command [::itcl::code $this setDisplayColor $_node {128 0 128}] $color add separator $color add command -label "Default" \ - -command [::itcl::code $this setDisplayColor $node {}] + -command [::itcl::code $this setDisplayColor $_node {}] $color add command -label "Select..." \ - -command [::itcl::code $this selectDisplayColor $node] + -command [::itcl::code $this selectDisplayColor $_node] - if {($mDisplayType == "wgl" || $mDisplayType == "ogl") && ($nodeType != "leaf" || 0 < $mRenderMode)} { + if {($mDisplayType == "wgl" || $mDisplayType == "ogl") && ($_nodeType != "leaf" || 0 < $mRenderMode)} { # Build transparency menu - $menu add cascade -label "Transparency" \ - -menu $menu.trans - set trans [menu $menu.trans -tearoff 0] + $_menu add cascade -label "Transparency" \ + -menu $_menu.trans + set trans [menu $_menu.trans -tearoff 0] $trans configure \ -background $SystemButtonFace $trans add command -label "None" \ - -command [::itcl::code $this setTransparency $node 1.0] + -command [::itcl::code $this setTransparency $_node 1.0] # #$trans add command -label "25%" \ -# # -command [::itcl::code $this setTransparency $node 0.75] +# # -command [::itcl::code $this setTransparency $_node 0.75] # #$trans add command -label "50%" \ -# # -command [::itcl::code $this setTransparency $node 0.5] +# # -command [::itcl::code $this setTransparency $_node 0.5] # #$trans add command -label "75%" \ -# # -command [::itcl::code $this setTransparency $node 0.25] +# # -command [::itcl::code $this setTransparency $_node 0.25] # $trans add command -label "10%" \ -# -command [::itcl::code $this setTransparency $node 0.9] +# -command [::itcl::code $this setTransparency $_node 0.9] # $trans add command -label "20%" \ -# -command [::itcl::code $this setTransparency $node 0.8] +# -command [::itcl::code $this setTransparency $_node 0.8] # $trans add command -label "30%" \ -# -command [::itcl::code $this setTransparency $node 0.7] +# -command [::itcl::code $this setTransparency $_node 0.7] # $trans add command -label "40%" \ -# -command [::itcl::code $this setTransparency $node 0.6] +# -command [::itcl::code $this setTransparency $_node 0.6] # $trans add command -label "50%" \ -# -command [::itcl::code $this setTransparency $node 0.5] +# -command [::itcl::code $this setTransparency $_node 0.5] # $trans add command -label "60%" \ -# -command [::itcl::code $this setTransparency $node 0.4] +# -command [::itcl::code $this setTransparency $_node 0.4] # $trans add command -label "70%" \ -# -command [::itcl::code $this setTransparency $node 0.3] +# -command [::itcl::code $this setTransparency $_node 0.3] $trans add command -label "80%" \ - -command [::itcl::code $this setTransparency $node 0.2] + -command [::itcl::code $this setTransparency $_node 0.2] $trans add command -label "85%" \ - -command [::itcl::code $this setTransparency $node 0.15] + -command [::itcl::code $this setTransparency $_node 0.15] $trans add command -label "90%" \ - -command [::itcl::code $this setTransparency $node 0.1] + -command [::itcl::code $this setTransparency $_node 0.1] $trans add command -label "95%" \ - -command [::itcl::code $this setTransparency $node 0.05] + -command [::itcl::code $this setTransparency $_node 0.05] $trans add command -label "97%" \ - -command [::itcl::code $this setTransparency $node 0.03] + -command [::itcl::code $this setTransparency $_node 0.03] $trans add command -label "99%" \ - -command [::itcl::code $this setTransparency $node 0.01] + -command [::itcl::code $this setTransparency $_node 0.01] # set up bindings for transparency status bind $trans <<MenuSelect>> \ @@ -2839,12 +3207,150 @@ } # set up bindings for status - bind $menu <<MenuSelect>> \ + bind $_menu <<MenuSelect>> \ [::itcl::code $this menuStatusCB %W] bind $color <<MenuSelect>> \ [::itcl::code $this colorMenuStatusCB %W] } +::itcl::body ArcherCore::getCNodeFromCText {_pnode _text} { + if {[catch {set clists $mPNode2CList($_pnode)}]} { + return "" + } + + foreach clist $clists { + if {[lindex $clist 0] == $_text} { + return [lindex $clist 1] + } + } + + return "" +} + +::itcl::body ArcherCore::getNewTreeImage {_obj {_op ""}} { + set data [$itk_component(ged) get $_obj] + set type [lindex $data 0] + + switch -- $type { + comb - + arb8 - + arbn - + ars - + bot - + dsp - + ehy - + ell - + epa - + eto - + extrude - + half - + hyp - + nmg - + pipe - + rhc - + rpc - + sketch - + tgc - + tor { + return [subst $[subst mImage_$type$_op]] + } + default { + # If all else fails, use mImage_arb8 (for now) + return [subst $[subst mImage_arb8$_op]] + } + } +} + +::itcl::body ArcherCore::getNewTreePath {_node _path} { + if {$_node == ""} { + return "" + } + + if {$_path == ""} { + set _path $mNode2Text($_node) + } + + set parent [lindex $mCNode2PList($_node) end] + if {$parent == {}} { + return $_path + } + + set text $mNode2Text($parent) + set _path "$text/$_path" + + return [getNewTreePath $parent $_path] +} + +::itcl::body ArcherCore::handleNewTreeClose {} { +} + +::itcl::body ArcherCore::handleNewTreeOpen {} { + set cnode [$itk_component(newtree) focus] + set ctext [$itk_component(newtree) item $cnode -text] + set cdata [$itk_component(ged) get $ctext] + set ctype [lindex $cdata 0] + + if {$ctype == "comb"} { + foreach gctext [getNodeChildren $ctext] { + set gcdata [$itk_component(ged) get $gctext] + set gctype [lindex $gcdata 0] + + if {$gctype == "comb"} { + set gcnode [getCNodeFromCText $cnode $gctext] + + foreach ggctext [getNodeChildren $gctext] { + fillNewTree $gcnode $ggctext + } + } + } + } +} + +::itcl::body ArcherCore::handleNewTreePopup {_x _y _X _Y} { + set item [$itk_component(newtree) identify row $_x $_y] + set text [$itk_component(newtree) item $item -text] + set img [$itk_component(newtree) item $item -image] + + if {$img == $mImage_comb} { + set nodeType "branch" + } else { + set nodeType "leaf" + } + + set path [getNewTreePath $item $text] + + loadMenuPartI $itk_component(newtreepopup) + loadMenuPartII $itk_component(newtreepopup) $path $nodeType + tk_popup $itk_component(newtreepopup) $_X $_Y +} + +::itcl::body ArcherCore::handleNewTreeSelect {} { +} + +::itcl::body ArcherCore::newTreeLoadMenu {} { +} + +::itcl::body ArcherCore::refreshNewTree {} { + foreach pnode [array names mPNode2CList] { + catch {$itk_component(newtree) delete $pnode} + } + + # clobber the associative arrays + unset mNode2Text + unset mText2Node + unset mCNode2PList + unset mPNode2CList + set mNode2Text() "" + set mText2Node() "" + set mCNode2PList() "" + set mPNode2CList() "" + + foreach item [lsort -dictionary [$itk_component(ged) tops]] { + set item [regsub {/.*} $item {}] + fillNewTree {} $item + } +} + # ------------------------------------------------------------ # GENERAL # ------------------------------------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-04-14 15:49:03
|
Revision: 38567 http://brlcad.svn.sourceforge.net/brlcad/?rev=38567&view=rev Author: bob1961 Date: 2010-04-14 15:48:56 +0000 (Wed, 14 Apr 2010) Log Message: ----------- Mods to improve the speed of the treeview widget. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-14 15:41:56 UTC (rev 38566) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-14 15:48:56 UTC (rev 38567) @@ -59,6 +59,13 @@ common splash "" common showWindow 0 + common TREE_AFFECTED_TAG "affected" + common TREE_FULLY_DISPLAYED_TAG "displayed" + common TREE_PARTIALLY_DISPLAYED_TAG "pdisplayed" + common TREE_POPUP_TAG "popup" + common TREE_OPENED_TAG "opened" + common TREE_PLACEHOLDER_TAG "placeholder" + common VIEW_ROTATE_MODE 0 common VIEW_TRANSLATE_MODE 1 common VIEW_SCALE_MODE 2 @@ -556,10 +563,18 @@ variable mImage_hypInter "" variable mImage_hypSub "" variable mImage_hypUnion "" + variable mImage_invalid "" + variable mImage_invalidInter "" + variable mImage_invalidSub "" + variable mImage_invalidUnion "" variable mImage_nmg "" variable mImage_nmgInter "" variable mImage_nmgSub "" variable mImage_nmgUnion "" + variable mImage_other "" + variable mImage_otherInter "" + variable mImage_otherSub "" + variable mImage_otherUnion "" variable mImage_pipe "" variable mImage_pipeInter "" variable mImage_pipeSub "" @@ -634,7 +649,7 @@ method findNewTreeChildNodes {_pnode} method findNewTreeParentNodes {_cnode} method getCNodeFromCText {_pnode _text} - method getNewTreeImage {_obj {_op ""}} + method getNewTreeImage {_obj _type {_op ""} {_isregion 0}} method getNewTreeNode {_path} method getNewTreeNodes {_path} method getNewTreePath {_node {_path ""}} @@ -643,9 +658,14 @@ method handleNewTreePopup {_x _y _X _Y} method handleNewTreeSelect {} method refreshNewTree {} + method addNewTreeNodeTag {_node _tag} + method removeNewTreeNodeTag {_node _tag} + method addNewTreePlaceholder {_pnode} # db/display commands method getNodeChildren {_node} + method getTreeFromGData {_gdata} + method getTreeMembers {_tlist} method getTreeOp {_parent _child} method renderComp {_node} method render {_node _state _trans _updateTree {_wflag 1}} @@ -1336,17 +1356,17 @@ bind $itk_component(newtree) <<TreeviewSelect>> [::itcl::code $this handleNewTreeSelect] bind $itk_component(newtree) <<TreeviewOpen>> [::itcl::code $this handleNewTreeOpen] bind $itk_component(newtree) <<TreeviewClose>> [::itcl::code $this handleNewTreeClose] - $itk_component(newtree) tag bind popup <Button-3> [::itcl::code $this handleNewTreePopup %x %y %X %Y] -# $itk_component(newtree) tag configure displayed -foreground cornflowerblue -# $itk_component(newtree) tag configure displayed -foreground -# $itk_component(newtree) tag configure displayed -foreground darkorange - $itk_component(newtree) tag configure displayed \ + $itk_component(newtree) tag bind $TREE_POPUP_TAG <Button-3> [::itcl::code $this handleNewTreePopup %x %y %X %Y] +# $itk_component(newtree) tag configure $TREE_FULLY_DISPLAYED_TAG -foreground cornflowerblue +# $itk_component(newtree) tag configure $TREE_FULLY_DISPLAYED_TAG -foreground +# $itk_component(newtree) tag configure $TREE_FULLY_DISPLAYED_TAG -foreground darkorange + $itk_component(newtree) tag configure $TREE_FULLY_DISPLAYED_TAG \ -foreground red \ -font TkHeadingFont - $itk_component(newtree) tag configure pdisplayed \ + $itk_component(newtree) tag configure $TREE_PARTIALLY_DISPLAYED_TAG \ -foreground \#9999ff \ -font TkHeadingFont - $itk_component(newtree) tag configure affected \ + $itk_component(newtree) tag configure $TREE_AFFECTED_TAG \ -background yellow2 itk_component add newtreepopup { @@ -1485,11 +1505,21 @@ set mImage_hypSub [image create photo -file [file join $mImgDir hyp_subtract.png]] set mImage_hypUnion [image create photo -file [file join $mImgDir hyp_union.png]] + set mImage_invalid [image create photo -file [file join $mImgDir invalid.png]] + set mImage_invalidInter [image create photo -file [file join $mImgDir invalid_intersect.png]] + set mImage_invalidSub [image create photo -file [file join $mImgDir invalid_subtract.png]] + set mImage_invalidUnion [image create photo -file [file join $mImgDir invalid_union.png]] + set mImage_nmg [image create photo -file [file join $mImgDir nmg.png]] set mImage_nmgInter [image create photo -file [file join $mImgDir nmg_intersect.png]] set mImage_nmgSub [image create photo -file [file join $mImgDir nmg_subtract.png]] set mImage_nmgUnion [image create photo -file [file join $mImgDir nmg_union.png]] + set mImage_other [image create photo -file [file join $mImgDir other.png]] + set mImage_otherInter [image create photo -file [file join $mImgDir other_intersect.png]] + set mImage_otherSub [image create photo -file [file join $mImgDir other_subtract.png]] + set mImage_otherUnion [image create photo -file [file join $mImgDir other_union.png]] + set mImage_pipe [image create photo -file [file join $mImgDir pipe.png]] set mImage_pipeInter [image create photo -file [file join $mImgDir pipe_intersect.png]] set mImage_pipeSub [image create photo -file [file join $mImgDir pipe_subtract.png]] @@ -2435,15 +2465,29 @@ return {} } + return [getTreeMembers $tlist] +} + +::itcl::body ArcherCore::getTreeFromGData {_gdata} { + set ti [lsearch $_gdata tree] + if {$ti != -1} { + incr ti + return [lindex $_gdata $ti] + } + + return {} +} + +::itcl::body ArcherCore::getTreeMembers {_tlist} { # first remove any matrices - regsub -all -- {\{-?[0-9]+[^\}]+-?[0-9]+\}} $tlist "" tlist + regsub -all -- {\{-?[0-9]+[^\}]+-?[0-9]+\}} $_tlist "" _tlist # remove all other unwanted stuff - regsub -all {^[lun!GXN^-] |\{[lun!GXN^-]|\}} $tlist "" tlist + regsub -all {^[lun!GXN^-] |\{[lun!GXN^-]|\}} $_tlist "" _tlist # finally, remove any duplicates set ntlist {} - foreach item $tlist { + foreach item $_tlist { if {[lsearch $ntlist $item] == -1} { lappend ntlist $item } @@ -2893,10 +2937,10 @@ ::itcl::body ArcherCore::updateNewTree {} { foreach node $mNodePDrawList { - $itk_component(newtree) item $node -tags popup + $itk_component(newtree) item $node -tags $TREE_POPUP_TAG } foreach node $mNodeDrawList { - $itk_component(newtree) item $node -tags popup + $itk_component(newtree) item $node -tags $TREE_POPUP_TAG } set mNodePDrawList "" @@ -2913,10 +2957,10 @@ set mNodeDrawList [lsort -unique $mNodeDrawList] foreach node $mNodePDrawList { - $itk_component(newtree) item $node -tags {popup pdisplayed} + $itk_component(newtree) item $node -tags [list $TREE_POPUP_TAG $TREE_PARTIALLY_DISPLAYED_TAG] } foreach node $mNodeDrawList { - $itk_component(newtree) item $node -tags {popup displayed} + $itk_component(newtree) item $node -tags [list $TREE_POPUP_TAG $TREE_FULLY_DISPLAYED_TAG] } } @@ -3000,55 +3044,48 @@ } ::itcl::body ArcherCore::fillNewTree {_pnode _ctext} { - if {[catch {$itk_component(ged) get $_ctext} cdata]} { + set cnode [getCNodeFromCText $_pnode $_ctext] + + # A node for _pnode/_ctext already exists + if {$cnode != ""} { return } - set ctype [lindex $cdata 0] - set cnode [getCNodeFromCText $_pnode $_ctext] - if {$cnode == ""} { - set ptext $mNode2Text($_pnode) + if {[catch {$itk_component(ged) get $_ctext} cgdata]} { + return + } - if {$ctype == "comb"} { - set op [getTreeOp $ptext $_ctext] - set img [getNewTreeImage $_ctext $op] - set cnode [$itk_component(newtree) insert $_pnode end \ - -tags popup \ - -text $_ctext \ - -image $img] + set ctype [lindex $cgdata 0] + set ptext $mNode2Text($_pnode) - foreach gctext [getNodeChildren $_ctext] { - if {[catch {$itk_component(ged) get $gctext} gcdata]} { - continue - } - set gctype [lindex $gcdata 0] + if {$ctype == "comb"} { + set ri [lsearch $cgdata region] + incr ri + set isregion [lindex $cgdata $ri] - set op [getTreeOp $_ctext $gctext] - set img [getNewTreeImage $gctext $op] - set gcnode [$itk_component(newtree) insert $cnode end \ - -tags popup \ - -text $gctext \ - -image $img] + set op [getTreeOp $ptext $_ctext] + set img [getNewTreeImage $_ctext $ctype $op $isregion] + set cnode [$itk_component(newtree) insert $_pnode end \ + -tags $TREE_POPUP_TAG \ + -text $_ctext \ + -image $img] - lappend mText2Node($gctext) [list $gcnode $cnode] - set mNode2Text($gcnode) $gctext - lappend mPNode2CList($cnode) [list $gctext $gcnode] - set mCNode2PList($gcnode) [list $_ctext $cnode] - } - } else { - set op [getTreeOp $ptext $_ctext] - set img [getNewTreeImage $_ctext $op] - set cnode [$itk_component(newtree) insert $_pnode end \ - -tags popup \ - -text $_ctext \ - -image $img] + if {$_pnode == {}} { + addNewTreePlaceholder $cnode } + } else { + set op [getTreeOp $ptext $_ctext] + set img [getNewTreeImage $_ctext $ctype $op] + set cnode [$itk_component(newtree) insert $_pnode end \ + -tags $TREE_POPUP_TAG \ + -text $_ctext \ + -image $img] + } - lappend mText2Node($_ctext) [list $cnode $_pnode] - set mNode2Text($cnode) $_ctext - lappend mPNode2CList($_pnode) [list $_ctext $cnode] - set mCNode2PList($cnode) [list $ptext $_pnode] - } + lappend mText2Node($_ctext) [list $cnode $_pnode] + set mNode2Text($cnode) $_ctext + lappend mPNode2CList($_pnode) [list $_ctext $cnode] + set mCNode2PList($cnode) [list $ptext $_pnode] } ::itcl::body ArcherCore::selectNode {tags {rflag 1}} { @@ -3340,12 +3377,15 @@ return "" } -::itcl::body ArcherCore::getNewTreeImage {_obj {_op ""}} { - set data [$itk_component(ged) get $_obj] - set type [lindex $data 0] +::itcl::body ArcherCore::getNewTreeImage {_obj _type {_op ""} {_isregion 0}} { + switch -- $_type { + comb { + if {$_isregion} { + return [subst $[subst mImage_region$_op]] + } - switch -- $type { - comb - + return [subst $[subst mImage_comb$_op]] + } arb8 - arbn - ars - @@ -3358,6 +3398,7 @@ extrude - half - hyp - + invalid - nmg - pipe - rhc - @@ -3365,11 +3406,10 @@ sketch - tgc - tor { - return [subst $[subst mImage_$type$_op]] + return [subst $[subst mImage_$_type$_op]] } default { - # If all else fails, use mImage_arb8 (for now) - return [subst $[subst mImage_arb8$_op]] + return [subst $[subst mImage_other$_op]] } } } @@ -3381,6 +3421,11 @@ set cnodes {} foreach clist $mPNode2CList($_pnode) { + set ctext [lindex $clist 0] + if {$ctext == $TREE_PLACEHOLDER_TAG} { + continue + } + set cnode [lindex $clist 1] lappend cnodes $cnode eval lappend cnodes [findNewTreeChildNodes $cnode] @@ -3516,27 +3561,60 @@ } ::itcl::body ArcherCore::handleNewTreeOpen {} { + SetWaitCursor $this + set cnode [$itk_component(newtree) focus] set ctext [$itk_component(newtree) item $cnode -text] - set cdata [$itk_component(ged) get $ctext] - set ctype [lindex $cdata 0] + set cgdata [$itk_component(ged) get $ctext] + set ctype [lindex $cgdata 0] if {$ctype == "comb"} { - foreach gctext [getNodeChildren $ctext] { - set gcdata [$itk_component(ged) get $gctext] - set gctype [lindex $gcdata 0] + # If this node has never been opened ... + if {[addNewTreeNodeTag $cnode $TREE_OPENED_TAG]} { + # Remove placeholder + set placeholder [lindex [lindex $mPNode2CList($cnode) 0] 1] + $itk_component(newtree) delete $placeholder + unset mPNode2CList($cnode) - if {$gctype == "comb"} { - set gcnode [getCNodeFromCText $cnode $gctext] + set tree [getTreeFromGData $cgdata] + foreach gctext [getTreeMembers $tree] { + if {[catch {$itk_component(ged) get $gctext} gcgdata]} { + set gcnode [getCNodeFromCText $cnode $gctext] + if {$gcnode == ""} { + set op [getTreeOp $ctext $gctext] + set img [getNewTreeImage $gctext "invalid" $op] - foreach ggctext [getNodeChildren $gctext] { - fillNewTree $gcnode $ggctext + set gcnode [$itk_component(newtree) insert $cnode end \ + -tags $TREE_POPUP_TAG \ + -text $gctext \ + -image $img] + + lappend mText2Node($gctext) [list $gcnode $cnode] + set mNode2Text($gcnode) $gctext + lappend mPNode2CList($cnode) [list $gctext $gcnode] + set mCNode2PList($gcnode) [list $ctext $cnode] + } + + continue } + + # Add gchild members + fillNewTree $cnode $gctext + + set gctype [lindex $gcgdata 0] + + if {$gctype == "comb"} { + set gcnode [getCNodeFromCText $cnode $gctext] + + # Add a placeholder for gcnode's possible members + addNewTreePlaceholder $gcnode + } } } } updateNewTree + SetNormalCursor $this } ::itcl::body ArcherCore::handleNewTreePopup {_x _y _X _Y} { @@ -3559,12 +3637,7 @@ ::itcl::body ArcherCore::handleNewTreeSelect {} { foreach anode $mAffectedNodeList { - set tags [$itk_component(newtree) item $anode -tags] - set ai [lsearch $tags affected] - if {$ai != -1} { - set tags [lreplace $tags $ai $ai] - } - $itk_component(newtree) item $anode -tags $tags + removeNewTreeNodeTag $anode $TREE_AFFECTED_TAG } set mAffectedNodeList "" @@ -3605,10 +3678,7 @@ if {![$itk_component(newtree) item $pnode -open]} { lappend mAffectedNodeList $pnode set found 1 - set tags [$itk_component(newtree) item $pnode -tags] - lappend tags affected - set tags [lsort -unique $tags] - $itk_component(newtree) item $pnode -tags $tags + addNewTreeNodeTag $pnode $TREE_AFFECTED_TAG break } } @@ -3617,10 +3687,7 @@ set cnode [lindex $cnodes 0] if {$cnode != $snode} { lappend mAffectedNodeList $cnode - set tags [$itk_component(newtree) item $cnode -tags] - lappend tags affected - set tags [lsort -unique $tags] - $itk_component(newtree) item $cnode -tags $tags + addNewTreeNodeTag $cnode $TREE_AFFECTED_TAG } } } @@ -3650,6 +3717,36 @@ } } +::itcl::body ArcherCore::addNewTreeNodeTag {_node _tag} { + set tags [$itk_component(newtree) item $_node -tags] + set ai [lsearch $tags $_tag] + if {$ai == -1} { + lappend tags $_tag + $itk_component(newtree) item $_node -tags $tags + + return 1 + } + + return 0 +} + +::itcl::body ArcherCore::removeNewTreeNodeTag {_node _tag} { + set tags [$itk_component(newtree) item $_node -tags] + set ai [lsearch $tags $_tag] + if {$ai != -1} { + set tags [lreplace $tags $ai $ai] + $itk_component(newtree) item $_node -tags $tags + } +} + +::itcl::body ArcherCore::addNewTreePlaceholder {_pnode} { + set cnode [$itk_component(newtree) insert $_pnode end \ + -text $TREE_PLACEHOLDER_TAG \ + -tags $TREE_PLACEHOLDER_TAG] + + set mPNode2CList($_pnode) [list [list $TREE_PLACEHOLDER_TAG $cnode]] +} + # ------------------------------------------------------------ # GENERAL # ------------------------------------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-04-14 16:58:38
|
Revision: 38570 http://brlcad.svn.sourceforge.net/brlcad/?rev=38570&view=rev Author: bob1961 Date: 2010-04-14 16:58:31 +0000 (Wed, 14 Apr 2010) Log Message: ----------- Updated for bot and metaball tree images. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-14 16:47:18 UTC (rev 38569) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-14 16:58:31 UTC (rev 38570) @@ -567,6 +567,10 @@ variable mImage_invalidInter "" variable mImage_invalidSub "" variable mImage_invalidUnion "" + variable mImage_metaball "" + variable mImage_metaballInter "" + variable mImage_metaballSub "" + variable mImage_metaballUnion "" variable mImage_nmg "" variable mImage_nmgInter "" variable mImage_nmgSub "" @@ -1510,6 +1514,11 @@ set mImage_invalidSub [image create photo -file [file join $mImgDir invalid_subtract.png]] set mImage_invalidUnion [image create photo -file [file join $mImgDir invalid_union.png]] + set mImage_metaball [image create photo -file [file join $mImgDir metaball.png]] + set mImage_metaballInter [image create photo -file [file join $mImgDir metaball_intersect.png]] + set mImage_metaballSub [image create photo -file [file join $mImgDir metaball_subtract.png]] + set mImage_metaballUnion [image create photo -file [file join $mImgDir metaball_union.png]] + set mImage_nmg [image create photo -file [file join $mImgDir nmg.png]] set mImage_nmgInter [image create photo -file [file join $mImgDir nmg_intersect.png]] set mImage_nmgSub [image create photo -file [file join $mImgDir nmg_subtract.png]] @@ -3399,6 +3408,7 @@ half - hyp - invalid - + metaball - nmg - pipe - rhc - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-04-16 11:49:15
|
Revision: 38589 http://brlcad.svn.sourceforge.net/brlcad/?rev=38589&view=rev Author: bob1961 Date: 2010-04-16 11:49:07 +0000 (Fri, 16 Apr 2010) Log Message: ----------- Added support for viewing columns in the tree viewer. The GUI for modifying the columns will be added in the next iteration. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-16 07:40:28 UTC (rev 38588) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-16 11:49:07 UTC (rev 38589) @@ -329,6 +329,8 @@ # variables for preference state variable mAffectedTreeNodesMode 0 variable mAffectedTreeNodesModePref "" + variable mTreeAttrColumns "" + variable mTreeAttrColumnsPref "" variable mZClipMode 0 variable mZClipModePref "" @@ -644,6 +646,7 @@ # tree commands method updateTree {} method fillTree {_pnode _ctext} + method fillTreeColumns {_cnode _ctext} method loadMenu {_menu _node _nodeType} method findTreeChildNodes {_pnode} method findTreeParentNodes {_cnode} @@ -1417,10 +1420,10 @@ set mImage_airSub [image create photo -file [file join $mImgDir air_subtract.png]] set mImage_airUnion [image create photo -file [file join $mImgDir air_union.png]] -# set mImage_airregion [image create photo -file [file join $mImgDir airregion.png]] -# set mImage_airregionInter [image create photo -file [file join $mImgDir airregion_intersect.png]] -# set mImage_airregionSub [image create photo -file [file join $mImgDir airregion_subtract.png]] -# set mImage_airregionUnion [image create photo -file [file join $mImgDir airregion_union.png]] + set mImage_airregion [image create photo -file [file join $mImgDir airregion.png]] + set mImage_airregionInter [image create photo -file [file join $mImgDir airregion_intersect.png]] + set mImage_airregionSub [image create photo -file [file join $mImgDir airregion_subtract.png]] + set mImage_airregionUnion [image create photo -file [file join $mImgDir airregion_union.png]] set mImage_comb [image create photo -file [file join $mImgDir comb.png]] set mImage_combInter [image create photo -file [file join $mImgDir comb_intersect.png]] @@ -1825,6 +1828,13 @@ catch {$itk_component(newtree) delete $node} } + $itk_component(newtree) configure -columns $mTreeAttrColumns + set i 0 + foreach column $mTreeAttrColumns { + $itk_component(newtree) heading $i -text $column + incr i + } + # clobber the associative arrays unset mNode2Text unset mText2Node @@ -3043,6 +3053,8 @@ -text $_ctext \ -image $img] + fillTreeColumns $cnode $_ctext + if {$_pnode == {}} { addTreePlaceholder $cnode } @@ -3053,6 +3065,8 @@ -tags $TREE_POPUP_TAG \ -text $_ctext \ -image $img] + + fillTreeColumns $cnode $_ctext } lappend mText2Node($_ctext) [list $cnode $_pnode] @@ -3061,6 +3075,28 @@ set mCNode2PList($cnode) [list $ptext $_pnode] } +::itcl::body ArcherCore::fillTreeColumns {_cnode _ctext} { + if {$mTreeAttrColumns != {}} { + set vals {} + set anames {} + set avals {} + foreach {aname aval} [gedCmd attr get $_ctext] { + lappend anames $aname + lappend avals $aval + } + foreach attr $mTreeAttrColumns { + set ai [lsearch $anames $attr] + if {$ai != -1} { + lappend vals [lindex $avals $ai] + } else { + lappend vals {} + } + } + + $itk_component(newtree) item $_cnode -values $vals + } +} + ::itcl::body ArcherCore::loadMenu {_menu _node _nodeType} { # destroy old menu if [winfo exists $_menu.color] { @@ -3276,8 +3312,7 @@ return [subst $[subst mImage_air$_op]] } 3 { - return [subst $[subst mImage_other$_op]] -# return [subst $[subst mImage_airregion$_op]] + return [subst $[subst mImage_airregion$_op]] } 0 - default { @@ -3456,6 +3491,8 @@ -text $gctext \ -image $img] + fillTreeColumns $gcnode $gctext + lappend mText2Node($gctext) [list $gcnode $cnode] set mNode2Text($gcnode) $gctext lappend mPNode2CList($cnode) [list $gctext $gcnode] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-04-22 18:06:01
|
Revision: 38741 http://brlcad.svn.sourceforge.net/brlcad/?rev=38741&view=rev Author: bob1961 Date: 2010-04-22 18:05:55 +0000 (Thu, 22 Apr 2010) Log Message: ----------- Hooked the component selection functionality up to the new tree viewer. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-22 17:58:25 UTC (rev 38740) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-22 18:05:55 UTC (rev 38741) @@ -652,7 +652,7 @@ method findTreeParentNodes {_cnode} method getCNodeFromCText {_pnode _text} method getTreeImage {_obj _type {_op ""} {_isregion 0}} - method getTreeNode {_path} + method getTreeNode {_path {_cflag 0}} method getTreeNodes {_path} method getTreePath {_node {_path ""}} method handleTreeClose {} @@ -662,6 +662,7 @@ method addTreeNodeTag {_node _tag} method removeTreeNodeTag {_node _tag} method addTreePlaceholder {_pnode} + method selectTreePath {_path} # db/display commands method getNodeChildren {_node} @@ -2279,9 +2280,8 @@ } else { set in [bu_get_value_by_keyword "in" $partition] set path [bu_get_value_by_keyword "path" $in] - set leaf [file tail $path] - set paths [gedCmd search -name $leaf] -# $itk_component(tree) selectpaths $paths + set path [regsub {^/} $path {}] + selectTreePath $path } } @@ -3346,7 +3346,7 @@ } } -::itcl::body ArcherCore::getTreeNode {_path} { +::itcl::body ArcherCore::getTreeNode {_path {_cflag 0}} { set items [split $_path /] set len [llength $items] @@ -3358,6 +3358,12 @@ set ptext [lindex $items 0] if {![info exists mText2Node($ptext)]} { +# if {$_cflag} { +# fillTree {} $ptext +# } else { +# return $pnode +# } + return $pnode } @@ -3374,7 +3380,17 @@ set found 0 if {![info exists mText2Node($item)]} { - return $pnode + if {$_cflag} { + if {![$itk_component(newtree) item $pnode -open]} { + $itk_component(newtree) item $pnode -open true + $itk_component(newtree) focus $pnode + handleTreeOpen + } else { + $itk_component(newtree) focus $pnode + } + } else { + return $pnode + } } foreach sublist $mText2Node($item) { @@ -3383,6 +3399,17 @@ if {$pnode == [lindex $sublist 1]} { set pnode $cnode set found 1 + + if {$_cflag} { + if {![$itk_component(newtree) item $cnode -open]} { + $itk_component(newtree) item $cnode -open true + $itk_component(newtree) focus $cnode + handleTreeOpen + } else { + $itk_component(newtree) focus $cnode + } + } + continue } } @@ -3599,6 +3626,21 @@ set mPNode2CList($_pnode) [list [list $TREE_PLACEHOLDER_TAG $cnode]] } +::itcl::body ArcherCore::selectTreePath {_path} { + if {$_path == {}} { + return + } + + getTreeNode $_path 1 + set snode [$itk_component(newtree) focus] + + if {$snode == {}} { + putString $_path + } else { + $itk_component(newtree) selection set $snode + } +} + # ------------------------------------------------------------ # GENERAL # ------------------------------------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-04-27 19:03:26
|
Revision: 38828 http://brlcad.svn.sourceforge.net/brlcad/?rev=38828&view=rev Author: bob1961 Date: 2010-04-27 19:03:20 +0000 (Tue, 27 Apr 2010) Log Message: ----------- Added an opendb command to ArcherCore. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-27 19:03:05 UTC (rev 38827) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-04-27 19:03:20 UTC (rev 38828) @@ -117,8 +117,9 @@ method setDefaultBindingMode {_mode} # public database commands - method gedCmd {args} method cmd {args} + method gedCmd {args} + method preDbOpenCmd {args} # general method Load {_filename} @@ -209,6 +210,7 @@ method nmg_collapse {args} method nmg_simplify {args} method ocenter {args} + method opendb {args} method orotate {args} method oscale {args} method otranslate {args} @@ -438,13 +440,18 @@ in inside item kill killall killrefs killtree ls \ make make_bb make_pnts mater mirror move move_arb_edge move_arb_face \ mv mvall nmg_collapse nmg_simplify \ - ocenter orotate oscale otranslate p packTree prefix protate pscale ptranslate \ + ocenter opendb orotate oscale otranslate p packTree prefix protate pscale ptranslate \ push put put_comb putmat pwd r rcodes red rfarb rm rmater \ rotate_arb_face search sed shader shells tire title track \ unhide units unpackTree \ vmake wmater xpush Z zap } + + # Commands in this list get passed directly to the Ged object variable mUnwrappedDbCommands {} + + variable mPreOpenDbCommands {opendb} + variable mBannedDbCommands { dbip open rtabort shaded_mode } @@ -1030,6 +1037,7 @@ initImages initTreeImages + after idle "$itk_component(cmd) configure -cmd_prefix \"[namespace tail $this] preDbOpenCmd\"" $itk_component(primaryToolbar) itemconfigure open -state normal @@ -2526,14 +2534,6 @@ update idletasks } -::itcl::body ArcherCore::gedCmd {args} { - if {![info exists itk_component(ged)]} { - return - } - - return [eval $itk_component(ged) $args] -} - ::itcl::body ArcherCore::cmd {args} { set cmd [lindex $args 0] if {$cmd == ""} { @@ -2580,6 +2580,53 @@ error "ArcherCore::cmd: unrecognized command - $args, check source code" } +::itcl::body ArcherCore::gedCmd {args} { + if {![info exists itk_component(ged)]} { + return + } + + return [eval $itk_component(ged) $args] +} + +::itcl::body ArcherCore::preDbOpenCmd {args} { + set cmd [lindex $args 0] + if {$cmd == ""} { + return + } + + set arg1 [lindex $args 1] + if {$cmd == "info"} { + switch $arg1 { + function { + if {[llength $args] == 3} { + set subcmd [lindex $args 2] + if {[lsearch $mPreOpenDbCommands $subcmd] == -1} { + error "ArcherCore::preDbOpenCmd: unrecognized command - $subcmd" + } else { + return $subcmd + } + } else { + return $mPreOpenDbCommands + } + } + class { + return [info class] + } + default { + return + } + } + } + + set i [lsearch -exact $mPreOpenDbCommands $cmd] + if {$i != -1} { + addHistory $args + return [eval $args] + } + + error "ArcherCore::preDbOpenCmd: unrecognized command - $args" +} + # ------------------------------------------------------------ # DB/DISPLAY COMMANDS # ------------------------------------------------------------ @@ -3796,7 +3843,7 @@ grid forget $itk_component(canvas) if {!$mViewOnly} { grid $itk_component(ged) -row 1 -column 0 -columnspan 3 -sticky news - after idle "$this component cmd configure -cmd_prefix \"[namespace tail $this] cmd\"" + after idle "$itk_component(cmd) configure -cmd_prefix \"[namespace tail $this] cmd\"" } else { grid $itk_component(ged) -row 1 -column 0 -sticky news } @@ -4794,6 +4841,16 @@ } } +::itcl::body ArcherCore::opendb {args} { + set len [llength $args] + + if {$len != 1} { + return "Usage: opendb dbfile" + } + + Load [lindex $args 0] +} + ::itcl::body ArcherCore::orotate {args} { set result [eval gedWrapper orotate 0 0 1 0 $args] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-05-07 18:12:39
|
Revision: 39084 http://brlcad.svn.sourceforge.net/brlcad/?rev=39084&view=rev Author: bob1961 Date: 2010-05-07 18:12:33 +0000 (Fri, 07 May 2010) Log Message: ----------- The handleTreeOpen method now checks to see if we're in list view mode. The setTreeView method has be updated to set the wait cursor. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-05-07 18:05:46 UTC (rev 39083) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-05-07 18:12:33 UTC (rev 39084) @@ -3470,6 +3470,10 @@ } ::itcl::body ArcherCore::handleTreeOpen {} { + if {$mEnableListView} { + return + } + SetWaitCursor $this set cnode [$itk_component(newtree) focus] @@ -3676,6 +3680,8 @@ } ::itcl::body ArcherCore::setTreeView {{_rflag 0}} { + SetWaitCursor $this + if {$mEnableListView} { set text "Show Tree" } else { @@ -3696,6 +3702,8 @@ } } } + + SetNormalCursor $this } ::itcl::body ArcherCore::toggleTreeView {} { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-05-12 20:23:21
|
Revision: 39160 http://brlcad.svn.sourceforge.net/brlcad/?rev=39160&view=rev Author: bob1961 Date: 2010-05-12 20:23:14 +0000 (Wed, 12 May 2010) Log Message: ----------- -modelAxesTickEnabled changed to -modelAxesTickEnable for consistency Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-05-12 20:19:16 UTC (rev 39159) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-05-12 20:23:14 UTC (rev 39160) @@ -2914,7 +2914,7 @@ } set mShowModelAxes [gedCmd cget -modelAxesEnable] - set mShowModelAxesTicks [gedCmd cget -modelAxesTickEnabled] + set mShowModelAxesTicks [gedCmd cget -modelAxesTickEnable] set mShowViewAxes [gedCmd cget -viewAxesEnable] set mShowGrid [gedCmd cget -gridEnable] set mSnapGrid [gedCmd cget -gridSnap] @@ -2998,7 +2998,7 @@ } ::itcl::body ArcherCore::showModelAxesTicks {} { - catch {gedCmd configure -modelAxesTickEnabled $mShowModelAxesTicks} + catch {gedCmd configure -modelAxesTickEnable $mShowModelAxesTicks} } ::itcl::body ArcherCore::showGrid {} { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-08-11 13:52:48
|
Revision: 40102 http://brlcad.svn.sourceforge.net/brlcad/?rev=40102&view=rev Author: bob1961 Date: 2010-08-11 13:52:42 +0000 (Wed, 11 Aug 2010) Log Message: ----------- Membership operator was missing for leaves. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-08-11 13:42:09 UTC (rev 40101) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-08-11 13:52:42 UTC (rev 40102) @@ -3135,7 +3135,8 @@ } } else { set isregion [isRegion $cgdata] - set img [getTreeImage $_ctext $ctype "" $isregion] + set op [getTreeOp $ptext $_ctext] + set img [getTreeImage $_ctext $ctype $op $isregion] set cnode [$itk_component(newtree) insert $_pnode end \ -tags $TREE_POPUP_TAG \ -text $_ctext \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bo...@us...> - 2010-08-13 19:47:06
|
Revision: 40156 http://brlcad.svn.sourceforge.net/brlcad/?rev=40156&view=rev Author: bob1961 Date: 2010-08-13 19:46:58 +0000 (Fri, 13 Aug 2010) Log Message: ----------- Modified how the fillTree and handleTreeOpen methods add placeholders. Added new methods: treeNodeHasBeenOpened, treeNodeIsOpen and purgeNodeData. Modified Paths: -------------- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-08-13 17:50:13 UTC (rev 40155) +++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl 2010-08-13 19:46:58 UTC (rev 40156) @@ -716,6 +716,9 @@ method selectTreePath {_path} method setTreeView {{_rflag 0}} method toggleTreeView {} + method treeNodeHasBeenOpened {_node} + method treeNodeIsOpen {_node} + method purgeNodeData {_node} # db/display commands method getNodeChildren {_node} @@ -3129,10 +3132,7 @@ -image $img] fillTreeColumns $cnode $_ctext - - if {$_pnode == {}} { - addTreePlaceholder $cnode - } + addTreePlaceholder $cnode } else { set isregion [isRegion $cgdata] set op [getTreeOp $ptext $_ctext] @@ -3637,15 +3637,6 @@ # Add gchild members fillTree $cnode $gctext - - set gctype [lindex $gcgdata 0] - - if {$gctype == "comb"} { - set gcnode [getCNodeFromCText $cnode $gctext] - - # Add a placeholder for gcnode's possible members - addTreePlaceholder $gcnode - } } } } @@ -3838,6 +3829,80 @@ setTreeView 1 } +::itcl::body ArcherCore::treeNodeHasBeenOpened {_node} { + set tags [$itk_component(newtree) item $_node -tags] + set ai [lsearch $tags $TREE_OPENED_TAG] + if {$ai == -1} { + return 0 + } + + return 1 +} + +::itcl::body ArcherCore::treeNodeIsOpen {_node} { + return [$itk_component(newtree) item $_node -open] +} + +# +# Delete any use of _node and its descendents in the data +# variables that are used to interact with the tree viewer. +# +::itcl::body ArcherCore::purgeNodeData {_node} { + if {[info exists mPNode2CList($_node)]} { + foreach sublist $mPNode2CList($_node) { + if {[lindex $sublist 0] != $TREE_PLACEHOLDER_TAG} { + purgeNodeData [lindex $sublist 1] + } + } + } + + set name $mNode2Text($_node) + if {[info exists mText2Node($name)]} { + set leftovers {} + foreach sublist $mText2Node($name) { + if {$_node != [lindex $sublist 0]} { + lappend leftovers $sublist + } + } + + if {$leftovers != {}} { + set mText2Node($name) $leftovers + } else { + unset mText2Node($name) + } + } + + set pnode [lindex $mCNode2PList($_node) 1] + if {[info exists mPNode2CList($pnode)]} { + set leftovers {} + foreach sublist $mPNode2CList($pnode) { + if {$_node != [lindex $sublist 1]} { + lappend leftovers $sublist + } + } + + if {$leftovers != {}} { + set mPNode2CList($pnode) $leftovers + } else { + unset mPNode2CList($pnode) + } + } + + unset mNode2Text($_node) + unset mCNode2PList($_node) + + set i [lsearch $mNodePDrawList $_node] + if {$i != -1} { + set mNodePDrawList [lreplace $mNodePDrawList $i $i] + } + + set i [lsearch $mNodeDrawList $_node] + if {$i != -1} { + set mNodeDrawList [lreplace $mNodeDrawList $i $i] + } +} + + # ------------------------------------------------------------ # GENERAL # ------------------------------------------------------------ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |