diagrams-rubiks-cube-0.3.0.0: Library for drawing the Rubik's Cube.

Safe HaskellNone
LanguageHaskell2010

Diagrams.RubiksCube.Draw

Synopsis

Documentation

type RubiksCubeBackend n b = (Renderable (Path V2 n) b, TypeableFloat n, N b ~ n, V b ~ V2) Source #

drawSide Source #

Arguments

:: (RubiksCubeBackend n b, Color c) 
=> V2 n

dx

-> V2 n

dy

-> Side c 
-> Diagram b 

Draws one 3x3 side of the cube.

drawFoldingPattern :: (RubiksCubeBackend n b, Color c) => RubiksCube c -> Diagram b Source #

Draw the folding pattern of the cube. The front side is at the center of the pattern.

data Offsets n Source #

Constructors

Offsets 

Fields

Instances

Eq n => Eq (Offsets n) Source # 

Methods

(==) :: Offsets n -> Offsets n -> Bool #

(/=) :: Offsets n -> Offsets n -> Bool #

Read n => Read (Offsets n) Source # 
Show n => Show (Offsets n) Source # 

Methods

showsPrec :: Int -> Offsets n -> ShowS #

show :: Offsets n -> String #

showList :: [Offsets n] -> ShowS #

Fractional n => Default (Offsets n) Source # 

Methods

def :: Offsets n #

offsetX :: forall n. Lens' (Offsets n) n Source #

offsetY :: forall n. Lens' (Offsets n) n Source #

drawRubiksCube :: (RubiksCubeBackend n b, Color c) => Offsets n -> RubiksCube c -> Diagram b Source #

Draw the Rubik's cube in parallel perspective.

{-# LANGUAGE FlexibleContexts, TypeFamilies #-}
import Diagrams.RubiksCube
import Control.Lens
drawCubeExample =
  let c = solvedRubiksCube ^. undoMoves [R,U,R',U']
  in drawRubiksCube with c

drawMove :: (RubiksCubeBackend n b, Color c) => Move -> Colour Double -> Offsets n -> RubiksCube c -> Diagram b Source #

Draw the Rubik's cube in parallel perspective with an arrow indicating the next move. If the the bottom layer is moved, the cube will be shown from below.

{-# LANGUAGE FlexibleContexts, TypeFamilies #-}
import Diagrams.RubiksCube
import Control.Lens
drawMoveExample =
  let c = solvedRubiksCube ^. undoMoves [L,U,L',U']
  in drawMove L with c

data MovesSettings n Source #

Constructors

MovesSettings 

Fields

moveSep :: forall n. Lens' (MovesSettings n) n Source #

offsets :: forall n. Lens' (MovesSettings n) (Offsets n) Source #

drawMoves Source #

Arguments

:: (RubiksCubeBackend n b, Color c) 
=> MovesSettings n 
-> RubiksCube c

the start configuration

-> [Move] 
-> Diagram b 

Draws a sequence of moves.

{-# LANGUAGE FlexibleContexts, TypeFamilies #-}
import Diagrams.RubiksCube
import Control.Lens
drawMovesExample =
  let moves = [B, R, F', R', D', F, F]
      startPos = solvedRubiksCube ^. undoMoves moves
      settings = with & showStart .~ True
  in drawMoves settings startPos moves

drawMovesBackward Source #

Arguments

:: (RubiksCubeBackend n b, Color c) 
=> MovesSettings n 
-> RubiksCube c

the end configuration

-> [Move] 
-> Diagram b 

Like drawMoves, but takes the end configuration instead of the start configuration. The previous example can be simplified with this:

import Diagrams.RubiksCube
import Control.Lens
drawMovesExample' =
  let moves = [B, R, F', R', D', F, F]
      endPos = solvedRubiksCube
      settings = with & showStart .~ True
  in drawMovesBackward settings endPos moves