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

3D图形编程

开发平台:

Visual C++

  1. proc plv_AnalyzeLineMode {an cmd opt1 {opt2 ""}} {
  2.     if {[string range $opt1 0 0] == "$"} {
  3. set opt1 [globalset [string range $opt1 1 end]]
  4.     }
  5.     if {[string range $opt2 0 0] == "$"} {
  6. set opt2 [globalset [string range $opt2 1 end]]
  7.     }
  8.     plv_analyzeLineMode $an.togl $cmd $opt1 $opt2
  9. }
  10. proc createAnalyzeWindow {number width xused xrange zrange name defScale} {
  11.     # sizing is tricky because the size we pass to the togl widget is both
  12.     # its initial size and its minimum size, so if we want to allow it to
  13.     # shrink, we have to pass a small value, then manually size the toplevel
  14.     # window to the size we want, and the togl widget takes up the slack.
  15.     set an .analyze$number
  16.     set analyze [toplevel $an]
  17.     set sh [frame $analyze.show]
  18.     label $sh.cap -text "Show:"
  19.     checkbutton $sh.scale -text Scale -variable ${an}visScale 
  20. -command "plv_AnalyzeLineMode $an show scale $${an}visScale"
  21.     checkbutton $sh.edge -text "Mesh edges" -variable ${an}visEdge 
  22. -command "plv_AnalyzeLineMode $an show edges $${an}visEdge"
  23.     checkbutton $sh.framebuff -text "Pts from frame buffer" 
  24. -variable ${an}visFBPts 
  25. -command "plv_AnalyzeLineMode $an show framebuff $${an}visFBPts"
  26.     checkbutton $sh.color -text "False colors" -variable ${an}visColor 
  27. -command "plv_AnalyzeLineMode $an show color $${an}visColor"
  28.     pack $sh.cap $sh.scale $sh.edge $sh.framebuff $sh.color -side left
  29.     pack $sh -side top -anchor w
  30.     globalset ${an}visScale 1
  31.     globalset ${an}visColor 1
  32.     set scaleVar ${an}scale
  33.     set cm [frame $analyze.commands]
  34.     label $cm.sc -text "Scale: 10^"
  35.     label $cm.scaleT -textvariable $scaleVar -width 2 -anchor w
  36.     label $cm.sc2 -text "mm"
  37.     scale $cm.scale -from -4 -to 4 -orient horiz 
  38. -variable $scaleVar -showvalue off 
  39. -command "plv_AnalyzeLineMode $an scale $$scaleVar"
  40.     checkbutton $cm.flat -text "Fit to horiz line" -state disabled
  41.     button $cm.export -text "Export to text" 
  42. -command "exportAnalysisAsText $an ${name}_#${number}"
  43.     button $cm.exportRGB -text "Export image" 
  44. -command "saveScreenDump $analyze.togl"
  45.     packchildren $cm -side left
  46.     pack $cm -side top -anchor w
  47.     globalset $scaleVar $defScale
  48.     togl $analyze.togl -width $width -height 10 -ident $analyze.togl
  49.     pack $analyze.togl -fill both -expand 1 -side top
  50.     set dims [frame $analyze.dims]
  51.     label $dims.xru -text "x used: $xused"
  52.     label $dims.xrwin -text "x range: $xrange"
  53.     label $dims.zru -text "z range: $zrange"
  54.     pack $dims.xrwin $dims.xru $dims.zru -side left
  55.     pack $dims -side top -fill x
  56.     wm title $analyze "Analyze $name #$number"
  57.     wm geometry $analyze =${width}x180
  58.     window_Register $analyze
  59.     bind $analyze.togl <Button-1>  "plv_AnalyzeLineMode $an zscale %y start"
  60.     bind $analyze.togl <B1-Motion> "plv_AnalyzeLineMode $an zscale %y set"
  61.     bind $analyze.togl <Button-2>  "plv_AnalyzeLineMode $an zscale 0 reset"
  62.     return $analyze
  63. }
  64. proc setAnalyzeZScale {analyzeTogl zscale} {
  65.     set analyze [string range $analyzeTogl 0 [expr [string first .togl 
  66.     $analyzeTogl] - 1]]
  67.     set widget $analyze.dims.zru
  68.     $widget config -text "z range: $zscale"
  69. }
  70. proc planeFitClipRectUI {} {
  71.     global pcfrData
  72.     if [window_Activate .planefit] return
  73.     set pf [toplevel .planefit]
  74.     wm title $pf "Fit plane to cliprect"
  75.     window_Register $pf
  76.     label $pf.ls -text "Data source:" -anchor w -pady 6
  77.     frame $pf.fs -relief groove -border 2
  78.     radiobutton $pf.fs.vertices -text "Mesh vertices" 
  79. -var pfcrData -val data_mesh
  80.     radiobutton $pf.fs.zbuffer -text "Rendered points" 
  81. -var pfcrData -val data_zbuffer
  82.     label $pf.la -text "Actions:" -anchor w -pady 6
  83.     frame $pf.fa -relief groove -border 2
  84.     checkbutton $pf.fa.stats -text "Dump statistics" 
  85. -var pfcrActDump -onvalue dumpstats -offvalue ""
  86.     checkbutton $pf.fa.align -text "Align to screen plane" 
  87. -var pfcrActAlign -onvalue align -offvalue ""
  88.     checkbutton $pf.fa.show -text "Show plane fit" 
  89. -var pfcrActShow -onvalue createplane -offvalue ""
  90.     globalset pfcrActDump ""
  91.     globalset pfcrActAlign align
  92.     globalset pfcrActShow ""
  93.     label $pf.lm -text "Align by moving:" -anchor w -pady 6
  94.     frame $pf.fm  -relief groove -border 2
  95.     radiobutton $pf.fm.camera -text "Camera" -var pfcrMover -val movecamera
  96.     radiobutton $pf.fm.mesh -text "Mesh" -var pfcrMover -val movemesh
  97.     globalset pfcrMover movecamera
  98.     button $pf.go -text "OK" -command {
  99. plv_clipBoxPlaneFit $theMesh 
  100.     $pfcrActDump $pfcrActAlign $pfcrActShow 
  101.     $pfcrData $pfcrMover
  102.     }
  103.     pack $pf.ls $pf.fs $pf.la $pf.fa $pf.lm $pf.fm 
  104. -side top -anchor w -padx 8 -fill x
  105.     pack $pf.go -side top -anchor w -padx 8 -pady 6 -fill x
  106.     pack $pf.fs.vertices $pf.fs.zbuffer -side top -anchor w
  107.     pack $pf.fa.stats $pf.fa.align $pf.fa.show -side top -anchor w
  108.     pack $pf.fm.camera $pf.fm.mesh -side top -anchor w
  109. }
  110. proc autoAnalyzeLineUI {} {
  111.     global toglPane
  112.     if [window_Activate .autoanalyze] return
  113.     set aa [toplevel .autoanalyze]
  114.     wm title $aa "Auto analyze lines"
  115.     window_Register $aa
  116.     # alignment group
  117.     label $aa.l1 -text "Alignment" -anchor w
  118.     frame $aa.f1 -relief groove -borderwidth 2
  119.     checkbutton $aa.f1.ort -text "Orthographic" -variable isOrthographic 
  120. -command { if {$isOrthographic} {plv_ortho} else {plv_persp}; 
  121.        $toglPane render}
  122.     button $aa.f1.app -text "Align points to XY plane" -pady 2 -command {
  123. wsh_AlignToPlane
  124.     }
  125.     # analyze group
  126.     label $aa.l2 -text "Analyze" -anchor w
  127.     frame $aa.f2 -relief groove -borderwidth 2
  128.     label $aa.f2.ls -text "Spacing (in mm):" -anchor w -pady 2
  129.     entry $aa.f2.es -textvariable spacing -relief sunken -width 4
  130.     label $aa.f2.ln -text "Num sections:" -anchor w -pady 2
  131.     entry $aa.f2.en -textvariable num -relief sunken -width 4
  132.     set filename ""
  133.     label $aa.f2.lf -text "Save file name:" -anchor w -pady 2
  134.     entry $aa.f2.ef -textvariable filename -relief sunken -width 4 
  135.     button $aa.f2.go -text "Auto analyze" -pady 2 -command {
  136. auto_a $spacing $num $filename
  137.     }
  138.     pack $aa.f2.ls $aa.f2.es $aa.f2.ln $aa.f2.en $aa.f2.lf $aa.f2.ef $aa.f2.go 
  139. -side top -anchor w -padx 4 -fill x
  140.     pack $aa.f1.ort $aa.f1.app 
  141. -side top -anchor w -padx 4 -fill x
  142.     pack $aa.f1 $aa.f2 -side top -fill x -padx 4 -pady 2
  143. }
  144. # BUGBUG this doesn't belong here
  145. proc polygonizeDialog {} {
  146.     if [window_Activate .polygonize] return
  147.     set sc [toplevel .polygonize]
  148.     window_Register $sc
  149.     scale $sc.levels -label "Levels:" -from 1 -to 10 -orient horiz 
  150. -variable polygonizeLevels
  151.     scale $sc.intlev -label "Internal leaf depth:" -from 0 -to 6 
  152. -orient horiz -variable polygonizeLeafDepth
  153.     globalset polygonizeLevels 7
  154.     globalset polygonizeLeafDepth 3
  155.     button $sc.carve -text "Polygonize using visible meshes" 
  156. -command { addMeshToWindow [plv_spacecarve 
  157. $polygonizeLevels $polygonizeLeafDepth] }
  158.     pack $sc.levels $sc.intlev $sc.carve -side top -fill x -expand true
  159. }