title temp -- LSL Scraps -- Greater Pawpaw user strick ip 75.144.20.99 vol 1 lock ******** /box( /pre( strick@forth:~/rez2021a/v1$ cat lap-r1.tcl # ==> models/demo1.txt <== # models,demo1,12345001,12345004,. # ==> objects/12345001.txt <== # objects,12345001,local,<120,200,100>,color,<1,0,0>,temp,1,. # ==> objects/12345002.txt <== # objects,12345002,local,<120,202,100>,color,<0,1,0>,temp,1,. # ==> objects/12345003.txt <== # objects,12345003,local,<120,204,100>,color,<0,0,1>,temp,1,. proc with {var body} { upvar 1 $var v set saved $v uplevel 1 $body set v $saved } proc setm {vars xx} { set vars [string map {{,} { }} $vars] foreach var $vars x $xx { upvar 1 $var a set a $x } } proc count {var n body} { upvar 1 $var i for {set i 0} {$i < $n} {incr i} { # puts stderr "count: $var=$i $body\n" uplevel 1 $body } } proc triple_expr t { setm a,b,c [string map {{,} { }} $t] list [uplevel 1 expr $a] [uplevel 1 expr $b] [uplevel 1 expr $c] } proc +pos {triple body} { global POS with POS { setm a,b,c [triple_expr $triple] setm x,y,z [triple_expr $POS] set POS [list [expr {$a+$x}] [expr {$b+$y}] [expr {$c+$z}]] uplevel 1 $body } } proc *scale {triple body} { global SCALE with SCALE { setm a,b,c [triple_expr $triple] setm x,y,z [triple_expr $SCALE] set SCALE [list [expr {$a*$x}] [expr {$b*$y}] [expr {$c*$z}]] uplevel 1 $body } } proc =color {triple body} { global COLOR with COLOR { set COLOR [triple_expr $triple] uplevel 1 $body } } proc vec triple { setm a,b,c [triple_expr $triple] return "<$a,$b,$c>" } proc vec+ {p q} { setm a,b,c [triple_expr $p] setm x,y,z [triple_expr $q] return [triple_expr $a+$x,$b+$y,$c+$z] } proc box args { set temp 0 foreach a $args { switch $a { -temp {set temp 1} } } global POS SCALE ROT COLOR CORNER # emit "temp,$temp,local,[vec $POS],scale,[vec $SCALE],euler,[vec $ROT],color,[vec $COLOR],." emit "temp,$temp,global,[vec [vec+ $CORNER $POS]],scale,[vec $SCALE],euler,[vec $ROT],color,[vec $COLOR],." } proc emit params { global ID incr ID set fd [open "objects/$ID.txt" w] puts $fd "objects,$ID,$params" puts stderr ">> objects,$ID,$params" close $fd } proc finish {model} { global GROUP ID set fd [open "models/$model.txt" w] puts $fd "models,$model,[expr {1+$GROUP}],[expr {1+$ID}]" puts stderr ">> models,$model,[expr {1+$GROUP}],[expr {1+$ID}]" close $fd unset GROUP ID } set Corner(Agirus) [triple_expr 258048,261632+256,0] set Corner(Pini) [triple_expr 258048,261632,0] set Corner(Pawpaw) [triple_expr 258304,261632,0] set Corner(Lappet) [triple_expr 258048,261888,0] set CORNER $Corner(Lappet) set MODEL "lap-r1" set GROUP 12349000 set ID $GROUP set POS 0,0,0 set SCALE 1,1,1 set ROT 0,0,0 set COLOR .3,.3,.6 set YAW 0 set PITCH 0 set TEMP 1 set DEG_TO_RAD 0.017453292519943295 proc at xyz { global POS set POS [triple_expr $xyz] } proc yaw y { global YAW DEG_TO_RAD fincr YAW [expr {$DEG_TO_RAD*$y}] } proc x {n args} { count j $n { uplevel 1 $args } } proc fincr {var x} { upvar 1 $var z set z [expr {$z + $x}] } proc rail {d} { global YAW TEMP POS CORNER SCALE ROT COLOR Corner set ux [expr {cos($YAW)}] set uy [expr {sin($YAW)}] setm x,y,z [triple_expr $POS] fincr x [expr {0.5 * $ux * $d}] fincr y [expr {0.5 * $uy * $d}] set dest [vec+ $CORNER $x,$y,$z] setm dx,dy,dz $dest set dest_str [vec $dest] set intermediate "" setm pinix,piniy,piniz $Corner(Pini) if {$dy < $piniy + 50} { set intermediate "global,[vec [vec+ $Corner(Pini) 240,50,111]]," } emit "temp,$TEMP,${intermediate}global,$dest_str,scale,<$d,3,0.1>,euler,<0,0,$YAW>,color,[vec $COLOR],name,Guide,." fincr x [expr {0.5 * $ux * $d}] fincr y [expr {0.5 * $uy * $d}] set POS [triple_expr $x,$y,$z] } at 60,120,98.5 yaw 90 x 10 rail 10 count k 9 { yaw -10 ; rail 5 } x 4 rail 10 count k 9 { yaw -10 ; rail 5 } x 38 rail 10 count k 9 { yaw +10 ; rail 5 } x 4 rail 9 count k 9 { yaw -10 ; rail 5 } x 30 rail 10 finish $MODEL /pre