This is Blend.tcl in view mode; [Download] [Up]
proc cp {o} {return [lindex $o 7]} proc blend {st} { set s [P_selection] set a [lindex $s 0] set b [lindex $s 1] set ca [cp [P_getobject $a]] set cb [cp [P_getobject $b]] for {set t $st} {$t<1} {set t [expr $t+$st]} { P_addobject 0 [lreplace $o 7 7 [doBlend $ca $cb $t]] } P_display } proc doBlend {oa ob z} { set n [llength $oa] set r "" for {set i 0} {$i<$n} {incr i} { lappend r [expr [lindex $oa $i]*(1-$z)+[lindex $ob $i]*$z] } return $r } proc mat {o} {return [lindex $o 9]} proc setcols {o c} { return [eval "lreplace {$o} 10 15 $c"] } proc blend {st} { set s [P_selection] if [llength $s]!=2 { alertPanel "Blend" "Please select two objects before blending..." "OK" } { set a [lindex $s 0] set b [lindex $s 1] set ca [cp [P_getobject $a]] set cb [cp [P_getobject $b]] set o [P_getobject $a] set z [P_getobject $b] set mo [mat $o] set mz [mat $z] set Ca [lrange $o 10 15] set Cb [lrange $z 10 15] set dx [expr [lindex $mz 4]-[lindex $mo 4]] set dy [expr [lindex $mz 5]-[lindex $mo 5]] for {set t $st} {$t<1} {set t [expr $t+$st]} { P_moveObject [P_addobject 0 [setcols [lreplace $o 7 7 [doBlend $ca $cb $t]] [doBlend $Ca $Cb $t]]] [expr $dx*$t] [expr $dy*$t] } P_select1 $b P_front P_select1 -1 } # P_display } P_addMenuItem 2 "Blend (4 steps)" "" {blend .25} P_addMenuItem 2 "Blend (10 steps)" + {blend .1} P_addMenuItem 2 "Blend (20 steps)" "" {blend .05} P_addMenuItem 2 "Blend (50 steps)" "" {blend .02}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.