can't find package tcl3d 0.3.2
    while executing
"package require tcl3d 0.3.2"
    (in namespace eval "::request" script line 14)
    invoked from within
"namespace eval ::request $script"
    ("::try" body line 12)

OUTPUT BUFFER:

# Copyright: 2005-2006 Paul Obermeier (obermeier@poSoft.de) # # See the file "Tcl3D_License.txt" for information on # usage and redistribution of this file, and for a # DISCLAIMER OF ALL WARRANTIES. # # Module: Tcl3D -> tcl3dOgl # Filename: spheres.tcl # # Author: Paul Obermeier # # Description: Tcl3D demo displaying spheres in various modes. package require tcl3d 0.3.2 set BUFSIZE 512 set selectBuffer [tcl3dVector GLuint $::BUFSIZE] set cx 0 set cy 0 set no_mat { 0.0 0.0 0.0 1.0 } set mat_ambient { 0.7 0.7 0.7 1.0 } set mat_ambient_color { 0.8 0.8 0.2 1.0 } set mat_diffuse { 0.1 0.5 0.8 1.0 } set mat_specular { 1.0 1.0 1.0 1.0 } set no_shininess { 0.0 } set low_shininess { 5.0 } set high_shininess { 100.0 } set mat_emission {0.3 0.2 0.2 0.0} set frameCount 0 # Create a stop watch for time measurement. set stopwatch [tcl3dNewSwatch] # Set the name of the PDF output file. set scriptFile [info script] set pdfFile [format "%s.%s" [file rootname $scriptFile] "pdf"] if { [info proc tcl3dGenExtName] eq "tcl3dGenExtName" } { # Create a name on the file system, if running from within a Starpack. set pdfFile [tcl3dGenExtName $pdfFile] } # Initialisation set pgl(xCen) 0.0 set pgl(yCen) 0.0 set pgl(zCen) 0.0 set pgl(xRot) 0.0 set pgl(yRot) 0.0 set pgl(xTra) 0.0 set pgl(yTra) 0.0 set DoCenter 0 set Transform [tcl3dVector GLfloat 16] tcl3dMatfIdentity $Transform set TransformList [tcl3dVectorToList $Transform 16] ####################################### ####################################### ####################################### proc Mouse2 {quoi x y win} { global pgl cx cy # rotation X et Y switch $quoi { "RotXY" { if { abs($cx-$x) < 5 && abs($cy-$y) < 5 } {return} set pgl(xRot) [expr {$cx-$x}] set pgl(yRot) [expr {$cy-$y}] } "TraXY" { if { $cx == $x && $cy == $y } {return} set Rad 5. set rx [expr {1.5*$Rad*($x-$cx)/500}] set ry [expr {1.5*$Rad*($y-$cy)/500}] # set pgl(yTra) [expr {$pgl(yTra) - $ry}] # set pgl(xTra) [expr {$pgl(xTra) + $rx}] set pgl(yTra) [expr {1.0*$ry}] set pgl(xTra) $rx } } set cx $x set cy $y $win postredisplay return } proc Mouse {quoi x y win} { global pgl cx cy # rotation X et Y switch $quoi { "RotXY" { if { abs($cx-$x) < 5 && abs($cy-$y) < 5 } {return} glMatrixMode GL_MODELVIEW set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef [expr {$cy-$y}] [lindex $mvList 0] [lindex $mvList 4] [lindex $mvList 8] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef [expr {$cx-$x}] [lindex $mvList 1] [lindex $mvList 5] [lindex $mvList 9] } "TraXY" { if { $cx == $x && $cy == $y } {return} # empiric constant 1.5 set Rad 5. set rx [expr {1.5*$Rad*($x-$cx)/500}] set ry [expr {1.5*$Rad*($y-$cy)/500}] set pgl(yTra) [expr {$pgl(yTra) - $ry}] set pgl(xTra) [expr {$pgl(xTra) + $rx}] glMatrixMode GL_PROJECTION glLoadIdentity glOrtho \ [expr {-5.-$pgl(xTra)}] \ [expr { 5.-$pgl(xTra)}] \ [expr {-5.-$pgl(yTra)}] \ [expr { 5.-$pgl(yTra)}] \ 15. \ -15. glMatrixMode GL_MODELVIEW } } set cx $x set cy $y $win postredisplay return } proc InvModmat {} { package require La catch {namespace import ::La::*} glMatrixMode GL_MODELVIEW set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] set Id [mident 4] set pre [list 2 4 4] set A [concat $pre $mvList] set B [msolve $A $Id] foreach {a b c d} [lrange $B 3 end] {x y z w} $mvList { puts [format "%6.3f %6.3f %6.3f %6.3f | %6.3f %6.3f %6.3f %6.3f" $x $y $z $w $a $b $c $d] } puts "" return } proc nolight_color3f {r g b} { set c 0.4 glColor3f [expr {$r/$c}] [expr {$g/$c}] [expr {$b/$c}] return } proc dont_use_light {} { glColorMaterial GL_FRONT_AND_BACK GL_DIFFUSE glColor3f 0.0 0.0 0.0 glColorMaterial GL_FRONT_AND_BACK GL_SPECULAR glColor3f 0.0 0.0 0.0 # next calls to glColor will affect GL_AMBIENT composante glColorMaterial GL_FRONT_AND_BACK GL_AMBIENT return } proc printString { str font } { glListBase $font set len [string length $str] set sa [tcl3dVectorFromString GLubyte $str] glCallLists $len GL_UNSIGNED_BYTE $sa $sa delete return } proc disp_string {} { global FontBase global Pck Cor foreach p [array names Pck] { if {! [set Pck($p)]} {continue} foreach {x y z} [set Cor($p)] {} set text "Text P${p}" # recup de la matrice de modelisation set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set modmat [tcl3dVectorToList $mvmatrix 16] # recup de la matrice de projection set pjmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_PROJECTION_MATRIX $pjmatrix set projmat [tcl3dVectorToList $pjmatrix 16] # Recup du viewport set viewmat [tcl3dVector GLint 4] glGetIntegerv GL_VIEWPORT $viewmat set viewport [tcl3dVectorToList $viewmat 4] # print the string glMatrixMode GL_MODELVIEW glPushMatrix glLoadIdentity set xa [expr {[lindex $modmat 0]*$x + [lindex $modmat 4]*$y + [lindex $modmat 8]*$z + [lindex $modmat 12]}] set ya [expr {[lindex $modmat 1]*$x + [lindex $modmat 5]*$y + [lindex $modmat 9]*$z + [lindex $modmat 13]}] set za [expr {[lindex $modmat 2]*$x + [lindex $modmat 6]*$y + [lindex $modmat 10]*$z + [lindex $modmat 14]}] glColor3f 0.0 1.0 0.0 glRasterPos3f $xa $ya $za printString $text $FontBase glPopMatrix glFlush } return } proc processHits { hits } { global AtomePique global Cor Pck set count 0 set PickA "" set Pris 0 for { set i 0 } { $i < $hits } { incr i } { set names [$::selectBuffer get $count] puts " number of names for hit = $names" incr count puts -nonewline [format " z1 is %g;" \ [expr double ([$::selectBuffer get $count]) / 0x7fffffff]] incr count puts [format " z2 is %g" \ [expr double ([$::selectBuffer get $count]) / 0x7fffffff]] incr count puts -nonewline " the name is " for { set j 0 } { $j < $names } { incr j } { puts -nonewline [format "%d " [$::selectBuffer get $count]] set PickA [$::selectBuffer get $count] set Pck($PickA) 1 if {! $Pris} {set Pris 1} incr count set AtomePique $PickA } puts "" } return } proc XYZCenterAtom {} { global AtomePique global Cor global pgl if {$AtomePique eq ""} {return} foreach {x y z} [set Cor($AtomePique)] {} set pgl(xCen) $x set pgl(yCen) $y set pgl(zCen) $z set AtomePique "" return # recup de la matrice de modelisation set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set modmat [tcl3dVectorToList $mvmatrix 16] # set pgl(xCen) [expr {[lindex $modmat 0]*$x + [lindex $modmat 4]*$y + [lindex $modmat 8]*$z + [lindex $modmat 12]}] # set pgl(xCen) [expr {[lindex $modmat 0]*$x + [lindex $modmat 4]*$y + [lindex $modmat 8]*$z - $pgl(xTra)}] set pgl(xCen) [expr {[lindex $modmat 0]*$x + [lindex $modmat 1]*$y + [lindex $modmat 2]*$z}] # set pgl(yCen) [expr {[lindex $modmat 1]*$x + [lindex $modmat 5]*$y + [lindex $modmat 9]*$z + [lindex $modmat 13]}] # set pgl(yCen) [expr {[lindex $modmat 1]*$x + [lindex $modmat 5]*$y + [lindex $modmat 9]*$z - $pgl(yTra)}] set pgl(yCen) [expr {[lindex $modmat 4]*$x + [lindex $modmat 5]*$y + [lindex $modmat 6]*$z}] # set pgl(zCen) [expr {[lindex $modmat 2]*$x + [lindex $modmat 6]*$y + [lindex $modmat 10]*$z + [lindex $modmat 14]}] # set pgl(zCen) [expr {[lindex $modmat 2]*$x + [lindex $modmat 6]*$y + [lindex $modmat 10]*$z + 0.0}] set pgl(zCen) [expr {[lindex $modmat 8]*$x + [lindex $modmat 9]*$y + [lindex $modmat 10]*$z}] set AtomePique "" return } proc CenterAtom {x y win} { global AtomePique pgl global cx cy DoCenter set hits [DonneatomePique $x $y] if {! $hits} {return} global Pck foreach e [array names Pck] {set Pck($e) 0} processHits $hits XYZCenterAtom set pgl(xTra) 0.0 set pgl(yTra) 0.0 glMatrixMode GL_PROJECTION glLoadIdentity glOrtho -5. 5. -5. 5. 15. -15. glMatrixMode GL_MODELVIEW set cx 0.0 set cy 0.0 set DoCenter 1 $win postredisplay return } proc PickAtom {x y win {center 0}} { set hits [DonneatomePique $x $y] if {! $hits} {return} global Pck foreach e [array names Pck] {set Pck($e) 0} processHits $hits set cx $x set cy $y $win postredisplay return } proc DonneatomePique {x y} { global pgl glSelectBuffer $::BUFSIZE $::selectBuffer glRenderMode GL_SELECT ApplyNewCenter glMatrixMode GL_PROJECTION glPushMatrix glLoadIdentity set viewport [tcl3dVector GLint 4] glGetIntegerv GL_VIEWPORT $viewport set w [$viewport get 2] set h [$viewport get 3] # create 15x15 pixel picking region near cursor location gluPickMatrix $x [expr $h - $y] 15.0 15.0 $viewport glOrtho \ [expr {-5.-$pgl(xTra)}] \ [expr { 5.-$pgl(xTra)}] \ [expr {-5.-$pgl(yTra)}] \ [expr { 5.-$pgl(yTra)}] \ 15. \ -15. glMatrixMode GL_MODELVIEW glInitNames glPushName 0 DrawSpheres $::GL_SELECT glMatrixMode GL_PROJECTION glPopMatrix glMatrixMode GL_MODELVIEW set hits [glRenderMode GL_RENDER] return $hits } proc RotX { w angle } { set ::xRotate [expr {$::xRotate + $angle}] $w postredisplay } proc RotY { w angle } { set ::yRotate [expr {$::yRotate + $angle}] $w postredisplay } proc RotZ { w angle } { set ::zRotate [expr {$::zRotate + $angle}] $w postredisplay } proc DrawSpheres {mode} { if { $mode == $::GL_SELECT } { global PickList if {! [info exists PickList]} { global Cor Pck set PickList [glGenLists 1] glNewList $PickList GL_COMPILE_AND_EXECUTE set Pck(0) 0 set Cor(0) {0.0 0.0 0.0} glLoadName 0 glBegin GL_POINTS glVertex3f 0.0 0.0 0.0 glEnd set Pck(2) 0 set Cor(2) {1.0 0.0 0.0} glLoadName 2 glBegin GL_POINTS glVertex3f 1.0 0.0 0.0 glEnd set Pck(4) 0 set Cor(4) {0.0 1.0 0.0} glLoadName 4 glBegin GL_POINTS glVertex3f 0.0 1.0 0.0 glEnd set Pck(6) 0 set Cor(6) {0.0 0.0 -1.0} glLoadName 6 glBegin GL_POINTS glVertex3f 0.0 0.0 -1.0 glEnd glEndList } else { puts "===> Call List !" glCallList $PickList } } else { glBegin GL_TRIANGLES glColor3f 1.0 1.0 1.0 glVertex3f 0.0 0.0 0.0 glColor3f 1.0 0.0 0.0 glVertex3f 0.0 0.0 -1.0 glColor3f 0.0 1.0 0.0 glVertex3f 0.0 1.0 0.0 glColor3f 1.0 1.0 1.0 glVertex3f 0.0 0.0 0.0 glColor3f 0.0 0.0 1.0 glVertex3f 1.0 0.0 0.0 glColor3f 1.0 0.0 0.0 glVertex3f 0.0 0.0 -1.0 glColor3f 0.0 1.0 0.0 glVertex3f 0.0 1.0 0.0 glColor3f 0.0 0.0 1.0 glVertex3f 1.0 0.0 0.0 glColor3f 1.0 0.0 0.0 glVertex3f 0.0 0.0 -1.0 glColor3f 1.0 1.0 1.0 glVertex3f 0.0 0.0 0.0 glColor3f 0.0 0.0 1.0 glVertex3f 1.0 0.0 0.0 glColor3f 0.0 1.0 0.0 glVertex3f 0.0 1.0 0.0 glEnd } return } proc ToggleDisplayList {} { if { $::useDisplayList } { if { ! [info exists ::sphereList] } { CreateDisplayList } } else { if { [info exists ::sphereList] } { glDeleteLists $::sphereList 1 unset ::sphereList } } } proc tclCreateFunc { w } { global FontBase set FontBase [$w loadbitmapfont "fixed"] puts "fontBase= $FontBase" set FontBase [$w loadbitmapfont "fixed"] puts "CreateF fontBase= $FontBase" set ambient { 0.0 0.0 0.0 1.0 } set diffuse { 1.0 1.0 1.0 1.0 } set specular { 1.0 1.0 1.0 1.0 } set position { 0.0 3.0 2.0 0.0 } set lmodel_ambient { 0.4 0.4 0.4 1.0 } set local_view { 0.0 } glClearColor 0.0 0.0 0.0 1.0 glEnable GL_DEPTH_TEST if {0} { glLightfv GL_LIGHT0 GL_AMBIENT $ambient glLightfv GL_LIGHT0 GL_DIFFUSE $diffuse glLightfv GL_LIGHT0 GL_POSITION $position glLightModelfv GL_LIGHT_MODEL_AMBIENT $lmodel_ambient glLightModelfv GL_LIGHT_MODEL_LOCAL_VIEWER $local_view glEnable GL_LIGHTING glEnable GL_LIGHT0 CreateDisplayList tcl3dStartSwatch $::stopwatch set ::startTime [tcl3dLookupSwatch $::stopwatch] set ::s_lastTime $::startTime set ::elapsedLastTime $::startTime } return } proc ApplyRotTrans {} { global pgl set mvmatrix [tcl3dVector GLdouble 16] glMatrixMode GL_MODELVIEW # glLoadIdentity glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef $pgl(yRot) [lindex $mvList 0] [lindex $mvList 4] [lindex $mvList 8] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef $pgl(xRot) [lindex $mvList 1] [lindex $mvList 5] [lindex $mvList 9] glTranslatef $pgl(xTra) $pgl(yTra) 0.0 set pgl(xTra) 0.0 set pgl(yTra) 0.0 set pgl(xRot) 0.0 set pgl(yRot) 0.0 return } proc ApplyNewCenter {} { global pgl Transform TransformList global DoCenter if { 0 && ! $DoCenter} { glPushMatrix puts "passe dans ce bordel !" return } set DoCenter 0 set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] $Transform set 5 1.0 $Transform set 12 [expr {-1.0*$pgl(xCen)}] $Transform set 13 [expr {-1.0*$pgl(yCen)}] $Transform set 14 [expr {-1.0*$pgl(zCen)}] set TransformList [tcl3dVectorToList $Transform 16] glPushMatrix glLoadIdentity # NEW: Apply Dynamic Transform glMultMatrixf $mvList glMultMatrixf $TransformList return } proc tclDisplayFunc { w } { global pgl glClear [expr $::GL_COLOR_BUFFER_BIT | $::GL_DEPTH_BUFFER_BIT] # glMatrixMode GL_PROJECTION # glLoadIdentity # glOrtho -5. 5. -5. 5. 15. -15. glMatrixMode GL_MODELVIEW # glPushMatrix ApplyNewCenter # ApplyRotTrans DrawSpheres toto disp_string glPopMatrix glFlush $w swapbuffers return } proc tclReshapeFunc { toglwin w h } { global pgl glViewport 0 0 $w $h glMatrixMode GL_PROJECTION glLoadIdentity glOrtho \ [expr {-5.-$pgl(xTra)}] \ [expr { 5.-$pgl(xTra)}] \ [expr {-5.-$pgl(yTra)}] \ [expr { 5.-$pgl(yTra)}] \ 15. \ -15. glMatrixMode GL_MODELVIEW # glLoadIdentity $toglwin postredisplay return } proc HandleRot {x y win} { global cx cy pgl if { abs($cx-$x) < 5 && abs($cy-$y) < 5} {return} set dx [expr {double($cx-$x)}] set dy [expr {double($cy-$y)}] if {1} { # set pgl(xRot) [expr {$pgl(xRot)+$dx}] # set pgl(yRot) [expr {$pgl(yRot)+$dy}] set pgl(xRot) [expr {$dx}] set pgl(yRot) [expr {$dy}] set cx $x set cy $y $win postredisplay return } set mvmatrix [tcl3dVector GLdouble 16] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glMatrixMode GL_MODELVIEW glTranslatef $pgl(xTra) $pgl(yTra) 0.0 glRotatef $dy [lindex $mvList 0] [lindex $mvList 4] [lindex $mvList 8] glGetDoublev GL_MODELVIEW_MATRIX $mvmatrix set mvList [tcl3dVectorToList $mvmatrix 16] glRotatef $dx [lindex $mvList 1] [lindex $mvList 5] [lindex $mvList 9] set cx $x set cy $y $win postredisplay return } proc HandleTrans {axis x y win} { global cx cy pgl if { $cx == $x && $cy == $y } {return} # empiric constant 1.5 set Rad 5. set rx [expr {1.5*$Rad*($x-$cx)/500}] set ry [expr {1.5*$Rad*($y-$cy)/500}] if {1} { # set pgl(xTra) [expr {$pgl(xTra)+$rx}] # set pgl(yTra) [expr {$pgl(yTra)-$ry}] set pgl(xTra) [expr {$rx}] set pgl(yTra) [expr {$ry}] if {0} { glMatrixMode GL_PROJECTION glLoadIdentity glOrtho \ [expr {-5.-$pgl(xTra)}] \ [expr { 5.-$pgl(xTra)}] \ [expr {-5.-$pgl(yTra)}] \ [expr { 5.-$pgl(yTra)}] \ 15. \ -15. } } glMatrixMode GL_MODELVIEW # gluLookAt 0.0 0.0 100. $pgl(xdist) $pgl(ydist) 0.0 0.0 1.0 0.0 set cx $x set cy $y $win postredisplay return } set AtmCenter "" set ::xdist 0 set ::ydist 0 set ::zdist 5 set ::xRotate 0.0 set ::yRotate 0.0 set ::zRotate 0.0 set ::shadeModel $::GL_SMOOTH set ::lineMode 0 set ::useDisplayList 0 set ::animStarted 0 set ::pdfStarted 0 set appName "Tcl3D demo: Molecules benchmark" wm title . $appName set frMast [frame .fr] set frTogl [frame .fr.togl] set frSlid [frame .fr.slid] set frBttn [frame .fr.bttn] set frInfo [frame .fr.info] pack $frMast -expand 1 -fill both grid $frTogl -row 0 -column 0 -sticky news grid $frSlid -row 1 -column 0 -sticky news grid $frBttn -row 2 -column 0 -sticky nws grid $frInfo -row 3 -column 0 -sticky news grid rowconfigure .fr 0 -weight 1 grid columnconfigure .fr 0 -weight 1 togl $frTogl.toglwin -width 500 -height 500 \ -swapinterval 0 \ -double true -depth true \ -displayproc tclDisplayFunc \ -reshapeproc tclReshapeFunc \ -createproc tclCreateFunc pack $frTogl.toglwin -side top -expand 1 -fill both set frSett [frame $frSlid.sett] set frTfms [frame $frSlid.tfms] pack $frSett $frTfms -side left -expand 1 -fill both frame $frSett.fr1 label $frSett.fr1.l1 -text "Number of slices per sphere:" spinbox $frSett.fr1.s1 -from 4 -to 30 \ -textvariable ::numSlices -width 4 \ -command { CreateDisplayList ; $frTogl.toglwin postredisplay } eval pack [winfo children $frSett.fr1] -side left -anchor w -expand 1 pack $frSett.fr1 -expand 1 -anchor w frame $frSett.fr2 label $frSett.fr2.l1 -text "Number of stacks per sphere:" spinbox $frSett.fr2.s1 -from 4 -to 30 \ -textvariable ::numStacks -width 4 \ -command { CreateDisplayList ; $frTogl.toglwin postredisplay } eval pack [winfo children $frSett.fr2] -side left -anchor w -expand 1 pack $frSett.fr2 -expand 1 -anchor w frame $frSett.fr3 label $frSett.fr3.l1 -text "Number of spheres per side:" spinbox $frSett.fr3.s1 -from 1 -to 50 \ -command { CreateDisplayList ; $frTogl.toglwin postredisplay } eval pack [winfo children $frSett.fr3] -side left -anchor w -expand 1 pack $frSett.fr3 -expand 1 -anchor w frame $frSett.fr4 label $frSett.fr4.l2 -text "Number of spheres:" label $frSett.fr4.info -text "-1" set ::infoLabel $frSett.fr4.info eval pack [winfo children $frSett.fr4] -side left -anchor w -expand 1 pack $frSett.fr4 -expand 1 -anchor w frame $frTfms.fr1 label $frTfms.fr1.lx -text "X translate:" scale $frTfms.fr1.sx -from -50 -to 50 -length 200 -resolution 0.5 \ -orient horiz -showvalue true \ -variable xdist \ -command { $frTogl.toglwin postredisplay } eval pack [winfo children $frTfms.fr1] -side left -anchor nw -expand 1 pack $frTfms.fr1 -expand 1 -anchor w frame $frTfms.fr2 label $frTfms.fr2.ly -text "Y translate:" scale $frTfms.fr2.sy -from -50 -to 50 -length 200 -resolution 0.5 \ -orient horiz -showvalue true \ -variable ydist \ -command { $frTogl.toglwin postredisplay } eval pack [winfo children $frTfms.fr2] -side left -anchor nw -expand 1 pack $frTfms.fr2 -expand 1 -anchor w frame $frTfms.fr3 label $frTfms.fr3.lz -text "Z translate:" scale $frTfms.fr3.sz -from -50 -to 50 -length 200 -resolution 0.5 \ -orient horiz -showvalue true \ -variable zdist \ -command { $frTogl.toglwin postredisplay } eval pack [winfo children $frTfms.fr3] -side left -anchor nw -expand 1 pack $frTfms.fr3 -expand 1 -anchor w checkbutton $frBttn.b1 -text "Use display list" -indicatoron 1 \ -variable ::useDisplayList \ -command ToggleDisplayList checkbutton $frBttn.b2 -text "Use flat shading" -indicatoron 1 \ -variable ::shadeModel \ -offvalue $::GL_SMOOTH -onvalue $::GL_FLAT \ -command { $frTogl.toglwin postredisplay } checkbutton $frBttn.b3 -text "Use line mode" -indicatoron 1 \ -variable ::lineMode \ -command { CreateDisplayList ; $frTogl.toglwin postredisplay } checkbutton $frBttn.b4 -text "Animate" -indicatoron [tcl3dShowIndicator] \ -variable ::animStarted \ -command { ShowAnimation $frTogl.toglwin } checkbutton $frBttn.b5 -text "Save as PDF" -indicatoron [tcl3dShowIndicator] \ -variable ::pdfStarted \ -command { CreatePdf $frTogl.toglwin } eval pack [winfo children $frBttn] -side left -expand 1 -fill x tcl3dToolhelpAddBinding $frBttn.b5 "Save OpenGL window to file $pdfFile" set glInfo [format "Running on %s with a %s (OpenGL %s, Tcl %s)" \ $tcl_platform(os) [glGetString GL_RENDERER] \ [glGetString GL_VERSION] [info patchlevel]] label $frInfo.l1 -text $glInfo eval pack [winfo children $frInfo] -pady 2 -side top -expand 1 -fill x set ::sphereSize 0.4 set ::numSlices 15 set ::numStacks 15 set ::numSpheresPerDim 5 # bindings bind $frTogl.toglwin {PickAtom %x %y %W} bind $frTogl.toglwin {CenterAtom %x %y %W} bind $frTogl.toglwin {InvModmat} bind $frTogl.toglwin <1> {set cx %x; set cy %y} bind $frTogl.toglwin <2> {set cx %x; set cy %y} bind $frTogl.toglwin <3> {set cx %x; set cy %y} bind $frTogl.toglwin {Mouse RotXY %x %y %W} bind $frTogl.toglwin {Mouse TraXY %x %y %W} #bind $frTogl.toglwin {HandleRot %x %y %W} #bind $frTogl.toglwin {HandleTrans X %x %y %W} bind $frTogl.toglwin {HandleTrans Z %x %y %W} bind . { exit }