sweeps.tcl
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:4k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. # A bunch of routines to switch from scans to sweeps and back as
  2. # well as grouping and ungrouping of above.
  3. # Takes the name of a scan and converts it to a bunch of sweeps
  4. proc ss_convertScanToSweep {scanname} {
  5.     # Get scan filename (dirname)
  6.     set dirname [plv_get_scan_filename $scanname]
  7.     # Verify dirname is a scanset
  8.     if { [file isdirectory $dirname] != 1  || 
  9.  [string last ".sd" $dirname] != [expr [string length $dirname] - [string length ".sd"]] } {
  10. return;
  11.     }
  12.     # Delete current scan
  13.     confirmDeleteMesh $scanname
  14.     # Load sweeps
  15.     read_sweeps_from_dir $dirname
  16.     # Add context name
  17. }
  18. # Takes the name of a scan that is actually a sweep and finds 
  19. # all the other sweeps of this scan and converts back to a scan
  20. proc ss_convertSweepToScan {sweepname} {
  21.     # Find all related sweeps
  22.     set sweeplist [ss_findRelatedSweeps $sweepname]
  23.     # Find scan dir name
  24.     set firstsweep [lindex $sweeplist 0]
  25.     set filename [plv_get_scan_filename $firstsweep]
  26.     set dirname [file dirname $filename]
  27.     # Verify dirname is a scan set
  28.     if { [file isdirectory $dirname] != 1  || 
  29.      [string last ".sd" $dirname] != [expr [string length $dirname] - [string length ".sd"]] } {
  30. return;
  31.     }
  32.     # Turn off screen update
  33.     redraw block
  34.     
  35.     # Remove meshes from MeshList window
  36.     removeMeshFromWindow $sweeplist
  37.     # Delete sweeps
  38.     foreach mesh $sweeplist {
  39. plv_meshsetdelete $mesh
  40.     }
  41.     # Load scan
  42.     readfile $dirname
  43.     # Turn on screen update
  44.     redraw flush
  45. }
  46. # Given the name of a Sweep finds all the other sweeps in the same scan
  47. proc ss_findRelatedSweeps {sweepname} {
  48.     # Initial list is nothing
  49.     set allSweeps ""
  50.     # Find the sweep base name
  51.     set basename [ss_findSweepBaseName $sweepname]
  52.     # If not really a sweep return
  53.     if {$basename == ""} {
  54. return;
  55.     }
  56.     # Loop over all meshes searching for str matches
  57.     foreach mesh [getMeshList] {
  58. if {$basename == [ss_findSweepBaseName $mesh]} {
  59.     lappend allSweeps $mesh
  60. }
  61.     }
  62.     # return result
  63.     return $allSweeps
  64. }
  65. # Find the base name of a sweep (the scan name)
  66. proc ss_findSweepBaseName {sweepname} {
  67.     # Return "" if this isn't in sweepname format
  68.     set retval ""
  69.     #find the part before the double underscore __
  70.     set ind [string last "__" "$sweepname"]
  71.     if { $ind != -1 } {
  72. set retval [string range $sweepname 0 [expr $ind - 1]]
  73.     }
  74.     return $retval
  75. }
  76. # Adds the menu item in mesh controls to do the conversion
  77. proc ss_addConvertSweepScanToMeshControlMenu {meshMenu name} {
  78.     set sweepFilename [plv_get_scan_filename $name]
  79.     # Make sure its a CyberScan/Sweep 
  80.     #added this so IRIX can have convert to sweep functionaity if the extension is ..sd
  81.     if {[string last ".sd" $sweepFilename] != [expr [string length $sweepFilename] - [string length ".sd"]]} {
  82. #puts returning...
  83. return
  84.     }
  85.     # Add the correct direction to the menu
  86.     $meshMenu add separator
  87.     if {[ss_findSweepBaseName $name] == ""} {
  88. $meshMenu add command -label "Convert to Sweeps" 
  89.     -command "ss_convertScanToSweep $name"
  90.     } else { 
  91. $meshMenu add command -label "Convert to Scan" 
  92.     -command "ss_convertSweepToScan $name"
  93. $meshMenu add command -label "Show scan sweeps" 
  94.     -command "ss_showScanSweeps $name"
  95. $meshMenu add command -label "Hide scan sweeps" 
  96.     -command "ss_hideScanSweeps $name"
  97.     }
  98. }
  99. proc ss_showScanSweeps {name} {
  100.     set sweepList [ss_findRelatedSweeps $name]
  101.     eval "showMesh $sweepList"
  102. }
  103. proc ss_hideScanSweeps {name} {
  104.     set sweepList [ss_findRelatedSweeps $name]
  105.     eval "hideMesh $sweepList"
  106. }