source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/vrippack-0.31/src/vrip/briansvrip.tcl @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 13.6 KB
Line 
1set tcl_prompt1 {puts -nonewline "vrip> "}
2set tcl_prompt2 {puts -nonewline "> "}
3
4if {[info exists env(HOSTTYPE)]} {
5    if {$env(HOSTTYPE) == "i386-linux"} {
6        set isLinux 1
7    } else {
8        set isLinux 0
9    }
10} else {
11    set isLinux 0
12}
13
14set CywarpAngle ""
15set CywarpSTZoom 1.0
16set CywarpYZoom 1.0
17
18set sliceNum 0
19set weightScale 1
20set sliceDirection "y"
21set maxWeightScale 256
22set useNorm 0
23
24
25proc newgrid args {
26    global slice_scale
27    global useNorm
28
29    if {!$useNorm} {
30        eval vrip_newgridrle $args
31    } else {
32        eval vrip_newgridnormrle $args
33    }
34    update_slice
35}
36
37
38proc readgrid args {
39    eval vrip_readgrid $args
40    update_slice
41}
42
43
44proc bmeshlinwarp args {
45    global CywarpSTZoom
46    global CywarpYZoom
47    global CywarpAngle
48
49    puts "Creating ply file..."
50    set fileName [dowarp [lindex $args 0]]
51
52    global useNorm
53
54    set newArgs [lreplace $args 0 0 $fileName]
55
56    eval vrip_rangescanlin $newArgs
57
58    update_slice   
59
60#    exec rm $fileName
61    pcreate /bin/rm $fileName
62}
63
64
65proc bmeshwarp args {
66    global CywarpSTZoom
67    global CywarpYZoom
68    global CywarpAngle
69
70    puts "Creating ply file using ($CywarpSTZoom, $CywarpYZoom, $CywarpAngle)..."
71    set fileName [dowarp [lindex $args 0]]
72
73    global useNorm
74
75    set newArgs [lreplace $args 0 0 $fileName]
76
77    if {!$useNorm} {
78        eval vrip_rangescanrle $newArgs
79    } else {
80        eval vrip_rangescannormrle $newArgs
81    }
82    update_slice   
83
84#    exec rm $fileName
85    pcreate /bin/rm $fileName
86}
87
88
89proc dowarp name {
90    global CywarpSTZoom
91    global CywarpYZoom
92    global CywarpAngle
93
94    set root [file rootname $name]
95    set frameFile ${root}.cmp
96    set i 0
97    while {1} {
98        set plyFile /usr/tmp/temp_$i.ply
99        if {![file exists $plyFile]} {
100            break
101        }
102        incr i
103    }
104
105    if {$CywarpAngle == ""} {
106
107#       catch {exec cywarp $frameFile $plyFile -stzoom $CywarpSTZoom -yzoom $CywarpYZoom} msg
108
109        pcreate /u/curless/scripts/cywarp $frameFile $plyFile -stzoom $CywarpSTZoom -yzoom $CywarpYZoom
110
111    } else {
112
113#       catch {exec cywarp $frameFile $plyFile -stzoom $CywarpSTZoom -yzoom $CywarpYZoom -wangle $CywarpAngle} msg
114
115        pcreate /u/curless/scripts/cywarp $frameFile $plyFile -stzoom $CywarpSTZoom -yzoom $CywarpYZoom -wangle $CywarpAngle
116
117    }
118
119    return $plyFile
120}
121
122
123proc bmesh args {
124    global useNorm
125
126    if {!$useNorm} {
127        eval vrip_rangescanrle $args
128    } else {
129        eval vrip_rangescannormrle $args
130    }
131    update_slice
132}
133
134proc bmeshlin args {
135    eval vrip_rangescanlin $args
136    update_slice
137}
138
139
140proc vrip_slicer {} {
141    global slicerWin
142    wm geometry $slicerWin "+40+40"
143    wm deiconify $slicerWin   
144}
145
146
147proc vrip_render_view {} {
148    global renderWin
149    wm geometry $renderWin "+40+40"
150    wm deiconify $renderWin   
151}
152
153
154proc writeirisslice {name count} {
155    global vripSlice
156
157    # Set up frame count suffix
158    if {$count < 10} {
159        set suffix 000${count}
160    } elseif {$count < 100} {
161        set suffix 00${count}
162    } elseif {$count < 1000} {
163        set suffix 0${count}
164    } else {
165        set suffix ${count}
166    }
167
168    $vripSlice write ${name}${suffix}.ppm -format ppm
169    exec fromppm ${name}${suffix}.ppm ${name}${suffix}.rgb
170    exec /bin/rm ${name}${suffix}.ppm
171}
172
173proc update_slice {} {
174    global vripSlice
175    global sliceDirection
176    global sliceNum
177    global weightScale
178    global slice_scale
179    global useNorm
180   
181    if {$sliceDirection == "x"} {
182        if {!$useNorm} {
183            set size [lindex [vrip_inforle] 1]
184        } else {
185            set size [lindex [vrip_infonormrle] 1]
186        }
187    } elseif {$sliceDirection == "y"} {
188        if {!$useNorm} {
189            set size [lindex [vrip_inforle] 3]
190        } else {
191            set size [lindex [vrip_infonormrle] 3]
192        }
193    } elseif {$sliceDirection == "z"} {
194        if {!$useNorm} {
195            set size [lindex [vrip_inforle] 5]
196        } else {
197            set size [lindex [vrip_infonormrle] 5]
198        }
199    }
200
201    $slice_scale configure -to $size
202   
203    if {!$useNorm} {
204        vrip_setphotoslice $vripSlice $sliceNum $sliceDirection $weightScale
205        vrip_photoslicerle $vripSlice $sliceNum $sliceDirection $weightScale
206    } else {
207        vrip_photoslicenormrle $vripSlice $sliceNum $sliceDirection $weightScale
208    }
209}
210
211
212proc change_weight_scale {scale} {
213    global weightScale
214    set weightScale $scale
215    update_slice
216}
217
218proc change_slice {slice} {
219    global sliceNum
220    set sliceNum $slice
221    update_slice
222}
223
224
225if {$isLinux} {
226    set renderWin [toplevel .renderWin]   
227} else {
228    set renderWin [toplevel .renderWin -visual {truecolor 24}]   
229}
230
231wm withdraw $renderWin
232set renderPhoto [image create photo renderPhoto -palette 256]
233set renderContainer [label $renderWin.renderContainer -image $renderPhoto]
234pack $renderContainer
235vrip_setrenderphoto $renderPhoto
236$renderPhoto put black -to 0 0 199 199
237
238wm withdraw .
239if {$isLinux} {
240    set slicerWin [toplevel .slicerWin]
241} else {
242    set slicerWin [toplevel .slicerWin -visual {truecolor 24}]
243}
244wm withdraw $slicerWin
245
246set frame1 [frame $slicerWin.frame1]
247if {$isLinux} {   
248    set vripSlice [image create photo vripSlice -palette 256/0/256]
249} else {
250    set vripSlice [image create photo vripSlice]
251}
252set sliceContainer [label $frame1.sliceContainer -image $vripSlice]
253
254set sliceFrame [frame $slicerWin.frame1.sliceFrame]
255set slice_scale [scale $sliceFrame.scale -from 0 \
256        -command "change_slice" -label "Slice number" -orient horizontal\
257        -length 150]
258pack append $sliceFrame $slice_scale {left padx 0}
259
260set weightFrame [frame $slicerWin.frame1.weightFrame]
261set weight_scale [scale $weightFrame.scale -from 1 -to $maxWeightScale \
262        -command "change_weight_scale" -label "Weight scale" \
263        -orient horizontal -length 150]
264pack append $weightFrame $weight_scale {left padx 0}
265
266set showWeights 0
267set frame2 [frame $slicerWin.frame2]
268pack append $frame2 \
269        [label $frame2.sliceDirLabel -text "Slice direction"] {top pady 0} \
270        [radiobutton $frame2.b1 -relief flat -text "X" \
271        -variable sliceDirection -value x ]  {left padx 0}\
272        [radiobutton $frame2.b2 -relief flat -text "Y" \
273        -variable sliceDirection  -value y -state active]  {left padx 0}\
274        [radiobutton $frame2.b3 -relief flat -text "Z" \
275        -variable sliceDirection -value z]  {left padx 0}\
276
277#pack append $frame1 $photo {left padx 0} $slice_scale {left padx 0} 
278pack append $frame1 $sliceFrame {top pady 10} \
279        $weightFrame {top pady 0} \
280        [checkbutton $frame1.showWeights -text "Show weights" \
281        -variable showWeights \
282        -command {vrip_param -show_conf_slice $showWeights; update_slice}] \
283        {top pady 0} \
284        $sliceContainer {top pady 0} 
285
286pack append $slicerWin $frame2 {top pady 0} $frame1 {top pady 0}
287
288
289# Creates an alias for a command name
290proc alias {newname oldname} {
291    eval "proc $newname args \{eval \"$oldname \$args\"\}"
292}
293
294proc do_nothing args {}
295
296alias show_render vrip_render_view
297alias slicer vrip_slicer
298alias cube vrip_cube
299alias transpxz vrip_transpxzrle
300
301if ($useNorm) {
302    alias writegrid vrip_writegridnorm
303} else {
304    alias writegrid vrip_writegrid
305}
306
307
308alias fill vrip_fillrle
309alias ellipse vrip_ellipserle
310alias cylinder vrip_cylinderrle
311alias extract vrip_extract
312alias avgdown vrip_avgdownrle
313alias blurvb vrip_blurvb
314
315alias camera do_nothing
316alias mesh do_nothing
317alias bpolygon do_nothing
318alias view do_nothing
319
320alias param vrip_param
321alias quit exit
322
323proc newfromply {plyfile res} {
324    global env
325   
326    catch {exec plybbox $plyfile} msg
327
328    scan $msg "%f %f %f %f %f %f" minx miny minz maxx maxy maxz
329    set xlen [expr $maxx - $minx]
330    set ylen [expr $maxy - $miny]
331    set zlen [expr $maxz - $minz]
332    set orgx [expr $xlen/2 + $minx]
333    set orgy [expr $ylen/2 + $miny]
334    set orgz [expr $zlen/2 + $minz]
335
336    #if {$xlen > $ylen} {set maxdim $xlen} else {set maxdim $ylen}
337    #if {$maxdim < $zlen} {set maxdim $zlen}
338    #set dim [expr int(1.2*$maxdim/$res)]
339    #puts "$xlen $ylen $zlen"
340    #puts "newgrid $dim $res $orgx $orgy $orgz"
341    #newgrid $dim $res $orgx $orgy $orgz
342
343    set xdim [expr int(1.2*$xlen/$res) + 10]
344    set ydim [expr int(1.2*$ylen/$res) + 10]
345    set zdim [expr int(1.2*$zlen/$res) + 10]
346    puts "newgrid $xdim $ydim $zdim $res $orgx $orgy $orgz"
347    newgrid $xdim $ydim $zdim $res $orgx $orgy $orgz
348}
349
350
351proc newfromcyl {cylfile res} {
352    global env
353    global isLinux
354
355    set i 0
356    while {1} {
357        set tmpPlyFile /usr/tmp/temp_$i.ply
358        if {![file exists $tmpPlyFile]} {
359            break
360        }
361        incr i
362    }
363
364    puts "Creating $tmpPlyFile for temporary usage..."
365    if {$isLinux} {
366        catch {exec cyfiletoply $cylfile $tmpPlyFile} msg
367        catch {exec plyroty $tmpPlyFile 180} msg
368        catch {exec plybbox $tmpPlyFile} msg
369    } else {
370        catch {exec cytoply $cylfile $tmpPlyFile} msg
371        catch {exec plyroty $tmpPlyFile 180} msg
372        catch {exec plybbox $tmpPlyFile} msg
373    }
374
375    puts "Removing $tmpPlyFile..."
376    catch {exec /bin/rm $tmpPlyFile} tmp
377    scan $msg "%f %f %f %f %f %f" minx miny minz maxx maxy maxz
378    set xlen [expr $maxx - $minx]
379    set ylen [expr $maxy - $miny]
380    set zlen [expr $maxz - $minz]
381    set orgx [expr $xlen/2 + $minx]
382    set orgy [expr $ylen/2 + $miny]
383    set orgz [expr $zlen/2 + $minz]
384
385    #if {$xlen > $ylen} {set maxdim $xlen} else {set maxdim $ylen}
386    #if {$maxdim < $zlen} {set maxdim $zlen}
387    #set dim [expr int(1.2*$maxdim/$res)]
388    #puts "newgrid $dim $res $orgx $orgy $orgz"
389    #newgrid $dim $res $orgx $orgy $orgz
390
391    set xdim [expr int(1.2*$xlen/$res) + 10]
392    set ydim [expr int(1.2*$ylen/$res) + 10]
393    set zdim [expr int(1.2*$zlen/$res) + 10]
394    puts "newgrid $xdim $ydim $zdim $res $orgx $orgy $orgz"
395    newgrid $xdim $ydim $zdim $res $orgx $orgy $orgz
396}
397
398
399proc max {a b} {
400   if {$a > $b} {
401      return $a
402   } else {
403      return $b
404   }
405}
406
407
408proc min {a b} {
409   if {$a < $b} {
410      return $a
411   } else {
412      return $b
413   }
414}
415
416
417proc newfromconf {confFile res} {
418   global env
419
420   set fileid [open $confFile "r"]
421   set count 0
422   set numchars [gets $fileid line($count)]
423   incr count
424   while {$numchars > 0} {
425      set numchars [gets $fileid line($count)]
426      incr count
427   }
428
429   close $fileid
430
431   set count [expr $count -1]
432
433   set minx 10000000
434   set miny 10000000
435   set minz 10000000
436   set maxx -10000000
437   set maxy -10000000
438   set maxz -10000000
439
440   for {set index 0} {$index < $count} {incr index} {
441      set curline $line($index)
442      if {("bmesh" == [lindex $curline 0])} {
443         set cmd "exec plyxform "
444         set cmd "$cmd -t [lindex $curline 2] [lindex $curline 3] [lindex $curline 4]"
445         set q3 [lindex $curline 8]
446         set q3 [expr -$q3]
447         set cmd "$cmd -q [lindex $curline 5] [lindex $curline 6] [lindex $curline 7] $q3"
448         set cmd "$cmd < [lindex $curline 1] | plybbox2"
449
450         catch {eval $cmd} msg
451
452         scan $msg "%f %f %f %f %f %f" newMinx newMiny newMinz \
453               newMaxx newMaxy newMaxz   
454
455         set minx [min $minx $newMinx]
456         set miny [min $miny $newMiny]
457         set minz [min $minz $newMinz]
458
459         set maxx [max $maxx $newMaxx]
460         set maxy [max $maxy $newMaxy]
461         set maxz [max $maxz $newMaxz]
462
463      }
464   }
465   
466
467
468    set xlen [expr $maxx - $minx]
469    set ylen [expr $maxy - $miny]
470    set zlen [expr $maxz - $minz]
471    set orgx [expr $xlen/2 + $minx]
472    set orgy [expr $ylen/2 + $miny]
473    set orgz [expr $zlen/2 + $minz]
474
475    #if {$xlen > $ylen} {set maxdim $xlen} else {set maxdim $ylen}
476    #if {$maxdim < $zlen} {set maxdim $zlen}
477    #set dim [expr int(1.2*$maxdim/$res)]
478    #puts "$xlen $ylen $zlen"
479    #puts "newgrid $dim $res $orgx $orgy $orgz"
480    #newgrid $dim $res $orgx $orgy $orgz
481
482    set xdim [expr int(1.2*$xlen/$res) + 10]
483    set ydim [expr int(1.2*$ylen/$res) + 10]
484    set zdim [expr int(1.2*$zlen/$res) + 10]
485    puts "newgrid $xdim $ydim $zdim $res $orgx $orgy $orgz"
486    newgrid $xdim $ydim $zdim $res $orgx $orgy $orgz
487}
488
489
490proc fillprep {} {
491    fill 1 0
492    vrip_param -use_tails 1 -fill_gaps 1 -fill_bg 0
493    alias bmesh bmeshlin
494}
495
496
497proc newFromConf {gridFile confFile boundMesh voxelSize} {
498
499    set ext [file extension $boundMesh]
500    if {$ext == ".ply"} {
501        newfromply $boundMesh $voxelSize
502    } elseif {$ext == ".conf"} { 
503        newfromconf $boundMesh $voxelSize
504    } else {
505        newfromcyl $boundMesh $voxelSize
506    }
507
508    fill 1 0
509
510    source $confFile
511
512    puts "Writing to file ${gridFile}..."
513    flush stdout
514    writegrid $gridFile
515}
516
517
518proc updateFromConf {gridFile confFile} {
519
520    readgrid $gridFile
521
522    source $confFile
523
524    puts ""
525    puts "Writing to file ${gridFile}..."
526    flush stdout
527    writegrid $gridFile
528}
529
530proc updateSilFromConf {gridFile confFile} {
531
532   readgrid $gridFile
533   
534   set fileid [open $confFile "r"]
535   set count 0
536   set numchars [gets $fileid line($count)]
537   incr count
538   while {$numchars > 0} {
539      set numchars [gets $fileid line($count)]
540      incr count
541   }
542   close $fileid
543
544   for {set i 0} {$i < $count} {incr i} {
545      set curline $line($i)
546      if {("bmesh" == [lindex $curline 0]) } {
547         set mesh [lindex $curline 1]
548         catch {exec plyhead $mesh} msg
549         set x [string last echo_lgincr $msg]
550         set x [expr $x + [string length echo_lgincr] + 1]
551         set x [string range $msg $x end]
552         scan $x %f lgincr
553         set image "[file root $mesh].rgb"
554         exec oneband $image /usr/tmp/_temp.bw 1
555         exec iflip /usr/tmp/_temp.bw /usr/tmp/_temp2.bw xy
556         exec cysiltoply /usr/tmp/_temp2.bw /usr/tmp/_temp.ply $lgincr
557         set newCmd [lreplace $curline 1 1 "/usr/tmp/_temp.ply"]
558         eval $newCmd
559         exec rm /usr/tmp/_temp.bw /usr/tmp/_temp2.bw /usr/tmp/_temp.ply
560      }
561   }
562
563   puts ""
564   puts "Writing to file ${gridFile}..."
565   flush stdout
566   writegrid $gridFile
567}
568
569
570proc changeRampScale {scale} {
571   vrip_param -ramp_width [expr 0.002 * $scale]
572   vrip_param -w1 [expr 0.003 * $scale]
573   vrip_param -w2 [expr 0.0025 * $scale]
574   vrip_param -w3 [expr -0.001 * $scale]
575   vrip_param -w4 [expr -0.0015 * $scale]
576   vrip_param -w5 [expr -0.002 * $scale]
577}
578
579set resToScaleMap(0.002) 6
580set resToScaleMap(0.001) 3
581set resToScaleMap(0.0005) 1.5
582set resToScaleMap(0.00035) 1
583set resToScaleMap(0.00025) 1
584
585changeRampScale 1.5
586
587#vrip_param -max_boundary_steps 3 -view_weight_exp 1
588
589#vrip_param -min_view_dot 0.25
590
591#vrip_param -max_edge_length [expr 0.003 * $scale]
592
593
594
595
596newgrid 100 0.0005
597
598bind all <Escape> {puts ""; exit}
599
Note: See TracBrowser for help on using the repository browser.