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

3D图形编程

开发平台:

Visual C++

  1. # draws a new selection line
  2. proc draw_line {x1 y1 x2 y2} {
  3.     # clears current line
  4.     plv_drawlineselection 0 0 start
  5.     plv_drawlineselection 0 0 move
  6.     plv_drawlineselection 0 0 stop
  7.     # start drawing new line
  8.     plv_drawlineselection $x1 $y1 start
  9.     plv_drawlineselection $x2 $y2 move
  10.     plv_drawlineselection $x2 $y2 stop    
  11. puts "$x1 $y1, $x2 $y2"
  12. }
  13. proc auto_a {spacing num fileName} {
  14.     global toglPane
  15.     set info [plv_getselectioninfo]
  16.     if { [string compare [lindex $info 0] "line"] != 0 } {
  17. # error
  18. set badbox [tk_messageBox -type ok -default ok -message 
  19.    "Can't auto_analyze with this selection type" -icon error]
  20. return
  21.     }
  22.     # okay, can use line
  23.     set x1 [lindex $info 1]
  24.     set y1 [expr [lindex [$toglPane configure -height] 4]- [lindex $info 2]]
  25.     set x2 [lindex $info 3]
  26.     set y2 [expr [lindex [$toglPane configure -height] 4]- [lindex $info 4]]
  27. # puts "1($x1, $y1) 2($x2, $y2)"
  28.     # figure which of the start and end points are "smaller" and the deltas
  29.     if { $x2 > $x1 } {
  30. set x0 $x1
  31. set dx [expr $x2 - $x1]
  32.     } else {
  33. set x0 $x2
  34. set dx [expr $x1 - $x2]
  35.     }
  36.     if { $y2 > $y1 } {
  37. set y0 $y1
  38. set dy [expr $y2 - $y1]
  39.     } else {
  40. set y0 $y2
  41. set dy [expr $y1 - $y2]
  42.     }
  43. # puts "($x0, $y0), d($dx, $dy)"
  44.     if { $dx > $dy } {
  45. auto_analyze_help "y" $x0 $y0 $dx $spacing $num $fileName
  46.     } else {
  47. if { $dx < $dy } {
  48.     auto_analyze_help "x" $x0 $y0 $dy $spacing $num $fileName
  49. } else {
  50.     # problem, but you shouldn't be using sloped lines
  51. }
  52.     }
  53. }
  54. # automatically analyzes a number of cross sections
  55. proc auto_analyze_help {axis x0 y0 len spacing num fileName} {
  56.     global toglPane
  57.     set origx $x0
  58.     set origy $y0
  59.     set windows ""
  60. # puts "$axis $x0 $y0 $len $spacing $num"
  61.     for {set i 0} {$i < $num} {incr i} {
  62. if { [string compare $axis "x"] == 0 } {
  63.     draw_line $x0 $y0 $x0 [expr $y0 + $len]
  64.     set x0 [expr $x0 + $spacing]
  65. } else {
  66.     draw_line $x0 $y0 [expr $x0 + $len] $y0
  67.     set y0 [expr $y0 + $spacing]
  68. }
  69. if {[catch {set win [analyze_line_depth]} msg]} {
  70.     puts -nonewline "Auto-line-analysis failed,"
  71.     puts " pass [expr 1+$i] of $num, due to:"
  72.     puts $msg
  73.     continue
  74. } else {
  75. #     puts "win: $win"
  76.     if { [string compare $fileName ""] != 0 } {
  77. set ctl ".ctl"
  78. set bar "_"
  79. if { [string compare $axis "x"] == 0} {
  80.     plv_export_graph_as_text $win $fileName$bar$x0$ctl
  81. } else {
  82.     plv_export_graph_as_text $win $fileName$bar$y0$ctl
  83. }
  84.     }
  85. }
  86. # not a smart fix, but it seems to work...
  87. redraw 1
  88. # don't want new window interfering with reads of frame
  89. # buffer, so hide it and remember that
  90. wm withdraw $win
  91. lappend windows $win
  92.     }
  93.     if {[string compare $fileName ""] != 0 } {
  94. plv_draw_analyze_lines $toglPane $axis $origx $origy 
  95.     $len $spacing $num
  96. redraw 1
  97. set ext ".rgb"
  98. plv_writeiris $toglPane $fileName$ext
  99. plv_clear_analyze_lines
  100.     }
  101.     foreach win $windows {
  102. wm deiconify $win
  103.     }
  104. }
  105. proc wsh_AlignToPlane {} {
  106.     global theMesh
  107.     global toglPane
  108.     set info [plv_getselectioninfo]
  109.     if { [string compare [lindex $info 0] "shape"] != 0 } {
  110. # error
  111. set badbox [tk_messageBox -type ok -default ok -message 
  112.    "Can't auto_analyze with this selection type" -icon error]
  113. return
  114.     }
  115.     # okay, can use the shape -- only looks at first 3 points
  116.     # doesn't error check for less!
  117.     for {set i 1} {$i < 4} {incr i} {
  118. set x$i [lindex $info [expr 2 * $i - 1]]
  119. set y$i [lindex $info [expr 2 * $i]]
  120.     }
  121. #puts "1($x1, $y1) 2($x2, $y2) 3($x3, $y3)"
  122.     wsh_align_points_to_plane $theMesh $x1 $y1 $x2 $y2 $x3 $y3
  123. }