Ignore:
Timestamp:
Jul 13, 2014, 10:12:30 PM (10 years ago)
Author:
ldelgass
Message:

merge flow fixes from trunk

Location:
branches/1.3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/1.3

  • branches/1.3/gui/scripts/field.tcl

    r4491 r4494  
    157157
    158158    private method VerifyVtkDataSet { contents }
     159    private method VectorLimits { vector vectorsize {comp -1} }
    159160    private variable _values ""
    160161}
     
    317318    }
    318319    if {[info exists _comp2dx($cname)]} {
    319         return ""  ;# no mesh -- it's embedded in the value data
     320        return ""  ;# no mesh -- it's embedded in the blob data
    320321    }
    321322    if {[info exists _comp2mesh($cname)]} {
     
    461462            }
    462463            2D - 3D {
    463                 if {[info exists _comp2unirect3d($cname)]} {
    464                     set limits [$_comp2unirect3d($cname) limits $which]
    465                     foreach {axisMin axisMax} $limits break
    466                     set axis v
    467                 } elseif {[info exists _comp2limits($cname)]} {
     464                if {[info exists _comp2limits($cname)]} {
    468465                    array set limits $_comp2limits($cname)
    469466                    switch -- $which {
     
    12481245    set numArrays [$dataAttrs GetNumberOfArrays]
    12491246    if { $numArrays > 0 } {
    1250         set array [$dataAttrs GetArray 0]
    1251         # Calling GetRange with component set to -1 will return
    1252         # either the scalar range or vector magnitude range
    1253         foreach {vmin vmax} [$array GetRange -1] break
    1254 
    12551247        for {set i 0} {$i < [$dataAttrs GetNumberOfArrays] } {incr i} {
    12561248            set array [$dataAttrs GetArray $i]
    12571249            set fname  [$dataAttrs GetArrayName $i]
    12581250            foreach {min max} [$array GetRange -1] break
     1251            if {$i == 0} {
     1252                set vmin $min
     1253                set vmax $max
     1254            }
    12591255            lappend limits $fname [list $min $max]
    12601256            set _fld2Units($fname) ""
     
    13971393            set vectorsize 1
    13981394        }
     1395        set _type unirect3d
    13991396        set _dim 3
    14001397        if { $_viewer == "" } {
     
    14051402            [Rappture::Unirect3d \#auto $_xmlobj $_field $cname $vectorsize]
    14061403        set _comp2style($cname) [$_field get $cname.style]
     1404        set limits {}
     1405        foreach axis { x y z } {
     1406            lappend limits $axis [$_comp2unirect3d($cname) limits $axis]
     1407        }
     1408        # Get the data limits
     1409        set vector [$_comp2unirect3d($cname) valuesObj]
     1410        set minmax [VectorLimits $vector $vectorsize]
     1411        lappend limits $cname $minmax
     1412        lappend limits v      $minmax
     1413        set _comp2limits($cname) $limits
    14071414        if {[$_field element $cname.flow] != ""} {
    14081415            set _comp2flowhints($cname) \
     
    14191426            set vectorsize 1
    14201427        }
     1428        set _type unirect2d
    14211429        set _dim 2
    14221430        if { $_viewer == "" } {
     
    14361444        set xv [blt::vector create \#auto]
    14371445        $xv set $_values
    1438         lappend limits $cname [$xv limits]
    1439         lappend limits v [$xv limits]
     1446        set minmax [VectorLimits $xv $vectorsize]
     1447        lappend limits $cname $minmax
     1448        lappend limits v $minmax
    14401449        blt::vector destroy $xv
    14411450        set _comp2limits($cname) $limits
     
    14461455        "cloud" {
    14471456            set mesh [Rappture::Cloud::fetch $_xmlobj $path]
     1457            set _type cloud
    14481458        }
    14491459        "mesh" {
    14501460            set mesh [Rappture::Mesh::fetch $_xmlobj $path]
     1461            set _type mesh
    14511462        }           
    14521463        "unirect2d" {
     
    14551466            }
    14561467            set mesh [Rappture::Unirect2d::fetch $_xmlobj $path]
     1468            set _type unirect2d
    14571469        }
    14581470    }
     
    15041516    if {$_dim == 2} {
    15051517        # 2D data: By default surface or contour plot using heightmap widget.
    1506         set _type "heightmap"
    15071518        set v [blt::vector create \#auto]
    15081519        $v set [$_field get $cname.values]
     
    15361547        set _comp2mesh($cname) [list $mesh $v]
    15371548        set _comp2style($cname) [$_field get $cname.style]
     1549        if {[$_field element $cname.flow] != ""} {
     1550            set _comp2flowhints($cname) \
     1551                [Rappture::FlowHints ::\#auto $_field $cname $_units]
     1552        }
    15381553        incr _counter
    15391554        array unset _comp2limits $cname
     
    15411556            lappend _comp2limits($cname) $axis [$mesh limits $axis]
    15421557        }
    1543         lappend _comp2limits($cname) $cname [$v limits]
    1544         lappend _comp2limits($cname) v [$v limits]
     1558        set minmax [VectorLimits $v $_comp2size($cname)]
     1559        lappend _comp2limits($cname) $cname $minmax
     1560        lappend _comp2limits($cname) v $minmax
    15451561        return 1
    15461562    }
     
    15501566            set _viewer "isosurface"
    15511567        }
    1552         set _type "isosurface"
    15531568        set v [blt::vector create \#auto]
    15541569        $v set [$_field get $cname.values]
     
    15791594        set _comp2mesh($cname) [list $mesh $v]
    15801595        set _comp2style($cname) [$_field get $cname.style]
     1596        if {[$_field element $cname.flow] != ""} {
     1597            set _comp2flowhints($cname) \
     1598                [Rappture::FlowHints ::\#auto $_field $cname $_units]
     1599        }
    15811600        incr _counter
    15821601        foreach axis { x y z } {
    15831602            lappend _comp2limits($cname) $axis [$mesh limits $axis]
    15841603        }
    1585         lappend _comp2limits($cname) $cname [$v limits]
    1586         lappend _comp2limits($cname) v [$v limits]
     1604        set minmax [VectorLimits $v $_comp2size($cname)]
     1605        lappend _comp2limits($cname) $cname $minmax
     1606        lappend _comp2limits($cname) v $minmax
    15871607        return 1
    15881608    }
     
    16631683    }
    16641684}
     1685
     1686#
     1687# Compute the per-component limits or limits of vector magnitudes
     1688#
     1689itcl::body Rappture::Field::VectorLimits {vector vectorsize {comp -1}} {
     1690    if {$vectorsize == 1} {
     1691        set minmax [$vector limits]
     1692    } else {
     1693        set len [$vector length]
     1694        if {[expr $len % $vectorsize] != 0} {
     1695            error "Invalid vectorsize: $vectorsize"
     1696        }
     1697        if {$comp > $vectorsize-1} {
     1698            error "Invalid vector component: $comp"
     1699        }
     1700        set numTuples [expr ($len/$vectorsize)]
     1701        for {set i 0} {$i < $numTuples} {incr i} {
     1702            if {$comp >= 0} {
     1703                set idx [expr ($i * $vectorsize + $comp)]
     1704                set val [$vector index $idx]
     1705            } else {
     1706                set idx [expr ($i * $vectorsize)]
     1707                set mag 0
     1708                for {set j 0} {$j < $vectorsize} {incr j} {
     1709                    set val [$vector index $idx]
     1710                    set mag [expr ($mag + $val * $val)]
     1711                    incr idx
     1712                }
     1713                set val [expr (sqrt($mag))]
     1714            }
     1715            if (![info exists minmax]) {
     1716                set minmax [list $val $val]
     1717            } else {
     1718                if {$val < [lindex $minmax 0]} {
     1719                    lset minmax 0 $val
     1720                }
     1721                if {$val > [lindex $minmax 1]} {
     1722                    lset minmax 1 $val
     1723                }
     1724            }
     1725        }
     1726    }
     1727    return $minmax
     1728}
Note: See TracChangeset for help on using the changeset viewer.