summaryrefslogtreecommitdiff
path: root/tools/objcat.hs
diff options
context:
space:
mode:
Diffstat (limited to 'tools/objcat.hs')
-rw-r--r--tools/objcat.hs37
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/objcat.hs b/tools/objcat.hs
new file mode 100644
index 0000000..66ab9a9
--- /dev/null
+++ b/tools/objcat.hs
@@ -0,0 +1,37 @@
1import Data.Bool
2import qualified Data.ByteString.Lazy as L
3import qualified Data.DList as DList
4import qualified Data.IntMap as IntMap
5import Data.Char
6import Data.Maybe
7import System.Environment
8import Control.Monad.Writer.Lazy
9import Control.Monad.State.Strict
10
11import Wavefront.Lex
12import Wavefront
13
14zflip b = b
15 { vertex = \xs -> case xs of
16 x:y:z:ws -> vertex b (x:y:(-z):ws)
17 _ -> vertex b xs
18 , vertexN = \xs -> case xs of
19 x:y:z:ws -> vertexN b (x:y:(-z):ws)
20 _ -> vertexN b xs
21 , face = \ts -> face b $ reverse ts
22 }
23
24objcat b fs = (`evalStateT` renumFrom1) $ do
25 forM_ fs $ \f -> do
26 bs <- liftIO $ L.readFile f
27 parseCustom (applyRenumbering b) (modify' . addCounts) bs
28 return ()
29
30main = do
31 (b,fs) <- do
32 fs0 <- getArgs
33 case fs0 of
34 "--zflip":fs -> return (zflip echoBuilder, fs)
35 fs -> return (echoBuilder,fs)
36 out <- DList.toList <$> execWriterT (objcat b fs)
37 putStrLn $ unlines out