www.pudn.com > scanalyze-1.0.3_source_code.rar > auto_a.tcl, change:2003-09-15,size:3627b
# draws a new selection line
proc draw_line {x1 y1 x2 y2} {
# clears current line
plv_drawlineselection 0 0 start
plv_drawlineselection 0 0 move
plv_drawlineselection 0 0 stop
# start drawing new line
plv_drawlineselection $x1 $y1 start
plv_drawlineselection $x2 $y2 move
plv_drawlineselection $x2 $y2 stop
puts "$x1 $y1, $x2 $y2"
}
proc auto_a {spacing num fileName} {
global toglPane
set info [plv_getselectioninfo]
if { [string compare [lindex $info 0] "line"] != 0 } {
# error
set badbox [tk_messageBox -type ok -default ok -message \
"Can't auto_analyze with this selection type" -icon error]
return
}
# okay, can use line
set x1 [lindex $info 1]
set y1 [expr [lindex [$toglPane configure -height] 4]- [lindex $info 2]]
set x2 [lindex $info 3]
set y2 [expr [lindex [$toglPane configure -height] 4]- [lindex $info 4]]
# puts "1($x1, $y1) 2($x2, $y2)"
# figure which of the start and end points are "smaller" and the deltas
if { $x2 > $x1 } {
set x0 $x1
set dx [expr $x2 - $x1]
} else {
set x0 $x2
set dx [expr $x1 - $x2]
}
if { $y2 > $y1 } {
set y0 $y1
set dy [expr $y2 - $y1]
} else {
set y0 $y2
set dy [expr $y1 - $y2]
}
# puts "($x0, $y0), d($dx, $dy)"
if { $dx > $dy } {
auto_analyze_help "y" $x0 $y0 $dx $spacing $num $fileName
} else {
if { $dx $dy } {
auto_analyze_help "x" $x0 $y0 $dy $spacing $num $fileName
} else {
# problem, but you shouldn't be using sloped lines
}
}
}
# automatically analyzes a number of cross sections
proc auto_analyze_help {axis x0 y0 len spacing num fileName} {
global toglPane
set origx $x0
set origy $y0
set windows ""
# puts "$axis $x0 $y0 $len $spacing $num"
for {set i 0} {$i $num} {incr i} {
if { [string compare $axis "x"] == 0 } {
draw_line $x0 $y0 $x0 [expr $y0 + $len]
set x0 [expr $x0 + $spacing]
} else {
draw_line $x0 $y0 [expr $x0 + $len] $y0
set y0 [expr $y0 + $spacing]
}
if {[catch {set win [analyze_line_depth]} msg]} {
puts -nonewline "Auto-line-analysis failed,"
puts " pass [expr 1+$i] of $num, due to:"
puts $msg
continue
} else {
# puts "win: $win"
if { [string compare $fileName ""] != 0 } {
set ctl ".ctl"
set bar "_"
if { [string compare $axis "x"] == 0} {
plv_export_graph_as_text $win $fileName$bar$x0$ctl
} else {
plv_export_graph_as_text $win $fileName$bar$y0$ctl
}
}
}
# not a smart fix, but it seems to work...
redraw 1
# don't want new window interfering with reads of frame
# buffer, so hide it and remember that
wm withdraw $win
lappend windows $win
}
if {[string compare $fileName ""] != 0 } {
plv_draw_analyze_lines $toglPane $axis $origx $origy \
$len $spacing $num
redraw 1
set ext ".rgb"
plv_writeiris $toglPane $fileName$ext
plv_clear_analyze_lines
}
foreach win $windows {
wm deiconify $win
}
}
proc wsh_AlignToPlane {} {
global theMesh
global toglPane
set info [plv_getselectioninfo]
if { [string compare [lindex $info 0] "shape"] != 0 } {
# error
set badbox [tk_messageBox -type ok -default ok -message \
"Can't auto_analyze with this selection type" -icon error]
return
}
# okay, can use the shape -- only looks at first 3 points
# doesn't error check for less!
for {set i 1} {$i 4} {incr i} {
set x$i [lindex $info [expr 2 * $i - 1]]
set y$i [lindex $info [expr 2 * $i]]
}
#puts "1($x1, $y1) 2($x2, $y2) 3($x3, $y3)"
wsh_align_points_to_plane $theMesh $x1 $y1 $x2 $y2 $x3 $y3
}