# # Copyright 2002 (c) Pointwise, Inc. # All rights reserved. # # This sample Gridgen script is not supported by Pointwise, Inc. # It is provided freely for demonstration purposes only. # SEE THE WARRANTY DISCLAIMER AT THE BOTTOM OF THIS FILE. # # Creates a small GUI for principal axis orientations gg::tkLoad global invalidColor global myVars global myButs global validInput set invalidColor "#FFCCCC" set myVars(angleX) 0.0 set myVars(angleY) 0.0 set myVars(angleZ) 0.0 set myVars(relative) 0 foreach var [array names myVars] { set validInput($var) 1 } ######################################################################## # PROC: cbRot # callback procedure that applies rotation transforms proc cbRot { } { global myVars if {0 == $myVars(relative)} { gg::dispViewReset -rotation -pan -zoom } gg::dispViewRot X $myVars(angleX) gg::dispViewRot Y $myVars(angleY) gg::dispViewRot Z $myVars(angleZ) } ######################################################################## # PROC: cbClear # resets angles to zero proc cbClear { } { global myVars set myVars(angleX) 0.0 set myVars(angleY) 0.0 set myVars(angleZ) 0.0 } ######################################################################## # PROC: checkInput # proc checkInput { w var text action } { global invalidColor global myVars global myButs global validInput # Ignore forced validations if {$action == -1} { return 1 } if {![string is double $text]} { set okay 0 } elseif { [string equal "" $text] || abs($text) > 360.0 } { set okay 0 } else { set okay 1 } if { $okay == 0 } { $w configure -bg $invalidColor } else { $w configure -bg white } set validInput($var) $okay set okay 1 foreach var [array names myVars] { if {$validInput($var) == 0} { set okay 0 break } } if {$okay} { $myButs(apply) configure -state normal } else { $myButs(apply) configure -state disabled } return 1 } ######################################################################## # PROC: buildWidgets # proc buildWidgets {} { global myVars global myButs set butWid 7 set top . wm title $top "DispRotByAngle" # Create a label for the title set l [label $top.title -text "Body Axis Rotation"] # Get the default font and increase the size slightly for the label set font [$l cget -font] set fontFamily [font actual $font -family] set fontSize [font actual $font -size] set bigLabelFont [font create -family fontFamily -weight bold \ -size [expr {2 * $fontSize}]] $l configure -font $bigLabelFont pack $l -side top -fill x -pady 5 # Add a separator set f [frame $top.hr1 -height 2 -relief sunken -borderwidth 1] pack $f -side top -fill x -expand true set relBut [checkbutton $top.checkRel -text "Relative to Current" \ -indicatoron TRUE -variable myVars(relative)] pack $relBut -side top -expand false # Add a frame to hold the XY, YZ, and ZX buttons set f [frame $top.frameXY] # 3 entry widgets for X, Y, and Z angles set labelX "$f.label1" label $labelX -text "X:" -anchor w set enterX [entry "$f.entry1" -width $butWid -textvariable myVars(angleX) \ -validate all -vcmd [list checkInput %W angleX %P %d]] set labelY [label "$f.label2" -text "Y:" -anchor w] set enterY [entry "$f.entry2" -width $butWid -textvariable myVars(angleY) \ -validate all -vcmd [list checkInput %W angleY %P %d]] set labelZ [label "$f.label3" -text "Z:" -anchor w] set enterZ [entry "$f.entry3" -width $butWid -textvariable myVars(angleZ) \ -validate all -vcmd [list checkInput %W angleZ %P %d]] # Place widgets and make visible pack $labelX -side left pack $enterX -side left -padx 5 pack $labelY -side left pack $enterY -side left -padx 5 pack $labelZ -side left pack $enterZ -side left -padx 5 pack $f -side top -pady 5 # Add another separator # set f [frame $top.hr2 -height 2 -relief sunken -borderwidth 1] # pack $f -side top -fill x -expand true # Apply set myButs(apply) [button "$top.apply" -text "Apply" -width $butWid \ -command [list cbRot] ] pack $myButs(apply) -side left -pady 5 -padx 12 # Reset set myButs(clear) [button "$top.clear" -text "Clear" -width $butWid \ -command [list cbClear] ] pack $myButs(clear) -side left -pady 5 -padx 7 # Close set butCancel [button "$top.close" -text "Close" -width $butWid \ -command exit] pack $butCancel -side right -pady 5 -padx 5 } buildWidgets gg::tkLoop # # DISCLAIMER: # TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, POINTWISE DISCLAIMS # ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED # TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE, WITH REGARD TO THIS SCRIPT. TO THE MAXIMUM EXTENT PERMITTED # BY APPLICABLE LAW, IN NO EVENT SHALL POINTWISE BE LIABLE TO ANY PARTY # FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES # WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF # BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE # USE OF OR INABILITY TO USE THIS SCRIPT EVEN IF POINTWISE HAS BEEN # ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE # FAULT OR NEGLIGENCE OF POINTWISE. #