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

3D图形编程

开发平台:

Visual C++

  1. proc recurBind {frameName keyName funcName} {
  2.     foreach slave [pack slaves $frameName] {
  3. bind $slave $keyName $funcName
  4.     }
  5.     bind $frameName $keyName $funcName
  6. }
  7.     
  8. proc recurShade {frameName newCol shouldRedraw} {
  9.     global theMesh
  10.     set meshNum [lindex [$frameName.label config -text] 4]
  11.     if {$newCol == "invert"} {
  12. set currentCol [lindex [$frameName config -background] 4]
  13. if {$currentCol == "#d9d9d9"} {
  14.     set newCol "DarkGrey"
  15. } else {
  16.     set newCol "#d9d9d9"
  17. }
  18.     }
  19.     if {$newCol == "#d9d9d9"} {
  20. mms_setscanvisible $theMesh $meshNum "1"
  21.     } else {
  22. mms_setscanvisible $theMesh $meshNum "0"
  23.     }
  24.     $frameName configure -background $newCol
  25.     $frameName.label configure -background $newCol
  26.     # if we want to update the poly count, we have to update the mesh's
  27.     # resolution list... so probably not worth the trouble
  28.     if {$shouldRedraw == "1"} {
  29. mms_resetcache $theMesh
  30. redraw 1
  31.     }
  32. }
  33. proc setAllScans {midFrameName codeNum} {
  34.     global theMesh
  35.     foreach colSlave [pack slaves $midFrameName] {
  36. foreach rowSlave [pack slaves $colSlave] {
  37.     if {$codeNum == "0"} {
  38. recurShade $rowSlave "DarkGrey" 0
  39.     } elseif {$codeNum == "1"} {
  40. recurShade $rowSlave "#d9d9d9" 0
  41.     } else {
  42. recurShade $rowSlave "invert" 0
  43.     }
  44. }
  45.     }
  46.     mms_resetcache $theMesh
  47.     redraw 1
  48. }
  49. proc deleteScan {theLabel mmWindowName} {
  50.     global theMesh
  51.     set numScans [mms_numscans $theMesh]
  52.     set meshNum [lindex [$theLabel configure -text] 4]
  53.     if {$meshNum != "--"} {
  54. mms_deletescan $theMesh $meshNum
  55. reindexButtons $mmWindowName $meshNum $numScans
  56. redraw 1
  57.     }
  58. }
  59. proc flipScanNorms {theLabel mmWindowName} {
  60.     global theMesh
  61.     set numScans [mms_numscans $theMesh]
  62.     set meshNum [lindex [$theLabel configure -text] 4]
  63.     if {$meshNum != "--"} {
  64. mms_flipscannorms $theMesh $meshNum
  65. redraw 1
  66.     }
  67. }
  68. proc reindexButtons {mmWindowName meshNum numScans} {
  69.     set theButton 0
  70.     set ourFrame $mmWindowName.midFrame
  71.     foreach colSlave [pack slaves $ourFrame] {
  72. foreach rowSlave [pack slaves $colSlave] {
  73.     set theNum [lindex [$rowSlave.label configure -text] 4]
  74.     if {$theNum == $meshNum} {
  75. set theButton $rowSlave
  76.     } elseif {$theNum > $meshNum} {
  77. $rowSlave.label configure -text [expr $theNum - 1]
  78.     }
  79. }
  80.     }
  81.     pack forget $theButton
  82.     set meshSel $mmWindowName.topFrame.meshSel
  83.     $meshSel.color configure -background grey
  84.     $meshSel.label configure -text "--"
  85.     
  86.  }    
  87. proc makeSelection {selecFrame sourceFrame} {
  88.     set meshNum [lindex [$sourceFrame.label configure -text] 4]
  89.     set meshCol [lindex [$sourceFrame.color configure -background] 4]
  90.     $selecFrame.label configure -text $meshNum
  91.     $selecFrame.color configure -background $meshCol
  92. }
  93. proc MM {} {
  94.     global theMesh
  95.     if {$theMesh == ""} {
  96. tk_messageBox -type ok -icon error 
  97. -message "No mesh selected"
  98. return
  99.     }
  100.     set mmtk [toplevel .mmtk$theMesh]
  101.     pack [label $mmtk.meshName -text $theMesh] -side top -anchor n
  102.     frame $mmtk.topFrame -borderwidth 5
  103.     set meshSel [frame $mmtk.topFrame.meshSel -relief groove]
  104.     frame $meshSel.color -width 10 -height 10 -background grey
  105.     label $meshSel.label -text "--" -padx 3
  106.     
  107.     set buttons [frame $mmtk.topFrame.buttons -borderwidth 2]
  108.     button $buttons.delButton -height 1 -text "Delete" -padx 0 -pady 0 
  109.     -command "deleteScan $meshSel.label $mmtk"
  110.     button $buttons.flipButton -height 1 -text "FlipNrm" -padx 0 -pady 0 
  111.     -command "flipScanNorms $meshSel.label $mmtk"
  112.     pack $buttons.delButton $buttons.flipButton -side left
  113.     pack $meshSel.color $meshSel.label -side left
  114.     pack $buttons $meshSel -side left -anchor w
  115.     frame $mmtk.midFrame -borderwidth 5
  116.     set i 0
  117.     set numScans [mms_numscans $theMesh]
  118.     set numCols [expr $numScans / 5.0]
  119.     set numCols [expr round($numCols + 0.499)]
  120.     if {$numCols == 0} {set numCols 1}
  121.     if {$numCols > 5} {set numCols 5}
  122.     set scansPerCol [expr round(double($numScans) / $numCols + 0.499)]
  123.     for {set col 0} {$col < $numCols} {incr col} {
  124. set meshCol [frame $mmtk.midFrame.meshCol$col]
  125. set iBound [expr $i + $scansPerCol]
  126. if {$iBound >= $numScans} {set iBound $numScans}
  127. for {} 
  128. {$i < $iBound} {incr i} {
  129.     set meshFrame [frame $meshCol.meshFrame$i -relief groove 
  130.     -borderwidth 1]
  131.     set meshLabel [label $meshFrame.label -text $i -padx 3]
  132.     set colorName [mms_getscanfalsecolor $theMesh $i]
  133.     set meshColor [frame $meshFrame.color -width 10 -height 10 
  134.     -background $colorName]
  135.     pack $meshColor $meshLabel -side left -anchor w
  136.     set commStr "makeSelection $meshSel $meshFrame"
  137.     recurBind $meshFrame <ButtonRelease-3> $commStr
  138.     set commStr "recurShade $meshFrame invert 1"
  139.     recurBind $meshFrame <ButtonRelease-1> $commStr
  140.     pack $meshFrame -side top -anchor e -fill x
  141. }
  142. pack $meshCol -side left -anchor w -fill x
  143.     }
  144.     frame $mmtk.botFrame -borderwidth 3
  145.     button $mmtk.botFrame.showAll -text "ShowAll" -padx 0 -pady 0 
  146.      -command "setAllScans $mmtk.midFrame 1"
  147.     button $mmtk.botFrame.hideAll -text "HideAll" -padx 0 -pady 0 
  148.      -command "setAllScans $mmtk.midFrame 0"
  149.     button $mmtk.botFrame.invt    -text "Inv" -padx 0 -pady 0 
  150.      -command "setAllScans $mmtk.midFrame 2"
  151.     pack $mmtk.botFrame.showAll $mmtk.botFrame.hideAll $mmtk.botFrame.invt 
  152.     -side left -anchor w
  153.     pack $mmtk.topFrame $mmtk.midFrame $mmtk.botFrame -side top -anchor w
  154.     wm title $mmtk "MMTools"
  155.     
  156. }