{-# 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. -- -- 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 }