blob: 66ab9a90a67964f69d669115e6460bf88a8364ac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import Data.Bool
import qualified Data.ByteString.Lazy as L
import qualified Data.DList as DList
import qualified Data.IntMap as IntMap
import Data.Char
import Data.Maybe
import System.Environment
import Control.Monad.Writer.Lazy
import Control.Monad.State.Strict
import Wavefront.Lex
import Wavefront
zflip b = b
{ vertex = \xs -> case xs of
x:y:z:ws -> vertex b (x:y:(-z):ws)
_ -> vertex b xs
, vertexN = \xs -> case xs of
x:y:z:ws -> vertexN b (x:y:(-z):ws)
_ -> vertexN b xs
, face = \ts -> face b $ reverse ts
}
objcat b fs = (`evalStateT` renumFrom1) $ do
forM_ fs $ \f -> do
bs <- liftIO $ L.readFile f
parseCustom (applyRenumbering b) (modify' . addCounts) bs
return ()
main = do
(b,fs) <- do
fs0 <- getArgs
case fs0 of
"--zflip":fs -> return (zflip echoBuilder, fs)
fs -> return (echoBuilder,fs)
out <- DList.toList <$> execWriterT (objcat b fs)
putStrLn $ unlines out
|