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

3D图形编程

开发平台:

Visual C++

  1. proc cyberscanPreviewUI {} {
  2.    global theMesh previewOnOff previewDrawMode
  3.    if {$theMesh == ""} {
  4.       puts "You need at least one reference scan to preview"
  5.       return
  6.    }
  7.    plv_working_volume use $theMesh
  8.    trace variable theMesh w referenceScanWrite
  9.    set previewOnOff "off"
  10.    set previewDrawMode "solid"
  11.    if {[window_Activate .cyberscanPreview]} { return }
  12.    toplevel .cyberscanPreview
  13.    # Radiobutton for working volume display on/off
  14.    set f [frame .cyberscanPreview.onoff]
  15.    label $f.l -text "Working Volume: " -padx 3
  16.    radiobutton $f.on -text "On" -variable previewOnOff 
  17.       -value on -command previewDisplayOnOff
  18.    radiobutton $f.off -text "Off" -variable previewOnOff 
  19.       -value off -command previewDisplayOnOff
  20.    pack $f.l $f.on $f.off -side left
  21.    pack $f -side top -anchor w
  22.    # Radiobutton for render mode (solid working volume, or lines)
  23.    set f [frame .cyberscanPreview.drawMode]
  24.    label $f.l -text "Display Mode: " -padx 3
  25.    radiobutton $f.solid -text "Solid" -variable previewDrawMode 
  26.       -value solid -command previewDrawModeChange
  27.    radiobutton $f.lines -text "Lines" -variable previewDrawMode 
  28.       -value lines -command previewDrawModeChange
  29.    pack $f.l $f.solid $f.lines -side left
  30.    pack $f -side top -anchor w
  31.    # Scales for scanner working volume boundaries
  32.    set scale_frame [frame .cyberscanPreview.scales 
  33.       -borderwidth 4 -relief ridge]
  34.    set labelWidth 8
  35.    set motMin [frame $scale_frame.motMin]
  36.    label $motMin.l -text "Mot Min" -width $labelWidth -anchor w -padx 3
  37.    scale $motMin.s -from -6 -to 260 -resolution 1 -orient horizontal 
  38.       -length 150 -command previewBounds
  39.    $motMin.s set 0
  40.    pack $motMin -side top -expand true -fill x
  41.    pack $motMin.l -side left -anchor sw
  42.    pack $motMin.s -side right -expand true -fill x
  43.    set motMax [frame $scale_frame.motMax]
  44.    label $motMax.l -text "Mot Max" -width $labelWidth -anchor w -padx 3
  45.    scale $motMax.s -from -6 -to 260 -resolution 1 -orient horizontal 
  46.       -length 150 -command previewBounds
  47.    $motMax.s set 250
  48.    pack $motMax -side top -expand true -fill x
  49.    pack $motMax.l -side left -anchor sw
  50.    pack $motMax.s -side right -expand true -fill x
  51.    set rotMin [frame $scale_frame.rotMin]
  52.    label $rotMin.l -text "Rot Min" -width $labelWidth -anchor w -padx 3
  53.    scale $rotMin.s -from -6 -to 260 -resolution 1 -orient horizontal 
  54.       -length 150 -command previewBounds
  55.    $rotMin.s set 0
  56.    pack $rotMin -side top -expand true -fill x
  57.    pack $rotMin.l -side left -anchor sw
  58.    pack $rotMin.s -side right -expand true -fill x
  59.    set rotMax [frame $scale_frame.rotMax]
  60.    label $rotMax.l -text "Rot Max" -width $labelWidth -anchor w -padx 3
  61.    scale $rotMax.s -from -6 -to 260 -resolution 1 -orient horizontal 
  62.       -length 150 -command previewBounds
  63.    $rotMax.s set 250
  64.    pack $rotMax -side top -expand true -fill x
  65.    pack $rotMax.l -side left -anchor sw
  66.    pack $rotMax.s -side right -expand true -fill x
  67.    set horMin [frame $scale_frame.horMin]
  68.    label $horMin.l -text "Hor Min" -width $labelWidth -anchor w -padx 3
  69.    scale $horMin.s -from -7 -to 825 -resolution 1 -orient horizontal 
  70.       -length 150 -command previewBounds
  71.    $horMin.s set 100
  72.    pack $horMin -side top -expand true -fill x
  73.    pack $horMin.l -side left -anchor sw
  74.    pack $horMin.s -side right -expand true -fill x
  75.    set horMax [frame $scale_frame.horMax]
  76.    label $horMax.l -text "Hor Max" -width $labelWidth -anchor w -padx 3
  77.    scale $horMax.s -from -7 -to 825 -resolution 1 -orient horizontal 
  78.       -length 150 -command previewBounds
  79.    $horMax.s set 500
  80.    pack $horMax -side top -expand true -fill x
  81.    pack $horMax.l -side left -anchor sw
  82.    pack $horMax.s -side right -expand true -fill x
  83.    set horInc [frame $scale_frame.horInc]
  84.    label $horInc.l -text "Hor Inc" -width $labelWidth -anchor w -padx 3
  85.    scale $horInc.s -from 50 -to 150 -resolution 1 -orient horizontal 
  86.       -length 150 -command previewBounds
  87.    $horInc.s set 120
  88.    pack $horInc -side top -expand true -fill x
  89.    pack $horInc.l -side left -anchor sw
  90.    pack $horInc.s -side right -expand true -fill x
  91.    set vert [frame $scale_frame.vert]
  92.    label $vert.l -text "Vertical" -width $labelWidth -anchor w -padx 3
  93.    scale $vert.s -from -2000 -to 2000 -resolution 1 -orient horizontal 
  94.       -length 150 -command previewBounds
  95.    $vert.s set 0
  96.    pack $vert -side top -expand true -fill x
  97.    pack $vert.l -side left -anchor sw
  98.    pack $vert.s -side right -expand true -fill x
  99.    pack $scale_frame -side top -expand true -fill x
  100.    wm title .cyberscanPreview "CyberScan Preview"
  101.    bind .cyberscanPreview <Destroy> "+destroyCyberScanPreviewUI %W"
  102.    window_Register .cyberscanPreview
  103. }
  104. proc referenceScanWrite {name element op} {
  105.     global theMesh
  106.     plv_working_volume use $theMesh
  107.     redraw 1
  108. }
  109. proc previewDisplayOnOff {} {
  110.    global previewOnOff
  111.    if {$previewOnOff == "on"} {plv_working_volume on} 
  112.    else {plv_working_volume off}
  113.    redraw 1
  114. }
  115. proc previewDrawModeChange {} {
  116.    global previewDrawMode
  117.    if {$previewDrawMode == "lines"} {plv_working_volume lines} 
  118.    else {plv_working_volume solid}
  119.    redraw 1
  120. }
  121. proc previewBounds {value} {
  122.    set p .cyberscanPreview.scales
  123.    if {[$p.rotMin.s get] > [$p.rotMax.s get]} 
  124.       {$p.rotMax.s set [$p.rotMin.s get]}
  125.    plv_working_volume [$p.vert.s get] [$p.horInc.s get] [$p.horMin.s get] 
  126.       [$p.horMax.s get] [$p.rotMin.s get] [$p.rotMax.s get] 
  127.       [$p.motMin.s get] [$p.motMax.s get]
  128.    redraw 1
  129. }
  130. proc destroyCyberScanPreviewUI {widget} {
  131.    global theMesh
  132.    if {$widget != ".cyberscanPreview"} {return}
  133.    trace vdelete theMesh w referenceScanWrite
  134. }