diagrams-lib- Embedded domain-specific language for declarative graphics

Copyright(c) 2014 diagrams-lib team (see LICENSE)
LicenseBSD-style (see LICENSE)
Safe HaskellNone



Diagrams may have attributes which affect the way they are rendered. This module defines some common attributes relevant in 3D; particular backends may also define more backend-specific attributes.

Every attribute type must have a semigroup structure, that is, an associative binary operation for combining two attributes into one. Unless otherwise noted, all the attributes defined here use the Last structure, that is, combining two attributes simply keeps the second one and throws away the first. This means that child attributes always override parent attributes.



newtype SurfaceColor #

SurfaceColor is the inherent pigment of an object, assumed to be opaque.


SurfaceColor (Last (Colour Double)) 

sc :: HasStyle d => Colour Double -> d -> d #

Set the surface color.

_sc :: Lens' (Style v n) (Maybe (Colour Double)) #

Lens onto the surface colour of a style.

newtype Diffuse #

Diffuse is the fraction of incident light reflected diffusely, that is, in all directions. The actual light reflected is the product of this value, the incident light, and the SurfaceColor Attribute. For physical reasonableness, Diffuse should have a value between 0 and 1; this is not checked.


Diffuse (Last Double) 

_Diffuse :: Iso' Diffuse Double #

Isomorphism between Diffuse and Double

diffuse :: HasStyle d => Double -> d -> d #

Set the diffuse reflectance.

_diffuse :: Lens' (Style v n) (Maybe Double) #

Lens onto the possible diffuse reflectance in a style.

newtype Ambient #

Ambient is an ad-hoc representation of indirect lighting. The product of Ambient and SurfaceColor is added to the light leaving an object due to diffuse and specular terms. Ambient can be set per-object, and can be loosely thought of as the product of indirect lighting incident on that object and the diffuse reflectance.


Ambient (Last Double) 

ambient :: HasStyle d => Double -> d -> d #

Set the emittance due to ambient light.

_ambient :: Lens' (Style v n) (Maybe Double) #

Lens onto the possible ambience in a style.

data Specular #

A specular highlight has two terms, the intensity, between 0 and 1, and the size. The highlight size is assumed to be the exponent in a Phong shading model (though Backends are free to use a different shading model). In this model, reasonable values are between 1 and 50 or so, with higher values for shinier objects. Physically, the intensity and the value of Diffuse must add up to less than 1; this is not enforced.


highlight :: HasStyle d => Specular -> d -> d #

Set the specular highlight.

_highlight :: Lens' (Style v n) (Maybe Specular) #

Lens onto the possible specular highlight in a style

highlightIntensity :: Traversal' (Style v n) Double #

Traversal over the highlight intensity of a style. If the style has no Specular, setting this will do nothing.

highlightSize :: Traversal' (Style v n) Double #

Traversal over the highlight size in a style. If the style has no Specular, setting this will do nothing.