1   module Render 
    2 
    3 
    4 
    5 
    6         (       render, 
    7                 drawBSPT, drawFaces,
    8                 partitionedDraw,prettyPrintBSPT)
    9 
   10   where
   11 
   12   import BSPT (BSPT(..),Status(..),countLeaves,scanLine,foldBSPT)
   13   import EuclidGMS (Point(..),Line,Face(..),Region,getRegion,
   14                     Faces,mkFace,section,drawSegment,Segment,Partition)
   15   import Stdlib (mapcat,middle,const3)
   16   import Params (renderTop,renderHeight,renderLeft,windowWidth)
   17   import GeomNum
   18   import MGRlib (line,func,movePrintTo,writeVert)
   19 
   20 
   21 
   22 
   23 
   24   render :: BSPT -> String
   25   render btree = drawFaces (mapcat (scanLine btree) scanLines)
   26         where scanLines = rules (fromIntegral renderLeft) (fromIntegral windowWidth) (fromIntegral (renderTop+1))
   27 
   28 
   29 
   30 
   31 
   32   rules :: Numb -> Numb -> Numb -> Faces
   33   rules left right = rules'
   34                         where rules' current | current > (fromIntegral renderHeight) = []
   35                               rules' current = mkFace ((Pt left current),(Pt right current)):rules' (current+15) 
   36 
   37 
   38 
   39 
   40 
   41   drawBSPT :: BSPT -> String 
   42   drawBSPT = foldBSPT (const3 []) drawEmbedded
   43                 where 
   44                 drawEmbedded _ (faces,_) x y = drawFaces faces ++ x ++ y
   45 
   46 
   47 
   48   drawFaces :: Faces -> String
   49   drawFaces = mapcat drawSegment.map faceToSection
   50                 where 
   51                 faceToSection (Fc section _) = section
   52 
   53 
   54 
   55 
   56   partitionedDraw :: BSPT -> String                
   57   partitionedDraw = foldBSPT temp3 temp 
   58                 where 
   59                 temp3 _ r _ = drawFaces (getRegion r)
   60                 temp _ _ = (++)
   61 
   62 
   63 
   64 
   65 
   66 
   67 
   68 
   69   prettyPrintBSPT :: BSPT -> String
   70   prettyPrintBSPT tree = func 4 ++ 
   71                          printBSPT  renderLeft windowWidth (renderHeight+40) tree ++  
   72                          func 15
   73 
   74 
   75 
   76 
   77   printBSPT :: Int -> Int -> Int -> BSPT -> String
   78   printBSPT le re d (Cell x _ _) | re-le<=20  =  writeVert ((middle le re),d) (map (\x->x:[]) (show x))
   79   printBSPT le re d (Cell x _ _) =  movePrintTo (middle le re) d (show x)
   80   printBSPT le re d tree | re-le<=20 = writeVert (mid,d) (map (\x->x:[]) (show (countLeaves tree)))
   81                                                   where mid = middle le re
   82   printBSPT le re d (BSP part nodeinfo left right) = movePrintTo mid d "@" ++ 
   83                                                  (printBSPT le mid (d+14) left) ++
   84                                                  (printBSPT mid re (d+14) right)
   85                                                   where mid = middle le re