Catmull–Clark subdivision surface/Tcl Test Code: Difference between revisions

m (correct link)
Line 4:
==Utility Functions==
<lang tcl>package require Tk
 
# A simple-minded ordering function for faces
proc orderf {points face1 face2} {
set d1 [set d2 0.0]
foreach p [selectFrom $points $face1] {set d1 [expr {$d1 + [lindex $p 1]}]}
lassign $p x y z
foreach p [selectFrom $points $face2] {set d2 [expr {$d2 + [lindex $p 1]}]}
set d1 [expr {$d1 + sqrt($x*$x + $y*$y + $z*$z)}]
}
foreach p [selectFrom $points $face2] {set d2 [expr {$d2 + [lindex $p 1]}]}
lassign $p x y z
set d2 [expr {$d2 + sqrt($x*$x + $y*$y + $z*$z)}]
}
expr {$d1<$d2 ? -1 : $d1>$d2 ? 1 : 0}
}
 
# Plots a net defined in points-and-faces fashion
proc visualizeNet {w points faces args} {
Line 18 ⟶ 24:
set c {}
set polyCoords [selectFrom $points $face]
set sum {[list 0. 0. 0.]}
set centroid [centroid $polyCoords]
foreach coord $polyCoords {
lassign $coord x y z
lappend c \
[expr {100200. + 90190. * (0.867 * $x - 0.59396 * $y)}] \
[expr {100200 + 90190. * (0.865 * $x + 0.3402 * $y - $z)}]
}
lassign $centroid x y z
$w create polygon $c -fill {} {*}$args
set depth [expr {int(255*sqrt($x*$x + $y*$y + $z*$z) / sqrt(3.))}]
set grey [format #%02x%02x%02x $depth $depth $depth]
$w create polygon $c -fill {}$grey {*}$args
}
}</lang>
Anonymous user