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

3D图形编程

开发平台:

Visual C++

  1. proc clipDialog {} {
  2.     if [window_Activate .clipDialog] return
  3.     set cd [toplevel .clipDialog]
  4.     wm title $cd "Clip to Selection"
  5.     window_Register $cd
  6.     set src [frame $cd.src -border 2 -relief groove]
  7.     label $src.l -text "Clip what:"
  8.     radiobutton $src.sel -text "Current mesh" 
  9. -variable clipSrc -value sel
  10.     radiobutton $src.vis -text "Visible meshes" 
  11. -variable clipSrc -value vis
  12.     radiobutton $src.all -text "All meshes" 
  13. -variable clipSrc -value all
  14.     packchildren $src -side top -anchor w
  15.     set trg [frame $cd.trg -border 2 -relief groove]
  16.     label $trg.l -text "Results:"
  17.     radiobutton $trg.new -text "In new mesh" 
  18. -variable clipTrg -value newmesh
  19.     radiobutton $trg.inp -text "In place of original" 
  20. -variable clipTrg -value inplace
  21.     packchildren $trg -side top -anchor w
  22.     set mode [frame $cd.mode -border 2 -relief groove]
  23.     label $mode.l -text "While keeping:"
  24.     radiobutton $mode.in -text "Inside" 
  25. -variable clipMode -value inside
  26.     radiobutton $mode.out -text "Outside" 
  27. -variable clipMode -value outside
  28.     packchildren $mode -side top -anchor w
  29.     button $cd.clip -text "Clip" -command {
  30. doClipMesh $theMesh [list $clipSrc $clipTrg $clipMode]
  31.     }
  32.     globalset clipSrc sel
  33.     globalset clipTrg newmesh
  34.     globalset clipMode inside
  35.     packchildren $cd -side top -anchor w -padx 3 -pady 3 -fill x
  36. }
  37. proc doClipMesh {mesh {mode "sel newmesh inside"}} {
  38.     global theMesh
  39.     if {$mesh == ""} {
  40. puts "No mesh selected."
  41. return
  42.     }
  43.     eval "plv_clip_to_selection $mesh $mode"
  44.     #autoClearSelection - still want to see the box when the clip is done
  45.     updatePolyCount
  46.     redraw 1
  47. }
  48. proc doClipSplitMesh {mesh} {
  49.     doClipMesh $mesh [list sel newmesh inside]
  50.     changeVis $mesh 1
  51.     doClipMesh $mesh [list sel inplace outside]
  52. }
  53. proc clipInplaceHelper {newMesh theMeshOld} {
  54.     addMeshToWindow $newMesh
  55.     
  56.     changeVis $newMesh 1
  57.     
  58.     if {$theMeshOld == $newMesh} {
  59. globalset theMesh $newMesh
  60.     }
  61. }
  62. proc clipMeshCreateHelper {oldMesh newMesh} {
  63.     addMeshToWindow $newMesh
  64.     redraw block
  65.     changeVis $oldMesh 0
  66.     changeVis $newMesh 1
  67.     redraw flush
  68.     if {[globalset theMesh] == $oldMesh} {
  69. globalset theMesh $newMesh
  70.     }
  71. }
  72. proc autoClearSelection {} {
  73.     if {[globalset styleAutoClearSel]} {
  74. clearSelection
  75.     }
  76. }
  77. proc clearSelection {} {
  78.     plv_clearselection [globalset toglPane]
  79. }
  80. proc extendedHideShow {} {
  81.     if {[window_Activate .extHideShow]} { return }
  82.     set ehs [toplevel .extHideShow]
  83.     wm title $ehs "Visiblity Groups"
  84.     window_Register $ehs
  85.     
  86.    
  87.     set gr [frame $ehs.visgroups -border 2 -relief groove]
  88.     frame $gr.f
  89.     button $gr.f.create -text "Create visibility group named:" 
  90. -command "newVisGroup $gr"
  91.     entry $gr.f.name -width 12
  92.     packchildren $gr.f -side left -fill x -expand 1
  93.     packchildren $gr -side top -fill both -expand 1
  94.     packchildren $ehs -side top -fill x -expand 1 
  95. -padx 3 -pady 3 -ipadx 3 -ipady 3
  96. }
  97. proc loadMeshes {load args} {
  98.     redraw block
  99.     plv_progress start [llength $args] "Load [llength $args] meshes"
  100.     foreach mesh $args {
  101. changeLoaded $mesh $load
  102. if {![plv_progress updateinc]} {
  103.     break
  104. }
  105.     }
  106.     plv_progress done
  107.     redraw flush
  108. }
  109. proc newVisGroup {gr} {
  110.     global uniqueInt
  111.     set f [frame $gr.vg[incr uniqueInt]]
  112.     set name [$gr.f.name get]
  113.     set list [getVisibleMeshes]
  114.     set title "list Meshes in visibility group $name:"
  115.     label $f.l -text $name
  116.     button $f.s -text "Show" -command 
  117. "tk_messageBox -message [list $list] -title [list $title] -parent $gr"
  118.     button $f.a -text "Activate" -command "showOnlyMesh $list"
  119.     button $f.d -text "Delete" -command "destroy $f"
  120.     pack $f.l -side left
  121.     pack $f.d $f.a $f.s -side right
  122.     pack $f -side top -fill x -expand 1
  123. }