gmvizgui.tcl
来自「算断裂的」· TCL 代码 · 共 368 行
TCL
368 行
proc gmviz_set_to_defaults {} { global gmviz_engine2 global gmviz_engine3 global gmviz_thickness global gmviz_filestat global gmviz_notify global gmviz_format global gmviz_filename global gmviz_default_color global gmviz_beziersub set gmviz_default_color {1 1 1 1} set gmviz_engine2 local set gmviz_engine3 file set gmviz_filename test.wrl set gmviz_filestat replace set gmviz_notify none set gmviz_thickness {0 0 0} set gmviz_format vrml set gmviz_beziersub 4}proc gmvizgui args { ## gmvizgui called by itself starts the GUI that controls the ## output from gmviz. ## gmvizgui $opcode ... does an internal operation depending ## on the value of opcode. global gmviz_engine2 global gmviz_engine3 global gmviz_thickness global gmviz_filestat global gmviz_notify global gmviz_format global gmviz_filename global gmviz_default_color global gmviz_beziersub upvar #0 tcl_platform tcl_platform set windows 0 if {$tcl_platform(platform) == "windows"} { set windows 1 } if {[llength $args] == 0} { toplevel .gmvizgui label .gmvizgui.l -text "---GRAPHICS CONTROL---" pack .gmvizgui.l global gm_default_button_color button .gmvizgui.dismiss -text "Dismiss" -command "destroy .gmvizgui" \ -background $gm_default_button_color pack .gmvizgui.dismiss -side bottom button .gmvizgui.defaults -text "Reset to Defaults" \ -command "gmvizgui defaults" \ -background $gm_default_button_color pack .gmvizgui.defaults -side bottom frame .gmvizgui.engsel -relief ridge -borderwidth 4 pack .gmvizgui.engsel label .gmvizgui.engsell -text "GRAPHIC ENGINE SELECTION" pack .gmvizgui.engsell -in .gmvizgui.engsel frame .gmvizgui.engsel2 -relief sunken -borderwidth 4 pack .gmvizgui.engsel2 -in .gmvizgui.engsel -side left label .gmvizgui.engsel2l -text "2D Graphics Engine" pack .gmvizgui.engsel2l -in .gmvizgui.engsel2 radiobutton .gmvizgui.b1 -text "Internal (Tk)" -variable gmviz_engine2 \ -value local -anchor w pack .gmvizgui.b1 -in .gmvizgui.engsel2 -side top -fill x radiobutton .gmvizgui.b2 -text "External (VRML)" \ -variable gmviz_engine2 \ -value file -anchor w pack .gmvizgui.b2 -in .gmvizgui.engsel2 -side top -fill x frame .gmvizgui.engsel3 -relief sunken -borderwidth 4 pack .gmvizgui.engsel3 -in .gmvizgui.engsel -side left label .gmvizgui.engsel3l -text "3D Graphics Engine" pack .gmvizgui.engsel3l -in .gmvizgui.engsel3 radiobutton .gmvizgui.b3 -text "Internal (Tk)" \ -variable gmviz_engine3 \ -value local -state disabled -anchor w pack .gmvizgui.b3 -in .gmvizgui.engsel3 -side top -fill x radiobutton .gmvizgui.b4 -text "External (VRML)" \ -variable gmviz_engine3 \ -value file -anchor w pack .gmvizgui.b4 -in .gmvizgui.engsel3 -side top -fill x frame .gmvizgui.generalwi -relief ridge -borderwidth 4 pack .gmvizgui.generalwi label .gmvizgui.generalwil -text "OBJECT WIDTH CONTROL" pack .gmvizgui.generalwil -in .gmvizgui.generalwi set thick1 [lindex $gmviz_thickness 0] scale .gmvizgui.generalwi0 -label "Point width = $thick1" \ -from 0 -to 32 \ -length 4c -orient horizontal -command "gmvizgui pointwidth" \ -showvalue 0 pack .gmvizgui.generalwi0 -in .gmvizgui.generalwi -side left if {$thick1 == 0} { set thick2 0 } else { set thick2 [expr int(2 * log($thick1) / log(2)) + 1] } .gmvizgui.generalwi0 set $thick2 set thick1 [lindex $gmviz_thickness 1] scale .gmvizgui.generalwi1 -label "Line width = $thick1"\ -from 0 -to 32 \ -length 4c -orient horizontal -command "gmvizgui linewidth" \ -showvalue 0 pack .gmvizgui.generalwi1 -in .gmvizgui.generalwi -side left if {$thick1 == 0} { set thick2 0 } else { set thick2 [expr int(2 * log($thick1) / log(2)) + 1] } .gmvizgui.generalwi1 set $thick2# set thick1 [lindex $gmviz_thickness 2]# scale .gmvizgui.generalwi2 -label "2D pushin = $thick1" -from 0 -to 32 \# -length 4c -orient horizontal -command "gmvizgui surfpushin" \# -showvalue 0# pack .gmvizgui.generalwi2 -in .gmvizgui.generalwi -side left# if {$thick1 == 0} {# set thick2 0# } else {# set thick2 [expr int(2 * log($thick1) / log(2)) + 1]# }# .gmvizgui.generalwi2 set $thick2 frame .gmvizgui.bezier -relief ridge -borderwidth 4 pack .gmvizgui.bezier label .gmvizgui.bezier1 -text "NUMBER OF BEZIER SUBDIVISIONS" pack .gmvizgui.bezier1 -in .gmvizgui.bezier set bezier_label "$gmviz_beziersub per segment; " append bezier_label [expr \ $gmviz_beziersub * ($gmviz_beziersub + 1)/2] append bezier_label " per triangle; " append bezier_label [expr $gmviz_beziersub * $gmviz_beziersub] append bezier_label " per quad" scale .gmvizgui.beziersub -from 0 -to 32 -showvalue 0 -length 6c \ -label $bezier_label \ -command "gmvizgui bezier" \ -orient horizontal pack .gmvizgui.beziersub -in .gmvizgui.bezier -side left .gmvizgui.beziersub set $gmviz_beziersub frame .gmvizgui.defcolor0 -relief ridge -borderwidth 4 pack .gmvizgui.defcolor0 label .gmvizgui.defcolorl -text "DEFAULT COLOR" pack .gmvizgui.defcolorl -in .gmvizgui.defcolor0 frame .gmvizgui.defcolor1 pack .gmvizgui.defcolor1 -in .gmvizgui.defcolor0 scale .gmvizgui.red -label "Red = 1.0" -from 0 -to 32 \ -length 3c -orient horizontal -command "gmvizgui red" \ -showvalue 0 pack .gmvizgui.red -in .gmvizgui.defcolor1 -side left .gmvizgui.red set [expr [lindex $gmviz_default_color 0] * 32] scale .gmvizgui.green -label "Green = 1.0" -from 0 -to 32 \ -length 3c -orient horizontal -command "gmvizgui green" \ -showvalue 0 .gmvizgui.green set [expr [lindex $gmviz_default_color 1] * 32] pack .gmvizgui.green -in .gmvizgui.defcolor1 -side left frame .gmvizgui.defcolor2 pack .gmvizgui.defcolor2 -in .gmvizgui.defcolor0 scale .gmvizgui.blue -label "Blue = 1.0" -from 0 -to 32 \ -length 3c -orient horizontal -command "gmvizgui blue" \ -showvalue 0 .gmvizgui.blue set [expr [lindex $gmviz_default_color 2] * 32] pack .gmvizgui.blue -in .gmvizgui.defcolor2 -side left scale .gmvizgui.opaque -label "Opacity = 1.0" -from 0 -to 32 \ -length 3c -orient horizontal -command "gmvizgui opaque" \ -showvalue 0 .gmvizgui.opaque set [expr [lindex $gmviz_default_color 3] * 32] pack .gmvizgui.opaque -in .gmvizgui.defcolor2 -side left canvas .gmvizgui.canv -background white -width 4c -height 0.5c .gmvizgui.canv create text 2c 0.25c -text "(Current default color)" pack .gmvizgui.canv -in .gmvizgui.defcolor0 gmvizgui redrawcanv frame .gmvizgui.engc0 -relief ridge -borderwidth 4 pack .gmvizgui.engc0 label .gmvizgui.engcl -text "EXTERNAL ENGINE CONTROLS" pack .gmvizgui.engcl -in .gmvizgui.engc0 frame .gmvizgui.engc pack .gmvizgui.engc -in .gmvizgui.engc0 frame .gmvizgui.filestat -relief sunken -borderwidth 4 pack .gmvizgui.filestat -in .gmvizgui.engc -side left -fill y label .gmvizgui.filestatl -text "File open mode" pack .gmvizgui.filestatl -in .gmvizgui.filestat radiobutton .gmvizgui.b5 -text Replace -variable gmviz_filestat \ -value replace -anchor w pack .gmvizgui.b5 -in .gmvizgui.filestat -side top -fill x radiobutton .gmvizgui.b6 -text Append -variable gmviz_filestat \ -value append -anchor w pack .gmvizgui.b6 -in .gmvizgui.filestat -side top -fill x frame .gmvizgui.notify -relief sunken -borderwidth 4 pack .gmvizgui.notify -in .gmvizgui.engc -side left -fill y label .gmvizgui.notifyl -text "Notify" pack .gmvizgui.notifyl -in .gmvizgui.notify radiobutton .gmvizgui.b7 -text Netscape -variable gmviz_notify \ -value netscape -anchor w pack .gmvizgui.b7 -in .gmvizgui.notify -side top -fill x radiobutton .gmvizgui.b8 -text "Internet Explorer" \ -variable gmviz_notify \ -value iexplore -anchor w if {!$windows} { .gmvizgui.b8 configure -state disabled } pack .gmvizgui.b8 -in .gmvizgui.notify -side top -fill x radiobutton .gmvizgui.b9 -text "none" \ -variable gmviz_notify \ -value none -anchor w pack .gmvizgui.b9 -in .gmvizgui.notify -side top -fill x frame .gmvizgui.format -relief sunken -borderwidth 4 pack .gmvizgui.format -in .gmvizgui.engc -side left -fill y label .gmvizgui.formatl -text "Format" pack .gmvizgui.formatl -in .gmvizgui.format radiobutton .gmvizgui.b10 -text vrml -variable gmviz_format \ -value vrml \ -anchor w pack .gmvizgui.b10 -in .gmvizgui.format -side top -fill x frame .gmvizgui.fn pack .gmvizgui.fn -in .gmvizgui.engc0 label .gmvizgui.fnl -text "File name:" pack .gmvizgui.fnl -in .gmvizgui.fn -side left entry .gmvizgui.fne -width 30 -relief sunken -bd 2 -background white \ -textvariable gmviz_filename pack .gmvizgui.fne -in .gmvizgui.fn -side left return } set opcode [lindex $args 0] if {[string compare $opcode getglobals] == 0} { set dim [lindex $args 1] if {$dim == 2} { set engine $gmviz_engine2 } else { set engine $gmviz_engine3 } return [list $engine $gmviz_filename $gmviz_filestat \ $gmviz_notify $gmviz_format $gmviz_thickness \ $gmviz_default_color $gmviz_beziersub] } if {[string compare $opcode pointwidth] == 0} { set pw1 [.gmvizgui.generalwi0 get] if {$pw1 == 0} { set thick1 0 } else { set thick1 [expr int(exp(log(2) * $pw1 / 2))] } set gmviz_thickness [list $thick1 [lindex $gmviz_thickness 1] \ [lindex $gmviz_thickness 2]] .gmvizgui.generalwi0 configure -label "Pointwidth = $thick1" return } if {[string compare $opcode linewidth] == 0} { set pw1 [.gmvizgui.generalwi1 get] if {$pw1 == 0} { set thick1 0 } else { set thick1 [expr int(exp(log(2) * $pw1 / 2))] } set gmviz_thickness [list [lindex $gmviz_thickness 0] $thick1 \ [lindex $gmviz_thickness 2]] .gmvizgui.generalwi1 configure -label "Linewidth = $thick1" return }# if {[string compare $opcode surfpushin] == 0} {# set pw1 [.gmvizgui.generalwi2 get]# if {$pw1 == 0} {# set thick1 0# } else {# set thick1 [expr int(exp(log(2) * $pw1 / 2))]# }# # set gmviz_thickness [list [lindex $gmviz_thickness 0] \# [lindex $gmviz_thickness 1] $thick1]# .gmvizgui.generalwi2 configure -label "2d pushin = $thick1"# return# } if {$opcode == "bezier"} { set pw1 [expr int([.gmvizgui.beziersub get])] set gmviz_beziersub $pw1 set bezier_label "$gmviz_beziersub per segment; " append bezier_label [expr \ $gmviz_beziersub * ($gmviz_beziersub + 1)/2] append bezier_label " per triangle; " append bezier_label [expr $gmviz_beziersub * $gmviz_beziersub] append bezier_label " per quad" .gmvizgui.beziersub configure -label $bezier_label } set redraw_canv 0 if {[string compare $opcode red] == 0} { set pw1 [.gmvizgui.red get] set red1 [format "%6.4f" [expr $pw1 / 32.0]] set gmviz_default_color [lreplace $gmviz_default_color 0 0 $red1] .gmvizgui.red configure -label "Red = $red1" set redraw_canv 1 } if {[string compare $opcode green] == 0} { set pw1 [.gmvizgui.green get] set green1 [format "%6.4f" [expr $pw1 / 32.0]] set gmviz_default_color [lreplace $gmviz_default_color 1 1 $green1] .gmvizgui.green configure -label "Green = $green1" set redraw_canv 1 } if {[string compare $opcode blue] == 0} { set pw1 [.gmvizgui.blue get] set blue1 [format "%6.4f" [expr $pw1 / 32.0]] set gmviz_default_color [lreplace $gmviz_default_color 2 2 $blue1] .gmvizgui.blue configure -label "Blue = $blue1" set redraw_canv 1 } if {[string compare $opcode opaque] == 0} { set pw1 [.gmvizgui.opaque get] set op1 [format "%6.4f" [expr $pw1 / 32.0]] set gmviz_default_color [lreplace $gmviz_default_color 3 3 $op1] .gmvizgui.opaque configure -label "Opacity = $op1" set redraw_canv 1 } if {$opcode == "redrawcanv"} { set hexcolor [format "#%2x%2x%2x" \ [expr int([lindex $gmviz_default_color 0]*255.0)] \ [expr int([lindex $gmviz_default_color 1]*255.0)] \ [expr int([lindex $gmviz_default_color 2]*255.0)]] regsub -all " " $hexcolor 0 hexcolor1 .gmvizgui.canv configure -background $hexcolor1 return } if {$opcode == "defaults"} { gmviz_set_to_defaults destroy .gmvizgui gmvizgui } if {$redraw_canv} { gmvizgui redrawcanv }}# ------------------------------------------------------------------# Copyright (c) 1999 by Cornell University. All rights reserved# See the accompanying file 'Copyright' for authorship information,# the terms of the license governing this software, and disclaimers# concerning this software.# ------------------------------------------------------------------# This file is part of the QMG software. # Version 2.0 of QMG, release date September 3, 1999# ------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?