⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.tcl

📁 卫星仿真软件 卫星仿真软件 卫星仿真软件
💻 TCL
字号:
#########################################################  SaVi by Robert Thurman (thurman@geom.umn.edu) and#          Patrick Worfolk (worfolk@alum.mit.edu).##  Copyright (c) 1997 by The Geometry Center.#  This file is part of SaVi.  SaVi is free software;#  you can redistribute it and/or modify it only under#  the terms given in the file COPYRIGHT which you should#  have received along with this file.  SaVi may be#  obtained from:#  http://savi.sourceforge.net/#  http://www.geom.uiuc.edu/locate/SaVi######################################################### main.tcl## $Id: main.tcl,v 1.27 2005/02/07 19:22:01 lloydwood Exp $proc window(raise) {window} {    if [winfo exists .$window] {	wm deiconify .$window	raise .$window    }}proc main(build) {} {    global main_name COLOR FONT TITLE geomview_module last_filename use_X    set main_name [build_Toplevel main]    wm protocol $main_name WM_DELETE_WINDOW main(exit)    wm title $main_name "$TITLE - satellite constellation visualization"    build_Menubar $main_name mbar \	{"Help" \             {"about SaVi..." "about(build)"} } \	{"File" \	     {"Load satellites..." "load(build)"} \	     {"Save satellites as Tcl script..." "save(build)"} \	     {} \	     {"Quit" "main(exit)"} } \	{"Edit" \	     {"Current satellite..." "edit(build)" } \	     {"New satellite..." "main(new)" } \	     {} \	     {"Unselect" "main(unselect)" } \	     {"Copy" "main(copy)" } \	     {"Cut" "main(delete)" } \	     {} \	     {"Simulation constants..." "params(build)"} } \	{"Views"} \	{"Constellations"} \	{"Rendering"}    if {$use_X == 1} {	set fisheye_option {"Local fisheye..." "fisheye(build)"}    } else {	set fisheye_option {"X and fisheye use disabled" {} }    }    build_Menu $main_name.mbar.b2 menu \	    {"Global coverage..." "coverage(build)"} \	    $fisheye_option \	    {} \	    {"> Step forwards" "main(forw_step)"} \	    {"< Step back" "main(back_step)"} \	    {">> Forwards..." "main(forwards)"} \	    {"<< Reverse..." "main(backwards)"} \	    {"Freeze views" "main(stop)"} \	    {} \	    {"Restart views at time zero" "main(restart)"}    main(constellations_menu) $main_name.mbar.b3    if {$geomview_module == 1} {	build_options_menu $main_name.mbar.b4 \	    {"Real-time mode" realtime_flag} \	    {} \	    {"Mark satellite positions" satellites_flag} \	    {"Box markers" box_sat_flag} \	    {"Planes markers" planes_sat_flag} \            {"Satellite markers" fancy_sat_flag} \	    {} \	    {"Show satellite orbits" orbits_flag} \	    {"Show footprints" footprints_flag} \	    {"Show coverage cones" cones_flag} \	    {} \	    {"Show stationary axes" axes_flag} \	    {"Show equatorial plane" plane_flag} \	    {"Show star field" stars_flag} \	    {} \	    {"Show central body" earth_flag} \	    {"Use detailed Earth model" fancy_earth_flag} \	    {"Texture mapping" texture_flag} \	    {} \    	    {"Animate in Geomview" geomview_flag}    } else {	build_options_menu $main_name.mbar.b4 \	    {"Real-time mode" realtime_flag}    }    set cmd [build_StdFrame $main_name cmd]    label $cmd.l -text \"no. {semi-major axis  eccentricity  inclination   long. asc. node  arg. periapsis   time to periapsis}" \	-font $FONT(label)    listbox $cmd.lb -yscrollcommand "$cmd.scroll set" \	-height 2 -width 70 -selectmode single \	-font $FONT(fixed) -bg $COLOR(entry)    pack $cmd.l -side top -anchor w    pack $cmd.l -fill none    pack $cmd.lb -side left    pack $cmd.lb -fill both -expand 1    bind $cmd.lb <Button-1> {main(select) [%W nearest %y]}    bind $cmd.lb <Double-Button-1> {main(dblselect) [%W nearest %y]}    scrollbar $cmd.scroll -command "$cmd.lb yview"    pack $cmd.scroll -side right -fill y    pack $cmd -fill both -expand 1    set cmd0 [build_CmdFrame $main_name cmd0]    build_LabelEntryColumns $cmd0 le0 \        {dentry "" {delta_t}} \	{text "" {"seconds per simulation interval."}} \	{label "" {time}} \	{label "" {last_filename}}    pack $cmd0 -fill x    build_Buttonbar $main_name bb1 \        {"Restart" {main(restart)}} \        {"  <  " {main(back_step)}} \        {"  >  " {main(forw_step)}} \        {"  STOP  " main(stop)} \        {"   < <   " main(backwards)} \        {"   > >   " main(forwards)}}proc main(reset_title) {} {  global TITLE main_name  wm title $main_name "$TITLE - satellite constellation visualization"}proc main(title) {filename} {  global TITLE main_name  wm title $main_name "$TITLE - $filename - satellite constellation visualization"}proc main(constellations_menu) {submenu} {    build_Menu $submenu menu \	{"Empty space" "main(delete_all)"} \	{} \	{"Clarke geostationary" "main(constellation) clarke.tcl"} \	{"Draim tetrahedral" "main(constellation) draim-4.tcl"} \	{"Molnya" "main(constellation) molnya.tcl"} \	{"Tundra" "main(constellation) tundra.tcl"} \	{} \	{"Globalstar" "main(constellation) globalstar.tcl"} \	{"Iridium" "main(constellation) iridium-66.tcl"} \	{"ICO" "main(constellation) ico.tcl"} \	{"Orbcomm" "main(constellation) orbcomm.tcl"} \	{} \	{"GPS" "main(constellation) gps.tcl"} \	{"Galileo" "main(constellation) galileo.tcl"} \	{} \	{"Skybridge (64)" "main(constellation) skybridge-64.tcl"} \	{"Teledesic (288)" "main(constellation) teledesic-288.tcl"} \	{"Teledesic (840)" "main(constellation) teledesic-840.tcl"} \	{} \	{"Aries" "main(constellation) aries.tcl"} \	{"@contact" "main(constellation) atcontact.tcl"} \	{"Celestri" "main(constellation) celestri.tcl"} \	{"Ellipso" "main(constellation) ellipso.tcl"} \	{"GS2" "main(constellation) gs2.tcl"} \	{"LEq0" "main(constellation) leqo.tcl"} \	{"Macrocell" "main(constellation) macrocell.tcl"} \	{"Millimeter" "main(constellation) mm.tcl"} \	{"NUONCE" "main(constellation) nuonce.tcl"} \	{"Odyssey" "main(constellation) odyssey.tcl"} \	{"Orblink" "main(constellation) orblink.tcl"} \	{"Sirius Radio" "main(constellation) sirius-radio.tcl"} \	{"Spaceway NGSO" "main(constellation) spaceway-ngso.tcl"} \	{} \	{"Geosynchronous belt (TLE)" "main(constellation) geo.tle"} \	{"GPS (TLE)" "main(constellation) gps.tle"} \	{"LEO satellites (TLE)" "main(constellation) visual.tle"}}proc main(forw_step) {} {    main(stop)    satellites FORW_STEP}proc main(back_step) {} {    main(stop)    satellites BACK_STEP}proc main(forwards) {} {    global COLOR playbar    satellites STOP    if {("OK" == [satellites FORWARDS]) && ([winfo exists .main])} {	.main.bb1.b3 configure -bg $COLOR(bg)	.main.bb1.b4 configure -bg $COLOR(bg)	.main.bb1.b5 configure -bg $COLOR(sbg)    }    set flag $playbar    set playbar 1    if {$flag == 0} {	coverage(forwards)    }    set playbar 0}proc main(backwards) {} {    global COLOR playbar    satellites STOP    if {("OK" == [satellites BACKWARDS]) && ([winfo exists .main])} {	.main.bb1.b3 configure -bg $COLOR(bg)	.main.bb1.b4 configure -bg $COLOR(sbg)	.main.bb1.b5 configure -bg $COLOR(bg)    }    set flag $playbar    set playbar 1    if {$flag == 0} {	coverage(backwards)    }    set playbar 0}proc main(stop) {} {    global COLOR playbar    if {("OK" == [satellites STOP]) && ([winfo exists .main])} {	.main.bb1.b3 configure -bg $COLOR(sbg)	.main.bb1.b4 configure -bg $COLOR(bg)	.main.bb1.b5 configure -bg $COLOR(bg)    }    set flag $playbar    set playbar 1    if {$flag == 0} {	coverage(stop)    }    set playbar 0}proc main(restart) {} {    main(stop)    satellites RESET}proc main(exit) {} {    satellites EXIT    exit}proc main(update) {} {    set i 0    set n [.main.cmd.lb size]    set noe [satellites GET $i]    while {$noe != ""} {	.main.cmd.lb insert $i [list $i [string range $noe 0 64]]	incr i	set noe [satellites GET $i]    }    if {$n > 0} {	.main.cmd.lb delete $i [expr $i+$n-1]    }    edit(update)    fisheye(update)    coverage(update)}proc main(update_one) {n} {    set noe [satellites GET $n]    .main.cmd.lb insert $n [list $n [string range $noe 0 64]]    .main.cmd.lb select set $n    incr n    .main.cmd.lb delete $n}proc main(select) {n} {    if {[llength $n] > 0} {        .main.cmd.lb select set $n	edit(set) [lindex $n 0]	satellites TAG [lindex $n 0]    }}proc main(dblselect) {n} {    edit(build)    main(select) $n}proc main(new) {} {    set nn [satellites NEW]    main(update)    main(select) [list $nn]    edit(build)}proc main(copy) {} {    set n [.main.cmd.lb curselection]    if {[llength $n] > 0} {	set nn [satellites COPY [lindex $n 0]]	main(select) [list $nn]	main(update)    }}proc main(delete) {} {    set n [.main.cmd.lb curselection]    if {[llength $n] > 0} {	satellites DELETE [lindex $n 0]	coverage(update_decay)	main(update)    }}proc main(unselect) {} {    set n [.main.cmd.lb curselection]    if {[llength $n] > 0} {	satellites UNTAG [lindex $n 0]	main(update)    }}proc main(delete_all) {} {    global project_tracks_flag last_filename main_name    set project_tracks_flag 0    satellites DELETE_ALL    set last_filename " "     main(reset_title)    coverage(update_decay)    main(update)}proc main(constellation) {filename} {    global geomview_module last_filename PI params    # We could choose not to delete all satellites when loading    # in an additional constellation, but since mask angle is    # set for all rather than for each satellite, the result    # would be very confusing coverage. Load... gets around this.    satellites DELETE_ALL    coverage(update_decay)    main(load_file) "data/$filename"}proc main(source_file) {filename} {    global coverage_angle coverage_angle_flag PI params    set coverage_angle_old $coverage_angle    # interpret as a tcl file. Set up constants.    set MU $params(Mu)    set RADIUS_OF_EARTH $params(Radius)    source "$filename"    puts stderr "SaVi: loaded $filename"    if {$coverage_angle != $coverage_angle_old} {	puts stderr "      changed coverage angle from $coverage_angle_old to $coverage_angle."	if {$coverage_angle_flag} {	    puts stderr "      Coverage angle probably describes mask elevation."	}    }} proc main(load_file) {filename} {    global geomview_module last_filename no_access_flag    if {$geomview_module == 1} {        satellites GV_SEND "(ui-freeze on)"    }    # if filename ends in ".tle" then interpret as a two-line-element file    if {[string_ends "$filename" ".tle"]} {	# tle file	tle_file_input "$filename"    } elseif {[string_ends "$filename" ".tcl"]} {	main(source_file) "$filename"    } else {	puts stderr "SaVi: $filename is not a recognised .tle/.tcl satellites file."	puts stderr "      No satellites loaded."    }    if {$geomview_module == 1} {        satellites GV_SEND "(ui-freeze off)"    }    set last_filename "$filename"    main(title) "$filename"    main(update)}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -