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