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

3D图形编程

开发平台:

Visual C++

  1. # vripUI.tcl
  2. # front-end UI to vrip
  3. # magi@cs.stanford.edu
  4. # created 6/8/2000 (moved code from file.tcl)
  5. ############################################################
  6. #
  7. # CyberScan export to vrip
  8. # this will be the main code path
  9. #
  10. ############################################################
  11. proc file_esdfvd_setRes {from resIndex} {
  12.     if {$resIndex == ""} return
  13.     set f .sdvr.res
  14.     if {$from == "r"} {
  15. for {set i 0} {$i < 6} {incr i} {
  16.     if {[expr (1 << $i) / 4.0] >= $resIndex} break
  17. }
  18. set resIndex $i
  19.     }
  20.     if {$from != "v"} {
  21. $f.v delete 0 end
  22. $f.v insert 0 $resIndex
  23.     }
  24.     if {$from != "r"} {
  25. set res [expr (1 << $resIndex) / 4.0]
  26. $f.r delete 0 end
  27. $f.r insert 0 $res
  28.     }
  29.     if {$from != "s"} {
  30. $f.s set $resIndex
  31.     }
  32. }
  33. proc file_setWidgetFromBrowseDir {toSet} {
  34.     set dir [tk_chooseDirectory]
  35.     if {$dir != ""} {
  36. $toSet delete 0 end
  37. $toSet insert 0 $dir
  38.     }
  39. }
  40. proc file_browseButton {name toSet} {
  41.     button $name -padx 0 -pady 0 -text "..." 
  42. -command "file_setWidgetFromBrowseDir $toSet"
  43. }
  44. proc file_exportSDForVrip {res outDir outOld subsweeps deletesweeps} {
  45.     # create directory
  46.     if {[catch {file mkdir $outDir/input} err]} {
  47. guiError "Error writing meshes for vrip: $err"
  48. return
  49.     }
  50.     # link old plys over, if necessary
  51.     set bConfOnly 0
  52.     if {$outOld != ""} {
  53. foreach ply [glob $outOld/input/*.ply] {
  54.     catch {exec ln -s $ply $outDir/input}
  55. }
  56. set bConfOnly 1
  57.     }
  58.     if {[catch {plv_write_sd_for_vrip $res $outDir/input
  59.     $subsweeps $deletesweeps $bConfOnly} err]} {
  60. guiError "Error writing meshes for vrip: $err"
  61.     }
  62. }
  63. proc file_exportSDForVripDialog {} {
  64.     if [window_Activate .sdvr] return
  65.     toplevel .sdvr
  66.     wm title .sdvr "SD->ply->vrip"
  67.     window_Register .sdvr
  68.     set f [frame .sdvr.res]
  69.     label $f.l -text "Res index (0-6, 0=max):"
  70.     entry $f.v -width 2
  71.     scale $f.s -orient horiz -from 0 -to 6 -showvalue 0 
  72. -command { file_esdfvd_setRes s }
  73.     label $f.l2 -text "Res:"
  74.     entry $f.r -width 4
  75.     label $f.l3 -text "mm"
  76.     bind $f.v <KeyRelease> {file_esdfvd_setRes v [%W get]}
  77.     bind $f.r <KeyRelease> {file_esdfvd_setRes r [%W get]}
  78.     $f.s set 5
  79.     packchildren $f -side left
  80.     set f [frame .sdvr.dir]
  81.     label $f.l -text "Output directory:"
  82.     entry $f.v -width 30
  83.     file_browseButton $f.b $f.v
  84.     packchildren $f -side left
  85.     set f [frame .sdvr.dirOld]
  86.     label $f.l -text "Reuse plys from:"
  87.     entry $f.v -width 30
  88.     file_browseButton $f.b $f.v
  89.     packchildren $f -side left
  90.     set f [frame .sdvr.subsweeps]
  91.     checkbutton $f.v -text "Use sub-sweeps (currently buggy!)" 
  92. -variable useSubSweeps -onvalue subsweeps -offvalue sweeps
  93.     packchildren $f -side left
  94.     checkbutton .sdvr.delsweeps -text "Delete meshes after export" 
  95. -variable deleteVripSweeps
  96.     button .sdvr.go -text "Go for it" 
  97. -command {
  98.     file_exportSDForVrip [.sdvr.res.v get] [.sdvr.dir.v get] 
  99. [.sdvr.dirOld.v get] $useSubSweeps $deleteVripSweeps
  100. }
  101.     packchildren .sdvr -side top -anchor w
  102. }
  103. ############################################################
  104. #
  105. # MMS and Ply exporters
  106. # old legacy codepaths, should be rewritten in above model
  107. # or merged with it
  108. ############################################################
  109. proc file_exportPlyForVripDialog {} {
  110.     if [window_Activate .plyvr] return
  111.     toplevel .plyvr
  112.     wm title .plyvr "Ply->vrip"
  113.     window_Register .plyvr
  114.     set f [frame .plyvr.res]
  115.     label $f.l -text "Res index (0-3, 0=max):"
  116.     entry $f.v -width 2
  117.     $f.v insert 0 0
  118.     packchildren $f -side left
  119.     set f [frame .plyvr.dir]
  120.     label $f.l -text "Output directory:"
  121.     entry $f.v -width 30
  122.     packchildren $f -side left
  123.     button .plyvr.go -text "Go" 
  124. -command {
  125.     file_exportPlyForVrip [.plyvr.res.v get] [.plyvr.dir.v get]
  126. }
  127.     packchildren .plyvr -side top -anchor w
  128. }
  129. proc file_exportPlyForVrip {res dir} {
  130.     set confstr [plv_write_ply_for_vrip $res $dir]
  131.     set CONF [open "$dir/vrip.conf" a]
  132.     foreach bmesh $confstr {
  133.         puts $CONF $bmesh
  134.     }
  135.     close $CONF
  136. }
  137. proc file_exportMMSForVripDialog {} {
  138.     if [window_Activate .mmsvr] return
  139.     toplevel .mmsvr
  140.     wm title .mmsvr "MMS->ply->vrip"
  141.     window_Register .mmsvr
  142.     set f [frame .mmsvr.res]
  143.     label $f.l -text "Res index (0-5, 0=max):"
  144.     entry $f.v -width 2
  145.     $f.v insert 0 5
  146.     packchildren $f -side left
  147.     set f [frame .mmsvr.dir]
  148.     label $f.l -text "Output directory:"
  149.     entry $f.v -width 30
  150.     packchildren $f -side left
  151.     checkbutton .mmsvr.xf -text "No Z-axis align" -variable noAlign
  152.     button .mmsvr.go -text "Go for it" 
  153. -command {
  154.     file_exportMMSForVrip [.mmsvr.res.v get] [.mmsvr.dir.v get] 
  155.     $noAlign
  156. }
  157.     packchildren .mmsvr -side top -anchor w
  158. }
  159. proc file_exportMMSForVrip {res dir noAlign} {
  160.     if {$noAlign == "1"} {
  161. puts "Not Aligning with Z-Axis"
  162. set confstr [plv_write_mm_for_vrip $res $dir "-noxform"]
  163.     } else {
  164. puts "Aligning with Z-Axis for VRIP"
  165. set confstr [plv_write_mm_for_vrip $res $dir]
  166. set CONF [open "$dir/vrip.conf" a]
  167. foreach bmesh $confstr {
  168.     puts $CONF $bmesh
  169. }
  170. close $CONF
  171.     }
  172. }