----------------------------------------------------------------------------- -- | -- Module : Diagrams.TwoD.Path.Calligraphic -- Copyright : (c) 2013 Brent Yorgey -- License : BSD-style (see LICENSE) -- Maintainer : byorgey@cis.upenn.edu -- -- Create \"calligraphic\" strokes by filling between two offset -- copies of a curve. -- ----------------------------------------------------------------------------- module Diagrams.TwoD.Path.Calligraphic ( calligraphic ) where import Diagrams.Prelude -- | @calligraphic pen t@ creates a \"calligraphic\" variant of @t@ by -- filling between two copies of @t@ offset by the @pen@ vector. -- -- <<diagrams/src_Diagrams_TwoD_Path_Calligraphic_calligraphicEx.svg#diagram=calligraphicEx&width=400>> -- -- > import Diagrams.Coordinates -- > import Diagrams.TwoD.Path.Calligraphic -- > -- > curve = cubicSpline False [1 ^& 1, 2 ^& 5, 5 ^& 6, 8 ^& 12] -- > # scale 3 -- > -- > calligraphicEx = -- > [ circle 15 # calligraphic (2 ^& 1) -- > , curve # calligraphic (2 ^& 2) -- > ] -- > # map (centerXY . strokeLoop) -- > # fc black -- > # hcat' (with & sep .~ 10) calligraphic :: (Floating n, Ord n) => V2 n -> Trail' Line V2 n -> Trail' Loop V2 n calligraphic pen p = (p <> fromOffsets [pen] <> reverseLine p <> fromOffsets [negated pen]) # closeLine