Ignore:
Timestamp:
Oct 8, 2014, 10:27:06 AM (10 years ago)
Author:
ldelgass
Message:

Initial test of selection box

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gui/scripts/mapviewer.tcl

    r4637 r4646  
    7070    protected method CurrentLayers {args}
    7171    protected method Disconnect {}
     72    protected method DoPan {}
    7273    protected method DoResize {}
    7374    protected method DoRotate {}
     
    8889    protected method ReceiveImage { args }
    8990    protected method Rotate {option x y}
     91    protected method Select {option x y}
    9092    protected method Zoom {option {x 0} {y 0}}
    9193
     
    9698    private method BuildTerrainTab {}
    9799    private method ChangeLayerVisibility { dataobj layer }
    98     private method EventuallyHandleMotionEvent { x y }
     100    private method EventuallyHandleMotionEvent { x y }
     101    private method EventuallyPan { dx dy }
    99102    private method EventuallyResize { w h }
    100103    private method EventuallyRotate { dx dy }
     
    115118    private variable _click;            # info used for rotate operations
    116119    private variable _view;             # view params for 3D view
     120    private variable _pan;
     121    private variable _rotate;
     122    private variable _motion;
    117123    private variable _settings
    118124    private variable _visibility
     
    122128                                        # needs to be reinitialized.
    123129    private variable _initCamera 1;
    124     private variable _haveTerrain 0
     130    private variable _haveTerrain 0;
    125131
    126132    private variable _first ""     ;# This is the topmost dataset.
     
    133139    private variable _height 0
    134140    private variable _resizePending 0
    135     private variable _rotatePending 0
    136     private variable _rotateDelay 150
    137     private variable _motion
    138141    private variable _sendEarthFile 0
    139142    private variable _useServerManip 0
    140143    private variable _labelCount 0
     144    private variable _b1mode "pan"
    141145}
    142146
     
    161165    $_dispatcher register !resize
    162166    $_dispatcher dispatch $this !resize "[itcl::code $this DoResize]; list"
     167
     168    # Pan event
     169    $_dispatcher register !pan
     170    $_dispatcher dispatch $this !pan "[itcl::code $this DoPan]; list"
    163171
    164172    # Rotate event
     
    187195        x               0
    188196        y               0
     197    }
     198    array set _pan {
     199        compress        1
     200        delay           100
     201        pending         0
     202        x               0
     203        y               0
     204    }
     205    array set _rotate {
     206        azimuth         0
     207        compress        1
     208        delay           100
     209        elevation       0
     210        pending         0
    189211    }
    190212    # This array holds the Viewpoint parameters that the
     
    366388            +[itcl::code $this Pin delete %x %y]
    367389
     390        bind $itk_component(view) <Shift-ButtonPress-1> \
     391            [itcl::code $this Select click %x %y]
     392        bind $itk_component(view) <B1-Motion> \
     393            +[itcl::code $this Select drag %x %y]
     394        bind $itk_component(view) <Shift-ButtonRelease-1> \
     395            +[itcl::code $this Select release %x %y]
     396
     397        if {1} {
    368398        # Bindings for rotation via mouse
    369399        bind $itk_component(view) <ButtonPress-2> \
     
    373403        bind $itk_component(view) <ButtonRelease-2> \
    374404            [itcl::code $this Rotate release %x %y]
     405        }
    375406
    376407        # Bindings for zoom via mouse
     
    473504
    474505itcl::body Rappture::MapViewer::DoRotate {} {
    475     SendCmd "camera rotate $_view(azimuth) $_view(elevation)"
    476     set _rotatePending 0
     506    SendCmd "camera rotate $_rotate(azimuth) $_rotate(elevation)"
     507    set _rotate(azimuth) 0
     508    set _rotate(elevation) 0
     509    set _rotate(pending) 0
    477510}
    478511
     
    486519}
    487520
     521itcl::body Rappture::MapViewer::DoPan {} {
     522    SendCmd "camera pan $_pan(x) $_pan(y)"
     523    set _pan(x) 0
     524    set _pan(y) 0
     525    set _pan(pending) 0
     526}
     527
     528itcl::body Rappture::MapViewer::EventuallyPan { dx dy } {
     529    set _pan(x) [expr $_pan(x) + $dx]
     530    set _pan(y) [expr $_pan(y) + $dy]
     531    if { !$_pan(compress) } {
     532        DoPan
     533        return
     534    }
     535    if { !$_pan(pending) } {
     536        set _pan(pending) 1
     537        $_dispatcher event -after $_pan(delay) !pan
     538    }
     539}
     540
    488541itcl::body Rappture::MapViewer::EventuallyRotate { dx dy } {
    489     set _view(azimuth) $dx
    490     set _view(elevation) $dy
    491     if { !$_rotatePending } {
    492         set _rotatePending 1
    493         $_dispatcher event -after $_rotateDelay !rotate
     542    set _rotate(azimuth) [expr $_rotate(azimuth) + $dx]
     543    set _rotate(elevation) [expr $_rotate(elevation) + $dy]
     544    if { !$_rotate(compress) } {
     545        DoRotate
     546        return
     547    }
     548    if { !$_rotate(pending) } {
     549        set _rotate(pending) 1
     550        $_dispatcher event -after $_rotate(delay) !rotate
    494551    }
    495552}
     
    845902    VisViewer::Disconnect
    846903
     904    $_dispatcher cancel !pan
     905    $_dispatcher cancel !motion
    847906    $_dispatcher cancel !rebuild
    848907    $_dispatcher cancel !resize
    849908    $_dispatcher cancel !rotate
    850     $_dispatcher cancel !motion
    851909    # disconnected -- no more data sitting on server
    852910    array unset _layers
     
    12651323            set _click(x) $x
    12661324            set _click(y) $y
     1325            set _rotate(azimuth) 0
     1326            set _rotate(elevation) 0
    12671327        }
    12681328        "drag" {
     
    12801340                set _click(y) $y
    12811341                if {[expr (abs($dx) > 0.0 || abs($dy) > 0.0)]} {
    1282                     SendCmd "camera rotate $dx $dy"
    1283                     #EventuallyRotate $dx $dy
     1342                    #SendCmd "camera rotate $dx $dy"
     1343                    EventuallyRotate $dx $dy
    12841344                }
    12851345            }
     
    12921352        default {
    12931353            error "bad option \"$option\": should be click, drag, release"
     1354        }
     1355    }
     1356}
     1357
     1358itcl::body Rappture::MapViewer::Select {option x y} {
     1359    switch -- $option {
     1360        "click" {
     1361            set _click(x) $x
     1362            set _click(y) $y
     1363            set _b1mode "select"
     1364            SendCmd "map box init $x $y"
     1365        }
     1366        "drag" {
     1367            if {$_b1mode == "select"} {
     1368                SendCmd "map box update $x $y"
     1369            }
     1370        }
     1371        "release" {
     1372            set _b1mode ""
     1373            if {$_click(x) == $x &&
     1374                $_click(y) == $y} {
     1375                SendCmd "map box clear"
     1376            }
    12941377        }
    12951378    }
     
    13351418            set _click(x) $x
    13361419            set _click(y) $y
     1420            set _pan(x) 0
     1421            set _pan(y) 0
    13371422            $itk_component(view) configure -cursor hand1
     1423            set _b1mode "pan"
    13381424        }
    13391425        "drag" {
     1426            if {$_b1mode != "pan"} {
     1427                return
     1428            }
    13401429            if { ![info exists _click(x)] } {
    13411430                set _click(x) $x
     
    13511440            set _click(y) $y
    13521441            if {[expr (abs($dx) > 0.0 || abs($dy) > 0.0)]} {
    1353                 SendCmd "camera pan $dx $dy"
     1442                EventuallyPan $dx $dy
     1443                #SendCmd "camera pan $dx $dy"
    13541444            }
    13551445        }
     
    13571447            Pan drag $x $y
    13581448            $itk_component(view) configure -cursor ""
     1449            set _b1mode ""
    13591450        }
    13601451        default {
Note: See TracChangeset for help on using the changeset viewer.