lightning-haskell-0.1.0.2: src/Web/Lightning/Plots/Volume.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Visualize a collection of images as a three-dimensional volume.
module Web.Lightning.Plots.Volume
(
VolumePlot(..)
, Visualization (..)
, volumePlot
)
where
--------------------------------------------------------------------------------
import Data.Aeson
import Data.Default.Class
import qualified Data.Text as T
import qualified Web.Lightning.Routes as R
import Web.Lightning.Types.Lightning
import Web.Lightning.Types (Img)
import Web.Lightning.Types.Visualization (Visualization (..))
--------------------------------------------------------------------------------
-- | Volume plot parameters
data VolumePlot = VolumePlot { vpImages :: [Img]
-- ^ A collection of images to display. Can be
-- 2 dimensional (grey scale) or 3 dimensional
-- (RGB) lists.
}
deriving (Show, Eq)
instance Default VolumePlot where
def = VolumePlot [ [[[]]] ]
instance ToJSON VolumePlot where
toJSON (VolumePlot imgs) =
object [ "images" .= imgs ]
instance ValidatablePlot VolumePlot where
validatePlot = return
-- | Submits a request to the specified lightning-viz server to create
-- a visualization of a collection of images as a three-dimensional volume.
--
-- <http://lightning-viz.org/visualizations/volume/ Volume Visualization>
volumePlot :: Monad m => T.Text
-- ^ Base URL for lightning-viz server.
-> VolumePlot
-- ^ Volume plot to create
-> LightningT m Visualization
-- ^ Transformer stack with created visualization.
volumePlot bUrl volumePlt = do
viz <- sendPlot "volume" volumePlt R.plot
return $ viz { vizBaseUrl = Just bUrl }