/* CMD: SubDivider
 * Make Ginsu of your Model in Modeler  *
* By Jon Tindall Copyright © 1993 MetroGrafx *
* fri feb  26  1993 revised 24june93 */

arg xgrid ygrid zgrid
if xgrid="" then xgrid=3
if ygrid="" then ygrid=3
if zgrid="" then zgrid=3
Ax='Y'
address "LWModelerARexx.port"
libadd = addlib("LWModelerARexx.port",0)

SIGNAL ON ERROR
SIGNAL ON SYNTAX
sysnam = 'Slicer'

call req_begin sysnam


xgridId = req_addcontrol("X Grid",'N',0)
ygridId = req_addcontrol("Y Grid",'N',0)
zgridId = req_addcontrol("Z Grid",'N',0)


call req_setval xgridId, 3
call req_setval ygridId, 3
call req_setval zgridId, 3


x = req_post()
if (x) then do
    xgrid= req_getval(xgridId)
    ygrid= req_getval(ygridId)
    zgrid= req_getval(zgridId)

    if xgrid<1 then xgrid=1
    if ygrid<1 then ygrid=1
    if zgrid<1 then zgrid=1
    call req_end()
 end
else do
    call req_end()
    exit
 end


CurLay=curlayer()
box=boundingbox()  /* Should check out empty list ...  */
parse var box n x1 x2 y1 y2 z1 z2
s1="!Layer "CurLay": " n" Points"
s2="!Object Bounds"
s3='@'x1 y1 z1     /* low values */
s4='@'x2 y2 z2     /* high values */

xcube=(x2-x1)/xgrid
ycube=(y2-y1)/ygrid
zcube=(z2-z1)/zgrid


empty=emptylayers()

if empty~="" then do
scr=word(empty,1)
End
else do
call notify 1, '@'sysnam, "!Need an empty layer for scratch work."
    exit 10
return
end






If ygrid>1 Then Do
   call setlayer(scr)
   call Add_Begin
   call ADD_POINT(x1-xcube y1+ycube 0)          /* build y slices */
   call ADD_POINT(x2+xcube y1+ycube 0)
   call ADD_POLYGON(1 2)
   call Add_end

      do n=1 to ygrid-2
         IF n=1 then do
         call COPY()
         end
         call MOVE(0 ycube 0)
         call PASTE()
         
       END
    call setlayer(CurLay)
    call setblayer(scr)
    call AXISDRILL('SLICE', 'Z')
    call setlayer(scr)
   call CUT()
END


 If xgrid>1 Then Do
   call setlayer(scr)

   call Add_Begin
   call ADD_POINT(x1+xcube y1-ycube 0)          /* build x slices */
   call ADD_POINT(x1+xcube y2+ycube 0)
   call ADD_POLYGON(1 2)
   call Add_end

      do n=1 to xgrid-2
         IF n=1 then do
         call COPY()
         end
         call MOVE(xcube 0 0)
         call PASTE()

       END
    call setlayer(CurLay)
    call SETBLAYER(scr)
    call AXISDRILL('SLICE', 'Z')
    call setlayer(scr)
    call CUT()
END




If zgrid>1 Then Do
   call setlayer(scr)
   call Add_Begin
   call ADD_POINT(0 y1-ycube z1+zcube)     /*  build Z slices  */
   call ADD_POINT(0 y2+ycube z1+zcube)
   call ADD_POLYGON(1 2)
   call Add_end

   do n=1 to zgrid-2
     IF n=1 then do
          call COPY()
     end
     call MOVE (0 0 zcube)
     call PASTE()
   END

   call setlayer(CurLay)
   call setblayer(scr)
   call axisdrill('slice', 'x')
   call setlayer(scr)
   call CUT()
 call setlayer(CurLay)
END

EXIT

SYNTAX:
ERROR:
  say 'Sorry, Error #'RC' on line 'SIGL' has been detected.'
  say errortext(rc)
  t=Notify(1,'!Well, Byte Me!','!An error has occured.','@'ErrorText(rc),'Line 'SIGL,sourceline(SIGL))
  call end_all
  exit

