diagrams-rubiks-cube 0.1.0.0 → 0.1.1.0
raw patch · 4 files changed
+47/−30 lines, 4 filesdep ~diagrams-libPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: diagrams-lib
API changes (from Hackage documentation)
- Diagrams.RubiksCube.Draw: _moveSep :: MovesSettings -> Double
- Diagrams.RubiksCube.Draw: _offsetX :: Offsets -> Double
- Diagrams.RubiksCube.Draw: _offsetY :: Offsets -> Double
- Diagrams.RubiksCube.Draw: _offsets :: MovesSettings -> Offsets
- Diagrams.RubiksCube.Draw: _showEnd :: MovesSettings -> Bool
- Diagrams.RubiksCube.Draw: _showStart :: MovesSettings -> Bool
- Diagrams.RubiksCube.Draw: instance Default MovesSettings
- Diagrams.RubiksCube.Draw: instance Default Offsets
- Diagrams.RubiksCube.Draw: instance Eq MovesSettings
- Diagrams.RubiksCube.Draw: instance Eq Offsets
- Diagrams.RubiksCube.Draw: instance Read MovesSettings
- Diagrams.RubiksCube.Draw: instance Read Offsets
- Diagrams.RubiksCube.Draw: instance Show MovesSettings
- Diagrams.RubiksCube.Draw: instance Show Offsets
- Diagrams.RubiksCube.Model: _backSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _bottomCenter :: Side a -> a
- Diagrams.RubiksCube.Model: _bottomLeft :: Side a -> a
- Diagrams.RubiksCube.Model: _bottomRight :: Side a -> a
- Diagrams.RubiksCube.Model: _cube :: RubiksCube a -> Cube (Side a)
- Diagrams.RubiksCube.Model: _downSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _frontSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _leftSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _middleCenter :: Side a -> a
- Diagrams.RubiksCube.Model: _middleLeft :: Side a -> a
- Diagrams.RubiksCube.Model: _middleRight :: Side a -> a
- Diagrams.RubiksCube.Model: _rightSide :: Cube a -> a
- Diagrams.RubiksCube.Model: _topCenter :: Side a -> a
- Diagrams.RubiksCube.Model: _topLeft :: Side a -> a
- Diagrams.RubiksCube.Model: _topRight :: Side a -> a
- Diagrams.RubiksCube.Model: _upSide :: Cube a -> a
- Diagrams.RubiksCube.Model: instance Applicative Cube
- Diagrams.RubiksCube.Model: instance Applicative RubiksCube
- Diagrams.RubiksCube.Model: instance Applicative Side
- Diagrams.RubiksCube.Model: instance Applicative Vec3
- Diagrams.RubiksCube.Model: instance Applicative Vec4
- Diagrams.RubiksCube.Model: instance Eq a => Eq (Cube a)
- Diagrams.RubiksCube.Model: instance Eq a => Eq (RubiksCube a)
- Diagrams.RubiksCube.Model: instance Eq a => Eq (Side a)
- Diagrams.RubiksCube.Model: instance Eq a => Eq (Vec3 a)
- Diagrams.RubiksCube.Model: instance Eq a => Eq (Vec4 a)
- Diagrams.RubiksCube.Model: instance Foldable Cube
- Diagrams.RubiksCube.Model: instance Foldable Side
- Diagrams.RubiksCube.Model: instance Foldable Vec3
- Diagrams.RubiksCube.Model: instance Foldable Vec4
- Diagrams.RubiksCube.Model: instance Functor Cube
- Diagrams.RubiksCube.Model: instance Functor RubiksCube
- Diagrams.RubiksCube.Model: instance Functor Side
- Diagrams.RubiksCube.Model: instance Functor Vec3
- Diagrams.RubiksCube.Model: instance Functor Vec4
- Diagrams.RubiksCube.Model: instance Reversing (Side a)
- Diagrams.RubiksCube.Model: instance Reversing (Vec3 a)
- Diagrams.RubiksCube.Model: instance Show a => Show (Cube a)
- Diagrams.RubiksCube.Model: instance Show a => Show (RubiksCube a)
- Diagrams.RubiksCube.Model: instance Show a => Show (Side a)
- Diagrams.RubiksCube.Model: instance Show a => Show (Vec3 a)
- Diagrams.RubiksCube.Model: instance Show a => Show (Vec4 a)
- Diagrams.RubiksCube.Model: instance Traversable Cube
- Diagrams.RubiksCube.Model: instance Traversable Side
- Diagrams.RubiksCube.Model: instance Traversable Vec3
- Diagrams.RubiksCube.Model: instance Traversable Vec4
- Diagrams.RubiksCube.Move: instance Eq Move
- Diagrams.RubiksCube.Move: instance Read Move
- Diagrams.RubiksCube.Move: instance Show Move
+ Diagrams.RubiksCube.Draw: [_moveSep] :: MovesSettings -> Double
+ Diagrams.RubiksCube.Draw: [_offsetX] :: Offsets -> Double
+ Diagrams.RubiksCube.Draw: [_offsetY] :: Offsets -> Double
+ Diagrams.RubiksCube.Draw: [_offsets] :: MovesSettings -> Offsets
+ Diagrams.RubiksCube.Draw: [_showEnd] :: MovesSettings -> Bool
+ Diagrams.RubiksCube.Draw: [_showStart] :: MovesSettings -> Bool
+ Diagrams.RubiksCube.Draw: instance Data.Default.Class.Default Diagrams.RubiksCube.Draw.MovesSettings
+ Diagrams.RubiksCube.Draw: instance Data.Default.Class.Default Diagrams.RubiksCube.Draw.Offsets
+ Diagrams.RubiksCube.Draw: instance GHC.Classes.Eq Diagrams.RubiksCube.Draw.MovesSettings
+ Diagrams.RubiksCube.Draw: instance GHC.Classes.Eq Diagrams.RubiksCube.Draw.Offsets
+ Diagrams.RubiksCube.Draw: instance GHC.Read.Read Diagrams.RubiksCube.Draw.MovesSettings
+ Diagrams.RubiksCube.Draw: instance GHC.Read.Read Diagrams.RubiksCube.Draw.Offsets
+ Diagrams.RubiksCube.Draw: instance GHC.Show.Show Diagrams.RubiksCube.Draw.MovesSettings
+ Diagrams.RubiksCube.Draw: instance GHC.Show.Show Diagrams.RubiksCube.Draw.Offsets
+ Diagrams.RubiksCube.Draw: type RubiksCubeBackend b = (Renderable (Path V2 Double) b, N b ~ Double, V b ~ V2)
+ Diagrams.RubiksCube.Model: [_backSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_bottomCenter] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_bottomLeft] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_bottomRight] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_cube] :: RubiksCube a -> Cube (Side a)
+ Diagrams.RubiksCube.Model: [_downSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_frontSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_leftSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_middleCenter] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_middleLeft] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_middleRight] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_rightSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: [_topCenter] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_topLeft] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_topRight] :: Side a -> a
+ Diagrams.RubiksCube.Model: [_upSide] :: Cube a -> a
+ Diagrams.RubiksCube.Model: instance Control.Lens.Internal.Iso.Reversing (Diagrams.RubiksCube.Model.Side a)
+ Diagrams.RubiksCube.Model: instance Control.Lens.Internal.Iso.Reversing (Diagrams.RubiksCube.Model.Vec3 a)
+ Diagrams.RubiksCube.Model: instance Data.Foldable.Foldable Diagrams.RubiksCube.Model.Cube
+ Diagrams.RubiksCube.Model: instance Data.Foldable.Foldable Diagrams.RubiksCube.Model.Side
+ Diagrams.RubiksCube.Model: instance Data.Foldable.Foldable Diagrams.RubiksCube.Model.Vec3
+ Diagrams.RubiksCube.Model: instance Data.Foldable.Foldable Diagrams.RubiksCube.Model.Vec4
+ Diagrams.RubiksCube.Model: instance Data.Traversable.Traversable Diagrams.RubiksCube.Model.Cube
+ Diagrams.RubiksCube.Model: instance Data.Traversable.Traversable Diagrams.RubiksCube.Model.Side
+ Diagrams.RubiksCube.Model: instance Data.Traversable.Traversable Diagrams.RubiksCube.Model.Vec3
+ Diagrams.RubiksCube.Model: instance Data.Traversable.Traversable Diagrams.RubiksCube.Model.Vec4
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.Cube
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.RubiksCube
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.Side
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.Vec3
+ Diagrams.RubiksCube.Model: instance GHC.Base.Applicative Diagrams.RubiksCube.Model.Vec4
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.Cube
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.RubiksCube
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.Side
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.Vec3
+ Diagrams.RubiksCube.Model: instance GHC.Base.Functor Diagrams.RubiksCube.Model.Vec4
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.Cube a)
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.RubiksCube a)
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.Side a)
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.Vec3 a)
+ Diagrams.RubiksCube.Model: instance GHC.Classes.Eq a => GHC.Classes.Eq (Diagrams.RubiksCube.Model.Vec4 a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.Cube a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.RubiksCube a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.Side a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.Vec3 a)
+ Diagrams.RubiksCube.Model: instance GHC.Show.Show a => GHC.Show.Show (Diagrams.RubiksCube.Model.Vec4 a)
+ Diagrams.RubiksCube.Move: instance GHC.Classes.Eq Diagrams.RubiksCube.Move.Move
+ Diagrams.RubiksCube.Move: instance GHC.Read.Read Diagrams.RubiksCube.Move.Move
+ Diagrams.RubiksCube.Move: instance GHC.Show.Show Diagrams.RubiksCube.Move.Move
- Diagrams.RubiksCube.Draw: drawFoldingPattern :: Renderable (Path R2) b => RubiksCube (Colour Double) -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawFoldingPattern :: RubiksCubeBackend b => RubiksCube (Colour Double) -> Diagram b
- Diagrams.RubiksCube.Draw: drawMove :: Renderable (Path R2) b => Move -> Offsets -> RubiksCube (Colour Double) -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawMove :: RubiksCubeBackend b => Move -> Offsets -> RubiksCube (Colour Double) -> Diagram b
- Diagrams.RubiksCube.Draw: drawMoves :: Renderable (Path R2) b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawMoves :: RubiksCubeBackend b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b
- Diagrams.RubiksCube.Draw: drawMovesBackward :: Renderable (Path R2) b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawMovesBackward :: RubiksCubeBackend b => MovesSettings -> RubiksCube (Colour Double) -> [Move] -> Diagram b
- Diagrams.RubiksCube.Draw: drawRubiksCube :: Renderable (Path R2) b => Offsets -> RubiksCube (Colour Double) -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawRubiksCube :: RubiksCubeBackend b => Offsets -> RubiksCube (Colour Double) -> Diagram b
- Diagrams.RubiksCube.Draw: drawSide :: Renderable (Path R2) b => R2 -> R2 -> Side (Colour Double) -> Diagram b R2
+ Diagrams.RubiksCube.Draw: drawSide :: RubiksCubeBackend b => V2 Double -> V2 Double -> Side (Colour Double) -> Diagram b
- Diagrams.RubiksCube.Model: backSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: backSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: bottomCenter :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: bottomCenter :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: bottomLeft :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: bottomLeft :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: bottomRight :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: bottomRight :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: cube :: Iso (RubiksCube a_ab54) (RubiksCube a_abbu) (Cube (Side a_ab54)) (Cube (Side a_abbu))
+ Diagrams.RubiksCube.Model: cube :: Iso (RubiksCube a_aexN) (RubiksCube a_aeEq) (Cube (Side a_aexN)) (Cube (Side a_aeEq))
- Diagrams.RubiksCube.Model: downSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: downSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: frontSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: frontSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: leftSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: leftSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: middleCenter :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: middleCenter :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: middleLeft :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: middleLeft :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: middleRight :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: middleRight :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: rightSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: rightSide :: Lens' (Cube a_adOD) a_adOD
- Diagrams.RubiksCube.Model: topCenter :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: topCenter :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: topLeft :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: topLeft :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: topRight :: Lens' (Side a_a7Mz) a_a7Mz
+ Diagrams.RubiksCube.Model: topRight :: Lens' (Side a_a9mH) a_a9mH
- Diagrams.RubiksCube.Model: upSide :: Lens' (Cube a_aaoj) a_aaoj
+ Diagrams.RubiksCube.Model: upSide :: Lens' (Cube a_adOD) a_adOD
Files
- CHANGELOG.md +10/−0
- README.md +1/−1
- diagrams-rubiks-cube.cabal +3/−3
- src/Diagrams/RubiksCube/Draw.hs +33/−26
+ CHANGELOG.md view
@@ -0,0 +1,10 @@+# Change Log++## 0.1.1.0 - 2015-05-01++- Added change log+- Upgraded to diagrams-1.3++## 0.1.0.0 - 2015-03-10++- Initial release
README.md view
@@ -18,4 +18,4 @@ [hackage-image]: https://img.shields.io/hackage/v/diagrams-rubiks-cube.svg?style=flat [hackage-url]: http://hackage.haskell.org/package/diagrams-rubiks-cube [hackage-deps-image]: https://img.shields.io/hackage-deps/v/diagrams-rubiks-cube.svg?style=flat-[hackage-deps-url]: http://packdeps.haskellers.com/feed?needle=diagrams-rubiks-cube.svg+[hackage-deps-url]: http://packdeps.haskellers.com/feed?needle=diagrams-rubiks-cube
diagrams-rubiks-cube.cabal view
@@ -1,5 +1,5 @@ name: diagrams-rubiks-cube-version: 0.1.0.0+version: 0.1.1.0 synopsis: Library for drawing the Rubik's Cube. description: Includes a facets model of the Rubik's Cube and a 'diagrams'-based renderer. homepage: https://github.com/timjb/rubiks-cube@@ -10,7 +10,7 @@ copyright: 2015 Tim Baumann category: Graphics build-type: Simple-extra-source-files: README.md, diagrams/*.svg+extra-source-files: README.md, CHANGELOG.md, diagrams/*.svg extra-doc-files: diagrams/*.svg cabal-version: >= 1.10 @@ -25,7 +25,7 @@ Diagrams.RubiksCube.Model, Diagrams.RubiksCube.Draw build-depends: base >= 4.6 && < 5,- diagrams-lib >= 1.2.0.7 && < 1.3,+ diagrams-lib >= 1.3 && < 1.4, lens >= 4.6.0.1 && < 5, data-default-class >= 0.0.1 && < 0.1 hs-source-dirs: src
src/Diagrams/RubiksCube/Draw.hs view
@@ -1,9 +1,12 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE Rank2Types #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ConstraintKinds #-} module Diagrams.RubiksCube.Draw- ( solvedRubiksCube+ ( RubiksCubeBackend+ , solvedRubiksCube , drawSide , drawFoldingPattern , Offsets (..), offsetX, offsetY@@ -17,12 +20,13 @@ import Diagrams.RubiksCube.Model import Control.Lens hiding ((#))-import Diagrams.Prelude hiding (center)+import Diagrams.Prelude hiding (center, cube) import Data.List (sortBy, mapAccumL) import Data.Function (on) import qualified Diagrams.Prelude as P-import Data.Default.Class +type RubiksCubeBackend b = (Renderable (Path V2 Double) b, N b ~ Double, V b ~ V2)+ -- > import Diagrams.RubiksCube.Draw -- > solvedCube = drawFoldingPattern solvedRubiksCube @@ -52,11 +56,11 @@ -- -- <<diagrams/src_Diagrams_RubiksCube_Draw_drawSideDia.svg#diagram=drawSideDia&height=150&width=200>> drawSide- :: Renderable (Path R2) b- => R2 -- ^ dx- -> R2 -- ^ dy+ :: RubiksCubeBackend b+ => V2 Double -- ^ dx+ -> V2 Double -- ^ dy -> Side (Colour Double)- -> Diagram b R2+ -> Diagram b drawSide dx dy side = mconcat $ do (y, row) <- count rows let Vec3 l c r = side ^. row@@ -64,8 +68,11 @@ where count = zip [(0 :: Int)..] rows = [bottomRow, middleRow, topRow]- pos x y = p2 $ unr2 $ fromIntegral x *^ dx ^+^ fromIntegral y *^ dy- drawField :: Renderable (Path R2) b => Int -> Int -> Colour Double -> Diagram b R2+ pos :: Int -> Int -> Point V2 Double+ pos x y = P $ fromIntegral x *^ dx ^+^ fromIntegral y *^ dy+ drawField+ :: (Renderable (Path V2 Double) b, N b ~ Double, V b ~ V2)+ => Int -> Int -> Colour Double -> Diagram b drawField x y color = fromVertices [pos x y, pos (x+1) y, pos (x+1) (y+1), pos x (y+1), pos x y] # mapLoc closeTrail # trailLike # fc color@@ -73,9 +80,9 @@ -- | Draw the folding pattern of the cube. The front side is at the center of -- the pattern. drawFoldingPattern- :: Renderable (Path R2) b+ :: RubiksCubeBackend b => RubiksCube (Colour Double)- -> Diagram b R2+ -> Diagram b drawFoldingPattern c' = let c = c' ^. cube drawSide' = drawSide (r2 (1,0)) (r2 (0,1))@@ -126,10 +133,10 @@ -- > let c = solvedRubiksCube ^. undoMoves [R,U,R',U'] -- > in drawRubiksCube with c drawRubiksCube- :: Renderable (Path R2) b+ :: RubiksCubeBackend b => Offsets -> RubiksCube (Colour Double)- -> Diagram b R2+ -> Diagram b drawRubiksCube (Offsets dx dy) c' = position $ [ f ] ++ sides ++@@ -153,18 +160,18 @@ d = (p2 (3*dx, 3*dy), drawSide' dx' (-dz') downSide) moveArrow- :: Renderable (Path R2) b- => Bool -> P2 -> P2 -> Diagram b R2+ :: RubiksCubeBackend b+ => Bool -> P2 Double -> P2 Double -> Diagram b moveArrow rev s e = (if rev then arrowBetween' opts e s else arrowBetween' opts s e) # lc red where opts = with & shaftStyle %~ lw ultraThick & headLength .~ veryLarge drawMoveU, drawMoveD, drawMoveL, drawMoveR, drawMoveF- :: Renderable (Path R2) b+ :: RubiksCubeBackend b => Bool -- ^ invert -> Offsets -> RubiksCube (Colour Double)- -> Diagram b R2+ -> Diagram b drawMoveU rev off c = atop (moveArrow rev (p2 (2.8, 2.5)) (p2 (0.2, 2.5))) (drawRubiksCube off c)@@ -178,13 +185,13 @@ atop (moveArrow rev (p2 (2.5, 0.2)) (p2 (2.5, 2.8))) (drawRubiksCube off c) drawMoveF rev off c =- arr (opts & arrowShaft .~ quarterTurn) (p2 (1.5, 2.6)) (p2 (2.5, 1.3))+ arr (opts & arrowShaft .~ quarterTurn') (p2 (1.5, 2.6)) (p2 (2.5, 1.3)) `atop`- arr (opts & arrowShaft .~ quarterTurn) (p2 (1.5, 0.4)) (p2 (0.5, 1.7))+ arr (opts & arrowShaft .~ quarterTurn') (p2 (1.5, 0.4)) (p2 (0.5, 1.7)) `atop` drawRubiksCube off c where- quarterTurn = arc (0 @@ turn) (1/4 @@ turn) # (if rev then id else reverseTrail)+ quarterTurn' = arc xDir (1/4 @@ turn) # (if rev then id else reverseTrail) opts = with & shaftStyle %~ lw ultraThick & headLength .~ veryLarge arr opts' s e = (if rev then arrowBetween' opts' e s else arrowBetween' opts' s e) # lc red@@ -200,11 +207,11 @@ -- > let c = solvedRubiksCube ^. undoMoves [L,U,L',U'] -- > in drawMove L with c drawMove- :: Renderable (Path R2) b+ :: RubiksCubeBackend b => Move -> Offsets -> RubiksCube (Colour Double)- -> Diagram b R2+ -> Diagram b drawMove U = drawMoveU False drawMove U' = drawMoveU True drawMove D = drawMoveD False@@ -241,11 +248,11 @@ -- > settings = with & showStart .~ True -- > in drawMoves settings startPos moves drawMoves- :: Renderable (Path R2) b+ :: RubiksCubeBackend b => MovesSettings -> RubiksCube (Colour Double) -- ^ the start configuration -> [Move]- -> Diagram b R2+ -> Diagram b drawMoves settings c moves = let ((j, c'), ps) = mapAccumL iter (0 :: Int, c) moves allCubes = (if settings ^. showStart then ((pos ((-1) :: Int), drawRubiksCube off c) :) else id) $@@ -269,10 +276,10 @@ -- > settings = with & showStart .~ True -- > in drawMovesBackward settings endPos moves drawMovesBackward- :: Renderable (Path R2) b+ :: RubiksCubeBackend b => MovesSettings -> RubiksCube (Colour Double) -- ^ the end configuration -> [Move]- -> Diagram b R2+ -> Diagram b drawMovesBackward settings c moves = drawMoves settings (c ^. undoMoves moves) moves