/* CMD: Slice
By GLYPH
E-Mail: y82s1@unb.ca
Slice Object on Z axis and make a scene of it
The pivot points of the pieces are
in their centers for proper rotations.
*/
JUNK:
mxx="LWModelerARexx.port"
signal on error
signal on syntax
mxx_add = addlib(mxx,0)
call main
if (mxx_add) then call remlib(mxx)
exit
syntax:
error:
t=Notify(1,'!Rexx Script Error','@'ErrorText(rc),'Line 'SIGL)
if (mxx_add) then call remlib(mxx)
exit
return
main:
Address 'LWModelerARexx.port'
call random(,,time('s'))
scenename = 'toaster:3d/scenes/test.scn'
objbase = 'toaster:3d/objects/test/testobj'
call Menu
call GetSize
call CutObject
call SavePieces
call SaveScene
return
Menu:
cutx = 4
cuty = 4
call req_begin 'Slice Object by GLYPH'
req1 = req_addcontrol('X divisions',N,0)
req2 = req_addcontrol('Y divisions',N,0)
call req_setval req1, cutx, cutx
call req_setval req2, cuty, cuty
if (~req_post()) then exit(0)
cutx = req_getval(req1)
cuty = req_getval(req2)
scenename = getfilename('Scene File','toaster:3d/scenes')
if scenename = '(none)' then exit(0)
objbase = getfilename('Object Prefix','toaster:3d/objects')
if objbase = '(none)' then exit(0)
return
GetSize:
curlay=curlayer()
emp = emptylayers()
if (words(emp) = 0) then do
ok = notify(1,'!No empty layer.')
break
end
if (words(emp) > 0) then do
freelay = word(emp,1)
end
box=boundingbox()
parse var box n x1 x2 y1 y2 z1 z2
dx = x2-x1
dy = y2-y1
return
CutObject:
/* make slicers */
call setlayer(freelay)
do xn = 1 to cutx/2
call makebox(x1+(xn-0.5)*dx/cutx*2 y1-1 0,x1+xn*dx/cutx*2 y2+1 0)
end
do yn = 1 to cuty/2
call makebox(x1-1 y1+(yn-0.5)*dy/cuty*2 0,x2+1 y1+yn*dy/cuty*2 0)
end
call setlayer(curlay)
call setblayer(freelay)
call axisdrill('slice','z')
call setlayer(freelay)
call cut()
return
SavePieces:
call sel_mode('user')
curobj = 0
do xn=1 to cutx
do yn=1 to cuty
call setlayer(curlay)
call sel_polygon('clear')
call sel_polygon('set','volexcl',x1+(xn-1)*dx/cutx-dx/1000 y1+(yn-1)*dy/cuty-dy/1000 z1-1,x1+xn*dx/cutx+dx/1000 y1+yn*dy/cuty+dy/1000 z2+1)
call copy()
call setlayer(freelay)
call paste()
call SaveIt
call cut()
end
end
return
SaveIt:
box=boundingbox()
parse var box n d1 d2 d3 d4 d5 d6
if n=0 then return
if d1x1+xn*dx/cutx+dx/1000 then return
if d3y1+yn*dy/cuty+dy/1000 then return
curobj=curobj+1
cx.curobj = (d1+d2)/2
cy.curobj = (d3+d4)/2
cz.curobj = (d5+d6)/2
call save(objbase||'.'||curobj)
return
SaveScene:
call open(scene, scenename, 'W')
call writeln(scene, 'LWSC')
call writeln(scene, 1)
call writeln(scene, '')
do o = 1 to curobj
objname = objbase||'.'||o
call writeln(scene, 'LoadObject '||objname)
call writeln(scene, 'ObjectMotion (unnamed)')
call writeln(scene, ' '||9)
call writeln(scene, ' '||1)
x=cx.o
y=cy.o
z=cz.o
h=0
p=0
b=0
xs=1
ys=1
zs=1
linear = 1
frame = 0
call WriteKey
call writeln(scene, 'EndBehavior 1')
call writeln(scene, 'PivotPoint '||cx.o||' '||cy.o||' '||cz.o)
call writeln(scene, 'ShadowOptions 7')
call writeln(scene, '')
end
call close scene
return
WriteKey:
call writeln(scene, ' '||x||' '||y||' '||z||' '||h||' '||p||' '||b||' '||xs||' '||ys||' '||zs)
call writeln(scene, ' '||frame||' '||linear||' 0.0 0.0 0.0')
return
               (
geocities.com/g_fyffe)