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

3D图形编程

开发平台:

Visual C++

  1. # Open the main image alignment window
  2. proc imageAlignmentUI {} {
  3.     if [window_Activate .imagealign] return
  4.     
  5.     set iaw [toplevel .imagealign]
  6.     wm title $iaw "Image Alignment"
  7.     window_Register $iaw
  8.     # How can I keep variables available to callbacks except global?
  9.     global curImageAlignFile 
  10.     global shortIAF
  11.     global fivetuples
  12.     global xyztuples
  13.     globalset fivetuples ""
  14.     globalset xyztuples ""
  15.     global curPasteMesh 
  16.     global shortPM 
  17.     global cameraType
  18.     global displayscalevar
  19.     ia_globals
  20.     # Set default camera type
  21.     if {![info exists cameraType]} {
  22. set cameraType DKCST5_2V
  23.     }
  24.     
  25.     # Set default display scale
  26.     if {![info exists displayscalevar]} {
  27. set displayscalevar 25
  28.     }
  29.     # Clear the current point correspondances when we start the window
  30.     # Lucas change:
  31.     # Used to be:     exec echo "" > [glob ~/.tmp2dpoints]
  32.     # Removed the glob, because if the file didn't exist (e.g. a user's
  33.     # first time), the glob would not return a name, and the image
  34.     # align window would never come up.
  35.     exec echo "" > ~/.tmp2dpoints
  36.     exec echo "" > ~/.xyztuples
  37.     # Set the initial state to not corresponding
  38.     globalinit imageactive 0
  39.     menubutton $iaw.menuB -text "Commands Menu" -padx 3 -pady 1 -relief raised
  40. -menu $iaw.menuB.iamenu -underline 0
  41.     set iamenu [menu  $iaw.menuB.iamenu 
  42. -tearoffcommand {setMenuTitle "Image Alignment Controls"}]
  43.     $iamenu add command -label "Open Image..." 
  44. -command establishname
  45.     $iamenu add command -label "Close Image" -command doneclicking
  46.     $iamenu add command -label "Save Correlation Info" -command ia_saveCorrFile
  47.     $iamenu add command -label "Establish paste mesh..." -command setpastemesh
  48.     $iamenu add separator
  49.     set camMenu [createNamedCascade $iamenu camMenu 
  50.    "Camera Type"]
  51.     $camMenu add radiobutton -label DKCST5_2 -variable cameraType -value DKCST5_2
  52.     $camMenu add radiobutton -label DKCST5_2V -variable cameraType -value DKCST5_2V
  53.     $camMenu add radiobutton -label DKCST5_640x480 -variable cameraType -value DKCST5_640x480
  54.     $camMenu add radiobutton -label DKC5000_gantry -variable cameraType -value DKC5000_gantry
  55.     $camMenu add radiobutton -label DKC5000_chapel -variable cameraType -value DKC5000_chapel
  56.     set scaleMenu [createNamedCascade $iamenu scaleMenu 
  57.    "Display Scale"]
  58.     for {set i 5} {$i <= 100} {incr i 5} {
  59. $scaleMenu add radiobutton -label $i% -variable displayscalevar -value $i
  60.     }
  61.     $iamenu add separator
  62.     $iamenu add command -label "Delete Selected Point" -command ia_deleteSelectedPoint
  63.     $iamenu add command -label "Delete All Points" -command {ia_clearCorrList; ia_updateUI}
  64.     $iamenu add separator
  65.     $iamenu add checkbutton -label "Auto Zooming" -variable ia_autoZooming
  66.     $iamenu add checkbutton -label "Zooming On" -variable ia_zoomOn
  67.     $iamenu add checkbutton -label "Mesh Picking On" -variable ia_zoomPickingOn
  68.     $iamenu add checkbutton -label "Picked Mesh Only On" -variable ia_zoomSingleVisOn
  69.     $iamenu add checkbutton -label "Picked Mesh to Res 0 On" -variable ia_zoomResChangeOn
  70.     $iamenu add command -label "Zoom to Feature" -command  {
  71. global ia_lastZoomPoint
  72. set ia_lastZoomPoint ""
  73. ia_zoomToFeature
  74.     }
  75.     $iamenu add command -label "Zoom to .tsai camera viewpoint" -command setview
  76.     $iamenu add command -label "Undo viewpoint change" -command undoview
  77.     $iamenu add separator
  78. #    $iamenu add command -label "Refresh 5-tuples" -command load5tuples
  79. #   $iamenu add command -label "Create .xyzuv" -command savexyzuv
  80.     $iamenu add command -label "Create .tsai" -command createtsai
  81.     $iamenu add separator
  82.     $iamenu add command -label "Paste Color (This Image)" -command dopastecolor
  83.     $iamenu add command -label "Paste Color (Merged Images)" -command dopasteallcolor
  84.     $iamenu add command -label "Load colored mesh(This Image)" -command loadlocalcolor
  85.     $iamenu add command -label "Load colored mesh(Merged Images)" -command loadallcolor
  86.     $iamenu add separator
  87.     $iamenu add command -label "View Color Projection" -command projectivecolor
  88.     $iamenu add command -label "Generate this projected .rgb" -command gentexrgb
  89.     $iamenu add command -label "Generate all projected .rgbs" -command gentexrgbs
  90.     $iamenu add separator
  91.     $iamenu add command -label "Reload imagealign.tcl" -command ia_reload
  92.  #   $iamenu add command -label "" -command 
  93.  #   $iamenu add command -label "" -command 
  94.   #  $iamenu add command -label "" -command 
  95.    # $iamenu add separator
  96.     #buttons section 1 establishing things
  97.     label $iaw.curfilelabel  -textvariable shortIAF
  98.     label $iaw.curmeshlabel  -textvariable shortPM
  99.     scale $iaw.displaysize -relief ridge -orient horizontal -resolution 5 -label "Image Display Scale %" -from 5 -to 100 -variable displayscalevar
  100.     # Camera types
  101.     frame $iaw.cameras 
  102.     label $iaw.cam -text "Cam Type:"
  103.     radiobutton $iaw.horz -text DKCST5_2 -variable cameraType -value DKCST5_2
  104.     radiobutton $iaw.vert -text DKCST5_2V -variable cameraType -value DKCST5_2V
  105.     radiobutton $iaw.ntsc -text DKCST5_640x480 -variable cameraType -value DKCST5_640x480
  106.     radiobutton $iaw.fivek -text DKC5000 -variable cameraType -value DKC5000
  107.     pack $iaw.cam $iaw.horz $iaw.vert $iaw.ntsc $iaw.fivek -in  $iaw.cameras -side left
  108.     # The five tuple region
  109.     listbox $iaw.points  -relief sunken -height 25 -width 50
  110.     # Pack it all
  111.     pack   $iaw.menuB -anchor w
  112.     pack $iaw.curfilelabel $iaw.curmeshlabel
  113. $iaw.points -fill x
  114.     
  115.     doneclicking
  116.     ia_updateUI
  117. }
  118. proc gentexrgb {} {
  119.     global curImageAlignFile 
  120.     global env
  121.     set tsaifile [file rootname $curImageAlignFile].tsai
  122.     set infile [file rootname $tsaifile].rgb
  123.     set grayrgbfile [file rootname $tsaifile].gray.rgb
  124.     set projrgbfile [file rootname $tsaifile].proj.rgb
  125.     plv_resetxform
  126.     plv_positioncamera $tsaifile
  127.     globalset theColorMode gray
  128.     setShininess 0
  129.     plv_writeiris [globalset toglPane] $grayrgbfile
  130.     plv_load_projective_texture $infile
  131.     globalset theColorMode texture
  132.     plv_writeiris [globalset toglPane] $projrgbfile
  133. }
  134. proc gentexrgbs {} {
  135.     global curImageAlignFile 
  136.     global env
  137.     set tsaifiles [glob [file dirname $curImageAlignFile]/*.tsai]
  138.     for {set i 0} {$i < [llength $tsaifiles]} {incr i} {
  139. set tsaifile [lindex $tsaifiles $i]
  140. set infile [file rootname $tsaifile].rgb
  141. set grayrgbfile [file rootname $tsaifile].gray.rgb
  142. set projrgbfile [file rootname $tsaifile].proj.rgb
  143. plv_resetxform
  144. plv_positioncamera $tsaifile
  145. globalset theColorMode gray
  146. setShininess 0
  147. plv_writeiris [globalset toglPane] $grayrgbfile
  148. plv_load_projective_texture $infile
  149. globalset theColorMode texture
  150. # redraw 1
  151. plv_writeiris [globalset toglPane] $projrgbfile
  152.     }
  153. }
  154. proc undoview {} {
  155.     restorecam previousCameraView; redraw 1
  156. }
  157. proc ia_getAspectFromTsai {{filename ""}} {
  158.     if {$filename == ""} {
  159. ia_globals
  160. global curImageAlignFile
  161. set filename [file rootname $curImageAlignFile].tsai
  162.     }
  163.     if {![file exists $filename]} return
  164.     set fid [open $filename]
  165.     gets $fid line
  166.     scan $line "%f" width
  167.     gets $fid line
  168.     scan $line "%f" height
  169.     close $fid
  170.     return "$width $height"
  171. }
  172. proc setview {} {
  173.     global curImageAlignFile
  174.     global renderOnlyActiveMesh
  175.     ia_globals
  176.     set tsaifile [file rootname $curImageAlignFile].tsai
  177.     # We reset the transform before setting it to the new camera
  178.     # because accumulated trackball junk screws things up
  179.     #resize window to match file
  180.     set ia_windowSizeMultiplier [ eval "setMainWindowAspect [ia_getAspectFromTsai]"]
  181.     # move the camera
  182.     savecam previousCameraView
  183.     plv_resetxform
  184.     plv_positioncamera $tsaifile ; redraw 1
  185.  
  186.     # Set the new position as the TSAI_POSITION
  187.     vg_CreateView TSAI_POSITION
  188.     set renderOnlyActiveMesh 0
  189. }
  190. proc projectivecolor {} {
  191.     global curImageAlignFile
  192.     plv_load_projective_texture $curImageAlignFile
  193.     globalset theColorMode texture
  194. }
  195. proc doneclicking {} {
  196.     global imageactive;
  197.     set imageactive 0
  198.     catch {exec killall displayclick}
  199.     globalset shortIAF ""
  200.     globalset curImageAlignFile ""
  201.     ia_clearCorrList
  202.     ia_updateUI
  203. }
  204. proc establishname {} {
  205.     global xyztuples
  206.     set types {
  207. {{Image Files}       {.rgb}}
  208. {{PNG Files}         {.png}}
  209.     }
  210.     set filename [tk_getOpenFile -defaultextension .rgb -filetypes $types]
  211.     if {$filename != ""} {
  212. # Kill old images
  213. doneclicking
  214. # Open new image file
  215. globalset curImageAlignFile $filename
  216. globalset shortIAF [file tail $filename]
  217. set xyztuples ""
  218. # exec echo " " > [glob ~/.tmp2dpoints]
  219. # load5tuples
  220. ia_clearCorrList
  221. ia_loadCorrFile
  222. opendisplay
  223. ia_updateUI
  224.     }
  225. }
  226. proc opendisplay {} {
  227.     global curImageAlignFile
  228.     global xyztuples
  229.     global imageactive
  230.     global displayscalevar
  231.     if {($curImageAlignFile != "") && ($imageactive != 1)} {
  232. exec displayclick -geometry $displayscalevar{%} $curImageAlignFile > [glob ~/.tmp2dpoints] &
  233. globalset xyztuples ""
  234. globalset imageactive 1
  235. idlerefresh
  236.     }
  237. }
  238. proc loadlocalcolor {} {
  239.     global curImageAlignFile 
  240.     set meshfile [file rootname $curImageAlignFile].cs.set
  241. #    set scanname [file rootname $curImageAlignFile].cs
  242.     set scanname [readfile $meshfile]
  243. #   puts "name:$scanname"
  244.     selectScan $scanname
  245.     showOnlyMesh $scanname
  246.     globalset theColorMode true
  247. }
  248. proc loadallcolor {} {
  249.     global curPasteMesh
  250.     set meshfile [file rootname $curPasteMesh].cs.set
  251.     set scanname [readfile $meshfile]
  252. #    puts "name:$scanname"
  253.     selectScan $scanname
  254.     showOnlyMesh $scanname
  255.     globalset theColorMode true
  256. }
  257. proc dopastecolor {} {
  258.     global curPasteMesh
  259.     global curImageAlignFile 
  260.     global env
  261.     set tsaifile [file rootname $curImageAlignFile].tsai
  262.     set meshfile [file rootname $curImageAlignFile].cs.ply
  263.     set meshcfile [file rootname $curImageAlignFile].c.ply
  264.     if {[file exists $curPasteMesh]  && [file exists $tsaifile]} {
  265. exec /bin/rm -f $meshfile $meshcfile
  266.      exec $env(SCANALYZE_DIR)/imagealign/tsai2cply $curPasteMesh $tsaifile &
  267. }
  268.     
  269. }
  270. proc dopasteallcolor {} {
  271.     global curPasteMesh
  272.     global curImageAlignFile 
  273.     global env
  274.     set tsaifile [glob [file dirname $curImageAlignFile]/*.tsai]
  275.     set meshfile [file rootname $curPasteMesh].cs.ply
  276.     set meshcfile [file rootname $curPasteMesh].c.ply
  277.     if {[file exists $curPasteMesh]} {
  278. exec /bin/rm -f $meshfile $meshcfile
  279.      exec $env(SCANALYZE_DIR)/imagealign/tsai2mergecply $curPasteMesh $tsaifile &
  280. }
  281.     
  282. }
  283. proc setpastemesh {} {
  284.     set types {
  285. {{Ply Files}       {.ply}}
  286.     }
  287.     set filename [tk_getOpenFile -defaultextension .ply -filetypes $types]
  288.     if {$filename != ""} {
  289. globalset curPasteMesh $filename
  290. globalset shortPM [file tail $filename]
  291.     }
  292. }
  293.   
  294. proc savexyzuv {} {
  295. puts obsolete
  296. return
  297.     global curImageAlignFile
  298.     global fivetuples
  299.     set newfile [file rootname $curImageAlignFile].xyzuv
  300.     if [file exists $newfile] {
  301. exec date >> $newfile.bak
  302. exec cat $newfile >> $newfile.bak
  303.     }
  304.     if [file exists $curImageAlignFile] {
  305. exec echo $fivetuples > $newfile
  306. puts "$newfile saved"
  307.     }
  308. }
  309. proc createtsai {} {
  310.     global curImageAlignFile
  311.     global env
  312.     global cameraType
  313.     set xyzuvfile [file rootname $curImageAlignFile].corr
  314.     set tsaifile [file rootname $curImageAlignFile].tsai
  315.     set rootname [file rootname $curImageAlignFile]
  316.     if [file exists $tsaifile] {
  317. exec date >> $tsaifile.bak
  318. exec cat $tsaifile >> $tsaifile.bak
  319.     }
  320.     if [file exists $curImageAlignFile] {
  321. # exec echo "path ('/mich4/uvdavid/matlab',path); feval('find_extrinsics','$rootname') ; disp('$tsaifile created.')" | matlab  &
  322. exec $env(SCANALYZE_DIR)/imagealign/xyzuv2tsai -o -c $cameraType $xyzuvfile &
  323. puts "Creating $tsaifile ..."
  324.     }
  325. }
  326. proc idlerefresh {} {
  327.     global imageactive
  328.     #load5tuples
  329.     ia_checkNewUVpoints
  330.     ia_checkAutoZooming
  331.     if {$imageactive == 1} {
  332. after 1000 idlerefresh
  333.     }
  334. }
  335. proc load5tuples {} {
  336. global fivetuples
  337. global xyztuples
  338. #make a 5tuple file
  339.     exec echo $xyztuples > [glob ~/.xyztuples]
  340.     exec paste [glob ~/.xyztuples] [glob  ~/.tmp2dpoints] > [glob ~/.fivetuples]
  341. #load 5tuple file
  342.     set f [open [glob ~/.fivetuples]]
  343.     set fivetuples [read $f 10000]
  344.     close $f
  345.     
  346. }
  347. proc addxyzpoint {xyz u v} {
  348.     global imageactive
  349.     ia_globals
  350. # Check to make sure the imagealignment window is open
  351. # check to make sure we are taking correspondances now
  352. # check finally that we got a numeric result and not "hit background"
  353.     if [winfo exists .imagealign] {
  354. if {$imageactive == 1 && [scan $xyz "%f %f %f" foo1 foo2 foo3]}  {
  355.     set cs [.imagealign.points curselection]
  356.     if {$cs != ""} {
  357. set ia_xyzPoints [lreplace $ia_xyzPoints $cs $cs $xyz]
  358. ia_updateScanName $cs $u $v
  359. # ia_updateSweepPoint $cs
  360. ia_updateUI
  361. ia_setPointSelection [expr $cs + 1]
  362.     }
  363. }
  364.     }
  365. }
  366. proc ia_updateScanName {num u v} {
  367.     ia_globals
  368.     plv_pickscan init
  369.     set scanname [plv_pickscan get $u $v]
  370.     puts $scanname
  371.     set ia_scanName [lreplace $ia_scanName $num $num $scanname]
  372.     plv_pickscan exit
  373.     set ia_fileName [lreplace $ia_fileName $num $num 
  374.  [plv_get_scan_filename $scanname]]
  375. }
  376. proc ia_updateSweepPoint {num} {
  377.     ia_globals
  378.     set scanname [lindex $ia_scanName $num]
  379.     set world [lindex $ia_xyzPoints $num]
  380.     puts $scanname
  381.     puts $world
  382.     set sweepStr [eval plv_worldCoordToSweepCoord $scanname $world]
  383.     set ia_sweepPoints [lreplace $ia_sweepPoints $num $num $sweepStr]
  384. }
  385. proc ia_deleteSelectedPoint {} {
  386.     set cs [.imagealign.points curselection]
  387.     if {$cs != ""} {
  388. ia_deleteCorrListItem $cs
  389.     }
  390.     ia_updateUI
  391. }
  392. proc ia_setPointSelection {arg} {
  393.     .imagealign.points selection clear 0 end
  394.     
  395.     .imagealign.points selection set $arg
  396. }
  397. proc ia_checkNewUVpoints {} {
  398.     global ia_uvPointsFileLen
  399.     ia_globals
  400.     # Set the file length to 0 to start with
  401.     if {![info exists ia_uvPointsFileLen]} {set ia_uvPointsFileLen 0}
  402.     # Read the current state of the file
  403.     set buf ""
  404.     set f [open [glob ~/.tmp2dpoints]]
  405.     while {[gets $f line] >= 0} {
  406. lappend buf $line
  407.     }
  408.     close $f
  409.     # If the current file is longer, add  new points to correlation list
  410.     if {[llength $buf] > $ia_uvPointsFileLen} {
  411. # Add new points
  412. for {set i $ia_uvPointsFileLen} {$i < [llength $buf]} {incr i} {
  413.     ia_addCorrListItem [lindex $buf $i]
  414. }
  415. # set the selection to the first item
  416. set firstEmpty [lsearch -exact $ia_xyzPoints ""]
  417. #puts $firstEmpty
  418. ia_setPointSelection $firstEmpty
  419. # Update UI
  420. ia_updateUI
  421.     }
  422.     # Keep a record of the current file length
  423.     set ia_uvPointsFileLen [llength $buf]
  424. }
  425. proc ia_loadCorrFile {} {
  426.     ia_globals
  427.     global curImageAlignFile
  428.     set newfile [file rootname $curImageAlignFile].corr
  429.     
  430.     if {![file exists $newfile]} return
  431.     set fid [open $newfile]
  432.     while { ![eof $fid] } {
  433.       gets $fid line
  434. scan $line "%c" firstchar
  435. if {$firstchar == "35"} {continue}
  436.       set uv ""
  437.       set xyz ""
  438.       set scanname ""
  439.       set filename ""
  440.       set sweepPoints ""
  441.       set x ""
  442.       set y ""
  443.      set z ""
  444.       set u ""
  445.       set v ""
  446.       if {[ scan $line "%f %f %f %f %f" j1 j2 j3 j4 j5 ] == 5} {
  447.           # We have xyz data
  448.           scan $line "%f %f %f %f %f %s %s " u v x y z scanname filename
  449.       } else {
  450.           # We dont have xyz data
  451.           scan $line "%f %f  " u v
  452.       }
  453.         if { $z != "" } { 
  454.          set xyz "$x $y $z "
  455.      }
  456.   if { $v != "" } {
  457.          set uv "$u $v "
  458.     ia_addCorrListItem "$uv" "$xyz" "$scanname" "$filename" "$sweepPoints"
  459. }
  460.     }
  461.   
  462.    close $fid
  463. }
  464. proc ia_saveCorrFile {} {
  465.     ia_globals
  466.     global curImageAlignFile
  467.     set newfile [file rootname $curImageAlignFile].corr
  468.     if [file exists $newfile] {
  469. exec date >> $newfile.bak
  470. exec cat $newfile >> $newfile.bak
  471.     }
  472.     if [file exists $curImageAlignFile] {
  473. exec echo "# xyzPoints uvPoints scanName fileName sweepPoints" > $newfile
  474. for {set i 0} {$i < [llength $ia_uvPoints]} {incr i} {
  475.     set str [ia_buildCorrStr $i]
  476.     exec echo $str >> $newfile
  477. }
  478.     }
  479. }
  480. proc ia_buildCorrStr {i} {
  481.     ia_globals
  482.     set uvPoint [lindex $ia_uvPoints $i]
  483.     set xyzPoint [lindex $ia_xyzPoints $i]
  484.     set str ""
  485.     if {$xyzPoint == ""} {
  486. set xyzStr [format "       "  ]
  487.     } else {
  488. set xyzStr [format "%7.1f %7.1f %7.1f    " [lindex $xyzPoint 0] [lindex $xyzPoint 1] [lindex $xyzPoint 2]]
  489.     }
  490.     set uvStr [format "%5.1f %5.1f " [lindex $uvPoint 0] [lindex $uvPoint 1]]
  491.     set scanStr "[lindex $ia_scanName $i]   "
  492.     set fileStr "[lindex $ia_fileName $i]   "
  493.     set sweepStr [lindex $ia_sweepPoints $i]
  494.     set str [format "%s%s%s%s%s" $xyzStr $uvStr $scanStr $fileStr $sweepStr]
  495.     return $str
  496. }
  497. proc ia_updateUI {} {
  498.     ia_globals
  499.     set sel [.imagealign.points curselection]
  500.     .imagealign.points delete 0 end
  501.     for {set i 0} {$i < [llength $ia_uvPoints]} {incr i} {
  502. set str [ia_buildCorrStr $i]
  503. .imagealign.points insert end $str
  504.     }
  505.     if {$sel!=""} {
  506. .imagealign.points selection set $sel
  507.     } else {
  508. set firstEmpty [lsearch -exact $ia_xyzPoints ""]
  509. puts $firstEmpty
  510. ia_setPointSelection $firstEmpty
  511.     }
  512. }
  513. proc ia_deleteCorrListItem {item} {
  514.     ia_globals
  515.     set ia_uvPoints [ldelete $ia_uvPoints $item  ]
  516.     set ia_xyzPoints [ldelete $ia_xyzPoints $item ]
  517.     set ia_scanName [ldelete $ia_scanName $item ]
  518.     set ia_fileName [ldelete $ia_fileName $item ]
  519.     set ia_sweepPoints [ldelete $ia_sweepPoints $item ]
  520. }
  521. proc ia_setCorrListItem {} {
  522. }
  523. proc ia_addCorrListItem {uvPoint {xyzPoint ""} {scanName ""} {fileName ""} {sweepPoint ""} } {
  524. global ia_uvPoints ia_xyzPoints ia_scanName ia_fileName ia_sweepPoints
  525. lappend ia_uvPoints $uvPoint
  526. lappend ia_xyzPoints $xyzPoint
  527. lappend ia_scanName $scanName
  528. lappend ia_fileName $fileName
  529. lappend ia_sweepPoints $sweepPoint
  530. }
  531. proc ia_globals {} {
  532.     uplevel {
  533. globalinit ia_uvPoints
  534. globalinit ia_xyzPoints
  535. globalinit ia_scanName
  536. globalinit ia_fileName
  537. globalinit ia_sweepPoints
  538. globalinit ia_autoZooming
  539. globalinit ia_windowSizeMultiplier
  540. globalinit ia_lastZoomPoint
  541. globalinit ia_zoomOn
  542. globalinit ia_zoomPickingOn
  543. globalinit ia_zoomResChangeOn
  544. globalinit ia_zoomSingleVisOn
  545.     }
  546. }
  547. proc ia_clearCorrList {} {
  548.     ia_globals
  549.     
  550.     set ia_uvPoints ""
  551.     set ia_xyzPoints ""
  552.     set ia_scanName ""
  553.     set ia_fileName ""
  554.     set ia_sweepPoints ""
  555. }
  556. proc ia_reload {} {
  557. global env
  558. source $env(SCANALYZE_DIR)/imagealign.tcl
  559. }
  560. proc ia_checkAutoZooming {} {
  561.     ia_globals
  562.     # If we have autozooming turned on
  563.     if {$ia_autoZooming == 1} {
  564. ia_zoomToFeature
  565.     }
  566. }
  567. proc ia_zoomToFeature {} {
  568.     ia_globals
  569.     global renderOnlyActiveMesh
  570.     # If there is a current selection
  571.     if [winfo exists .imagealign] {
  572. set cs [.imagealign.points curselection]
  573. if {$cs != ""} {
  574.     # Get the uv coord of the current selection
  575.     set uvPoint [lindex $ia_uvPoints $cs]
  576.     # Check that we know the correct sizes 
  577.     if {$ia_windowSizeMultiplier == ""} {
  578. puts "Zooming makes no sense without tsai alignment"
  579. return
  580.     }
  581.     
  582.     if {$uvPoint != $ia_lastZoomPoint} {
  583. # Set this as the current point
  584. set ia_lastZoomPoint $uvPoint
  585. # Fix this point to account for current window size
  586. set uPoint [lindex $uvPoint 0]
  587. set uPoint [expr $uPoint * $ia_windowSizeMultiplier]
  588. set vPoint [lindex $uvPoint 1]
  589. set vPoint [expr $vPoint * $ia_windowSizeMultiplier]
  590. # Restore the global view (handled by ia_)
  591. set renderOnlyActiveMesh 0
  592. vg_RestoreState TSAI_POSITION
  593. # Set the zooming base (as seen by zoom_)
  594. zoomSetBaseView
  595. # Zoom to the new view
  596. if {$ia_zoomOn==1} {
  597.     savecam previousCameraView
  598.     eval "zoomNow 40 $uPoint $vPoint"
  599. }
  600. # Pick selected mesh on zoom?
  601. if {$ia_zoomPickingOn==1 || $ia_zoomSingleVisOn==1 || $ia_zoomResChangeOn==1} {
  602.     plv_pickscan init
  603.     set selected [plv_pickscan get $uPoint $vPoint]
  604.     plv_pickscan exit
  605.     if {$selected != ""} {
  606. globalset theMesh $selected
  607.     }
  608. }
  609. # Show only selected mesh on zoom?
  610. if {$ia_zoomSingleVisOn==1} {
  611.     set ia_zoomPickingOn 1
  612.     set renderOnlyActiveMesh 1
  613. }
  614. # Change picked mesh to highest res?
  615. if {$ia_zoomResChangeOn==1} {
  616.     set ia_zoomPickingOn 1
  617.     if {$selected != ""} {
  618. selectNthResolutionForMesh 0 $selected
  619.     }
  620. }
  621.     }
  622. }
  623.     }
  624. }