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 + -
显示快捷键?