packages feed

nurbs-0.1.1.0: nurbs.cabal

name:                nurbs
version:             0.1.1.0
synopsis:            NURBS
description:
  Simple NURBS library with support of NURBS, periodic NURBS, knot insertion-removal, NURBS split-joint
  .
  > import Control.Lens
  > import Linear.NURBS
  > import Linear.V2
  > import Test.Hspec
  > 
  > -- | Simple NURBS of degree 3
  > test₁ ∷ NURBS V2 Double
  > test₁ = nurbs 3 [
  >   V2 0.0 0.0,
  >   V2 10.0 0.0,
  >   V2 10.0 10.0,
  >   V2 20.0 20.0,
  >   V2 0.0 20.0,
  >   V2 (-20.0) 0.0]
  > 
  > -- | Another NURBS of degree 3
  > test₂ ∷ NURBS V2 Double
  > test₂ = nurbs 3 [
  >   V2 (-20.0) 0.0,
  >   V2 (-20.0) (-20.0),
  >   V2 0.0 (-40.0),
  >   V2 20.0 20.0]
  > 
  > -- | Make test₁ periodic
  > testₒ ∷ NURBS V2 Double
  > testₒ = set periodic True test₁
  > 
  > main ∷ IO ()
  > main = hspec $ do
  >   describe "evaluate point" $ do
  >     it "should start from first control point" $
  >       (test₁ `eval` 0.0) ≃ (test₁ ^?! wpoints . _head . wpoint)
  >     it "should end at last control point" $
  >       (test₁ `eval` 1.0) ≃ (test₁ ^?! wpoints . _last . wpoint)
  >   describe "insert knot" $ do
  >     it "should not change nurbs curve" $
  >       insertKnots [(1, 0.1), (2, 0.3)] test₁ ≃ test₁
  >   describe "remove knots" $ do
  >     it "should not change nurbs curve" $
  >       removeKnots [(1, 0.1), (2, 0.3)] (insertKnots [(1, 0.1), (2, 0.3)] test₁) ≃ test₁
  >   describe "purge knots" $ do
  >     it "should not change nurbs curve" $
  >       purgeKnots (insertKnots [(1, 0.1), (2, 0.6)] test₁) ≃ test₁
  >   describe "split" $ do
  >     it "should work as cut" $
  >       snd (split 0.4 test₁) ≃ cut (Span 0.4 1.0) test₁
  >   describe "normalize" $ do
  >     it "should not affect curve" $
  >       cut (Span 0.2 0.8) test₁ ≃ normalizeKnot (cut (Span 0.2 0.8) test₁)
  >   describe "joint" $ do
  >     it "should joint cutted nurbs" $
  >       uncurry joint (split 0.3 test₁) ≃ Just test₁
  >     it "should cut jointed nurbs" $
  >       (cut (Span 0.0 1.0) <$> (test₁ ⊕ test₂)) ≃ Just test₁
  >     it "should cut jointed nurbs" $
  >       (cut (Span 1.0 2.0) <$> (test₁ ⊕ test₂)) ≃ Just test₂
  >   describe "periodic" $ do
  >     it "can be broken into simple nurbs" $
  >       breakLoop 0.0 testₒ ≃ testₒ
  >     it "can be broken in any place" $
  >       uncurry (flip (⊕)) (split 0.5 (breakLoop 0.0 testₒ)) ≃ Just (breakLoop 0.5 testₒ)

homepage:            https://github.com/mvoidex/nurbs
license:             BSD3
license-file:        LICENSE
author:              Alexanrd `voidex` Ruchkin
maintainer:          voidex@live.com
category:            Math
build-type:          Simple
cabal-version:       >=1.10

library
  exposed-modules:
    Linear.NURBS
    Linear.NURBS.Types
  build-depends:
    base >= 4.8 && < 5,
    base-unicode-symbols,
    lens >= 4.12,
    linear >= 1.19,
    mtl >= 2.2
  hs-source-dirs: src
  ghc-options: -threaded -Wall -fno-warn-tabs
  default-language: Haskell2010
  default-extensions: UnicodeSyntax

source-repository head
  type: git
  location: git://github.com/mvoidex/nurbs

test-suite test
  type: exitcode-stdio-1.0
  main-is: Test.hs
  hs-source-dirs: tests
  ghc-options: -fno-warn-tabs
  default-language: Haskell2010
  default-extensions: UnicodeSyntax
  build-depends:
    base >= 4.8 && < 5,
    base-unicode-symbols,
    lens >= 4.12,
    linear >= 1.19,
    hspec,
    nurbs