packages feed

diagrams-lib 1.1.0.7 → 1.2

raw patch · 107 files changed

+1879/−1138 lines, 107 filesdep +JuicyPixelsdep +dual-treedep −prettydep ~diagrams-coredep ~lensdep ~optparse-applicativePVP ok

version bump matches the API change (PVP)

Dependencies added: JuicyPixels, dual-tree

Dependencies removed: pretty

Dependency ranges changed: diagrams-core, lens, optparse-applicative, semigroups

API changes (from Hackage documentation)

- Diagrams.Attributes: Dashing :: [Double] -> Double -> Dashing
- Diagrams.Attributes: dashing :: HasStyle a => [Double] -> Double -> a -> a
- Diagrams.Attributes: data Dashing
- Diagrams.Attributes: data DashingA
- Diagrams.Attributes: data FillColor
- Diagrams.Attributes: data LineColor
- Diagrams.Attributes: data LineWidth
- Diagrams.Attributes: fc :: HasStyle a => Colour Double -> a -> a
- Diagrams.Attributes: fcA :: HasStyle a => AlphaColour Double -> a -> a
- Diagrams.Attributes: fillColor :: (Color c, HasStyle a) => c -> a -> a
- Diagrams.Attributes: getDashing :: DashingA -> Dashing
- Diagrams.Attributes: getFillColor :: FillColor -> SomeColor
- Diagrams.Attributes: getLineColor :: LineColor -> SomeColor
- Diagrams.Attributes: getLineWidth :: LineWidth -> Double
- Diagrams.Attributes: instance AttributeClass DashingA
- Diagrams.Attributes: instance AttributeClass FillColor
- Diagrams.Attributes: instance AttributeClass LineColor
- Diagrams.Attributes: instance AttributeClass LineWidth
- Diagrams.Attributes: instance Color FillColor
- Diagrams.Attributes: instance Color LineColor
- Diagrams.Attributes: instance Default FillColor
- Diagrams.Attributes: instance Default LineColor
- Diagrams.Attributes: instance Default LineWidth
- Diagrams.Attributes: instance Eq Dashing
- Diagrams.Attributes: instance Eq DashingA
- Diagrams.Attributes: instance Semigroup DashingA
- Diagrams.Attributes: instance Semigroup FillColor
- Diagrams.Attributes: instance Semigroup LineColor
- Diagrams.Attributes: instance Semigroup LineWidth
- Diagrams.Attributes: instance Typeable Dashing
- Diagrams.Attributes: instance Typeable DashingA
- Diagrams.Attributes: instance Typeable FillColor
- Diagrams.Attributes: instance Typeable LineColor
- Diagrams.Attributes: instance Typeable LineWidth
- Diagrams.Attributes: instance Typeable v => SplitAttribute (FillLoops v)
- Diagrams.Attributes: lc :: HasStyle a => Colour Double -> a -> a
- Diagrams.Attributes: lcA :: HasStyle a => AlphaColour Double -> a -> a
- Diagrams.Attributes: lineColor :: (Color c, HasStyle a) => c -> a -> a
- Diagrams.Attributes: lineColorA :: HasStyle a => LineColor -> a -> a
- Diagrams.Attributes: lineWidth :: HasStyle a => Double -> a -> a
- Diagrams.Attributes: lineWidthA :: HasStyle a => LineWidth -> a -> a
- Diagrams.Attributes: lw :: HasStyle a => Double -> a -> a
- Diagrams.Attributes: mkFillColor :: Color c => c -> FillColor
- Diagrams.Attributes: mkLineColor :: Color c => c -> LineColor
- Diagrams.Attributes: recommendFillColor :: (Color c, HasStyle a) => c -> a -> a
- Diagrams.Attributes: splitFills :: Typeable v => RTree b v a -> RTree b v a
- Diagrams.Attributes: styleFillColor :: (Color c, Color c') => Setter (Style v) (Style v) c c'
- Diagrams.Attributes: styleLineColor :: (Color c, Color c') => Setter (Style v) (Style v) c c'
- Diagrams.Backend.Show: ShowBackend :: ShowBackend
- Diagrams.Backend.Show: data ShowBackend
- Diagrams.Backend.Show: instance (Show v, HasLinearMap v) => Renderable (Segment o v) ShowBackend
- Diagrams.Backend.Show: instance (Show v, OrderedField (Scalar v), InnerSpace v, HasLinearMap v) => Renderable (Path v) ShowBackend
- Diagrams.Backend.Show: instance (Show v, OrderedField (Scalar v), InnerSpace v, HasLinearMap v) => Renderable (Trail v) ShowBackend
- Diagrams.Backend.Show: instance HasLinearMap v => Backend ShowBackend v
- Diagrams.Backend.Show: instance Monoid (Render ShowBackend v)
- Diagrams.Backend.Show: renderMat :: Show a => [[a]] -> Doc
- Diagrams.Backend.Show: renderTransf :: (Num (Scalar v), HasLinearMap v, Show (Scalar v)) => Transformation v -> Doc
- Diagrams.BoundingBox: instance Typeable1 BoundingBox
- Diagrams.BoundingBox: instance Typeable1 NonEmptyBoundingBox
- Diagrams.Path: instance (HasLinearMap v, InnerSpace v, OrderedField (Scalar v)) => IsPrim (Path v)
- Diagrams.Path: instance Typeable1 Path
- Diagrams.ThreeD.Camera: instance IsPrim (Camera l)
- Diagrams.ThreeD.Camera: instance Typeable1 Camera
- Diagrams.ThreeD.Light: instance IsPrim ParallelLight
- Diagrams.ThreeD.Light: instance IsPrim PointLight
- Diagrams.ThreeD.Shapes: instance IsPrim Ellipsoid
- Diagrams.ThreeD.Types: (@@) :: b -> Iso' a b -> a
- Diagrams.ThreeD.Types: Spherical :: Angle -> Angle -> Spherical
- Diagrams.ThreeD.Types: angleRatio :: Angle -> Angle -> Double
- Diagrams.ThreeD.Types: asSpherical :: Spherical -> Spherical
- Diagrams.ThreeD.Types: class Direction d
- Diagrams.ThreeD.Types: data Angle
- Diagrams.ThreeD.Types: data Spherical
- Diagrams.ThreeD.Types: deg :: Iso' Angle Double
- Diagrams.ThreeD.Types: fromSpherical :: Direction d => Spherical -> d
- Diagrams.ThreeD.Types: fullTurn :: Angle
- Diagrams.ThreeD.Types: instance Direction Spherical
- Diagrams.ThreeD.Types: instance Eq Spherical
- Diagrams.ThreeD.Types: instance Read Spherical
- Diagrams.ThreeD.Types: instance Rewrapped R3 R3
- Diagrams.ThreeD.Types: instance Show Spherical
- Diagrams.ThreeD.Types: instance Wrapped R3
- Diagrams.ThreeD.Types: rad :: Iso' Angle Double
- Diagrams.ThreeD.Types: toSpherical :: Direction d => d -> Spherical
- Diagrams.ThreeD.Types: turn :: Iso' Angle Double
- Diagrams.ThreeD.Vector: angleBetween :: R3 -> R3 -> Angle
- Diagrams.ThreeD.Vector: angleBetweenDirs :: Direction d => d -> d -> Angle
- Diagrams.ThreeD.Vector: direction :: Direction d => R3 -> d
- Diagrams.ThreeD.Vector: fromDirection :: Direction d => d -> R3
- Diagrams.TwoD: (@@) :: b -> Iso' a b -> a
- Diagrams.TwoD: _headSize :: ArrowOpts -> Double
- Diagrams.TwoD: _tailSize :: ArrowOpts -> Double
- Diagrams.TwoD: angleBetween :: R2 -> R2 -> Angle
- Diagrams.TwoD: angleRatio :: Angle -> Angle -> Double
- Diagrams.TwoD: data Angle
- Diagrams.TwoD: data Image
- Diagrams.TwoD: deg :: Iso' Angle Double
- Diagrams.TwoD: fullCircle :: Angle
- Diagrams.TwoD: fullTurn :: Angle
- Diagrams.TwoD: headColor :: Color c => Setter' ArrowOpts c
- Diagrams.TwoD: headSize :: Lens' ArrowOpts Double
- Diagrams.TwoD: rad :: Iso' Angle Double
- Diagrams.TwoD: shaftColor :: Color c => Setter' ArrowOpts c
- Diagrams.TwoD: tailColor :: Color c => Setter' ArrowOpts c
- Diagrams.TwoD: tailSize :: Lens' ArrowOpts Double
- Diagrams.TwoD: turn :: Iso' Angle Double
- Diagrams.TwoD.Adjust: adjustSize :: SizeSpec2D -> (Double, Double) -> Transformation R2
- Diagrams.TwoD.Adjust: requiredScale :: SizeSpec2D -> (Double, Double) -> Double
- Diagrams.TwoD.Arrow: _headSize :: ArrowOpts -> Double
- Diagrams.TwoD.Arrow: _tailSize :: ArrowOpts -> Double
- Diagrams.TwoD.Arrow: headColor :: Color c => Setter' ArrowOpts c
- Diagrams.TwoD.Arrow: headSize :: Lens' ArrowOpts Double
- Diagrams.TwoD.Arrow: shaftColor :: Color c => Setter' ArrowOpts c
- Diagrams.TwoD.Arrow: tailColor :: Color c => Setter' ArrowOpts c
- Diagrams.TwoD.Arrow: tailSize :: Lens' ArrowOpts Double
- Diagrams.TwoD.Arrowheads: arrowheadMissile :: Angle -> ArrowHT
- Diagrams.TwoD.Arrowheads: missile :: ArrowHT
- Diagrams.TwoD.Arrowheads: missile' :: ArrowHT
- Diagrams.TwoD.Image: Image :: FilePath -> SizeSpec2D -> T2 -> Image
- Diagrams.TwoD.Image: _imgFile :: Image -> FilePath
- Diagrams.TwoD.Image: _imgSize :: Image -> SizeSpec2D
- Diagrams.TwoD.Image: _imgTransf :: Image -> T2
- Diagrams.TwoD.Image: data Image
- Diagrams.TwoD.Image: imgFile :: Lens' Image FilePath
- Diagrams.TwoD.Image: imgSize :: Lens' Image SizeSpec2D
- Diagrams.TwoD.Image: imgTransf :: Lens' Image T2
- Diagrams.TwoD.Image: instance HasOrigin Image
- Diagrams.TwoD.Image: instance IsPrim Image
- Diagrams.TwoD.Image: instance Renderable Image NullBackend
- Diagrams.TwoD.Image: instance Transformable Image
- Diagrams.TwoD.Image: instance Typeable Image
- Diagrams.TwoD.Text: instance Eq FontSize
- Diagrams.TwoD.Text: instance IsPrim Text
- Diagrams.TwoD.Transform: avgScale :: T2 -> Double
- Diagrams.TwoD.Transform.ScaleInv: instance (V t ~ R2, Transformable t) => IsPrim (ScaleInv t)
- Diagrams.TwoD.Transform.ScaleInv: instance Typeable1 ScaleInv
- Diagrams.TwoD.Types: (@@) :: b -> Iso' a b -> a
- Diagrams.TwoD.Types: angleRatio :: Angle -> Angle -> Double
- Diagrams.TwoD.Types: data Angle
- Diagrams.TwoD.Types: deg :: Iso' Angle Double
- Diagrams.TwoD.Types: fullCircle :: Angle
- Diagrams.TwoD.Types: fullTurn :: Angle
- Diagrams.TwoD.Types: instance AdditiveGroup Angle
- Diagrams.TwoD.Types: instance Enum Angle
- Diagrams.TwoD.Types: instance Eq Angle
- Diagrams.TwoD.Types: instance Ord Angle
- Diagrams.TwoD.Types: instance Read Angle
- Diagrams.TwoD.Types: instance Show Angle
- Diagrams.TwoD.Types: instance VectorSpace Angle
- Diagrams.TwoD.Types: rad :: Iso' Angle Double
- Diagrams.TwoD.Types: turn :: Iso' Angle Double
+ Diagrams.Angle: (@@) :: b -> Iso' a b -> a
+ Diagrams.Angle: _theta :: HasTheta t => Lens' t Angle
+ Diagrams.Angle: acosA :: Double -> Angle
+ Diagrams.Angle: angleBetween :: (InnerSpace v, Scalar v ~ Double) => v -> v -> Angle
+ Diagrams.Angle: angleRatio :: Angle -> Angle -> Double
+ Diagrams.Angle: asinA :: Double -> Angle
+ Diagrams.Angle: atanA :: Double -> Angle
+ Diagrams.Angle: class HasTheta t
+ Diagrams.Angle: cosA :: Angle -> Double
+ Diagrams.Angle: data Angle
+ Diagrams.Angle: deg :: Iso' Angle Double
+ Diagrams.Angle: fullCircle :: Angle
+ Diagrams.Angle: fullTurn :: Angle
+ Diagrams.Angle: instance AdditiveGroup Angle
+ Diagrams.Angle: instance Enum Angle
+ Diagrams.Angle: instance Eq Angle
+ Diagrams.Angle: instance Ord Angle
+ Diagrams.Angle: instance Read Angle
+ Diagrams.Angle: instance Show Angle
+ Diagrams.Angle: instance VectorSpace Angle
+ Diagrams.Angle: rad :: Iso' Angle Double
+ Diagrams.Angle: sinA :: Angle -> Double
+ Diagrams.Angle: tanA :: Angle -> Double
+ Diagrams.Angle: turn :: Iso' Angle Double
+ Diagrams.BoundingBox: instance Typeable BoundingBox
+ Diagrams.BoundingBox: instance Typeable NonEmptyBoundingBox
+ Diagrams.Coordinates: _r :: HasR t => Lens' t Double
+ Diagrams.Coordinates: class HasR t
+ Diagrams.Path: instance Typeable Path
+ Diagrams.Path: pathLocSegments :: (InnerSpace v, OrderedField (Scalar v)) => Path v -> [[Located (Segment Closed v)]]
+ Diagrams.Solve: cubForm' :: (Floating d, Ord d) => d -> d -> d -> d -> d -> [d]
+ Diagrams.Solve: quartForm :: (Floating d, Ord d) => d -> d -> d -> d -> d -> [d]
+ Diagrams.Solve: quartForm' :: (Floating d, Ord d) => d -> d -> d -> d -> d -> d -> [d]
+ Diagrams.ThreeD.Attributes: Ambient :: (Last Double) -> Ambient
+ Diagrams.ThreeD.Attributes: Diffuse :: (Last Double) -> Diffuse
+ Diagrams.ThreeD.Attributes: Highlight :: (Last Specular) -> Highlight
+ Diagrams.ThreeD.Attributes: Specular :: Double -> Double -> Specular
+ Diagrams.ThreeD.Attributes: SurfaceColor :: (Last (Colour Double)) -> SurfaceColor
+ Diagrams.ThreeD.Attributes: _Ambient :: Iso' Ambient Double
+ Diagrams.ThreeD.Attributes: _Diffuse :: Iso' Diffuse Double
+ Diagrams.ThreeD.Attributes: _Highlight :: Iso' Highlight Specular
+ Diagrams.ThreeD.Attributes: _specularIntensity :: Specular -> Double
+ Diagrams.ThreeD.Attributes: _specularSize :: Specular -> Double
+ Diagrams.ThreeD.Attributes: ambient :: HasStyle d => Double -> d -> d
+ Diagrams.ThreeD.Attributes: data Specular
+ Diagrams.ThreeD.Attributes: diffuse :: HasStyle d => Double -> d -> d
+ Diagrams.ThreeD.Attributes: highlight :: HasStyle d => Specular -> d -> d
+ Diagrams.ThreeD.Attributes: instance AttributeClass Ambient
+ Diagrams.ThreeD.Attributes: instance AttributeClass Diffuse
+ Diagrams.ThreeD.Attributes: instance AttributeClass Highlight
+ Diagrams.ThreeD.Attributes: instance AttributeClass SurfaceColor
+ Diagrams.ThreeD.Attributes: instance Semigroup Ambient
+ Diagrams.ThreeD.Attributes: instance Semigroup Diffuse
+ Diagrams.ThreeD.Attributes: instance Semigroup Highlight
+ Diagrams.ThreeD.Attributes: instance Semigroup SurfaceColor
+ Diagrams.ThreeD.Attributes: instance Typeable Ambient
+ Diagrams.ThreeD.Attributes: instance Typeable Diffuse
+ Diagrams.ThreeD.Attributes: instance Typeable Highlight
+ Diagrams.ThreeD.Attributes: instance Typeable SurfaceColor
+ Diagrams.ThreeD.Attributes: newtype Ambient
+ Diagrams.ThreeD.Attributes: newtype Diffuse
+ Diagrams.ThreeD.Attributes: newtype Highlight
+ Diagrams.ThreeD.Attributes: newtype SurfaceColor
+ Diagrams.ThreeD.Attributes: sc :: HasStyle d => Colour Double -> d -> d
+ Diagrams.ThreeD.Attributes: specularIntensity :: Lens' Specular Double
+ Diagrams.ThreeD.Attributes: specularSize :: Lens' Specular Double
+ Diagrams.ThreeD.Attributes: surfaceColor :: Iso' SurfaceColor (Colour Double)
+ Diagrams.ThreeD.Camera: instance Typeable Camera
+ Diagrams.ThreeD.Shapes: Box :: T3 -> Box
+ Diagrams.ThreeD.Shapes: Frustum :: Double -> Double -> T3 -> Frustum
+ Diagrams.ThreeD.Shapes: cone :: (Backend b R3, Renderable Frustum b) => Diagram b R3
+ Diagrams.ThreeD.Shapes: cube :: (Backend b R3, Renderable Box b) => Diagram b R3
+ Diagrams.ThreeD.Shapes: cylinder :: (Backend b R3, Renderable Frustum b) => Diagram b R3
+ Diagrams.ThreeD.Shapes: data Box
+ Diagrams.ThreeD.Shapes: data Frustum
+ Diagrams.ThreeD.Shapes: frustum :: (Backend b R3, Renderable Frustum b) => Double -> Double -> Diagram b R3
+ Diagrams.ThreeD.Shapes: instance Renderable Box NullBackend
+ Diagrams.ThreeD.Shapes: instance Renderable Frustum NullBackend
+ Diagrams.ThreeD.Shapes: instance Transformable Box
+ Diagrams.ThreeD.Shapes: instance Transformable Frustum
+ Diagrams.ThreeD.Shapes: instance Typeable Box
+ Diagrams.ThreeD.Shapes: instance Typeable Frustum
+ Diagrams.ThreeD.Types: R3 :: !Double -> !Double -> !Double -> R3
+ Diagrams.ThreeD.Types: _phi :: HasPhi t => Lens' t Angle
+ Diagrams.ThreeD.Types: angleBetweenDirs :: Direction -> Direction -> Angle
+ Diagrams.ThreeD.Types: class Cylindrical t
+ Diagrams.ThreeD.Types: class HasPhi t
+ Diagrams.ThreeD.Types: class Spherical t
+ Diagrams.ThreeD.Types: cylindrical :: Cylindrical t => Iso' t (Double, Angle, Double)
+ Diagrams.ThreeD.Types: data Direction
+ Diagrams.ThreeD.Types: direction :: R3 -> Direction
+ Diagrams.ThreeD.Types: fromDirection :: Direction -> R3
+ Diagrams.ThreeD.Types: instance Cylindrical P3
+ Diagrams.ThreeD.Types: instance Cylindrical R3
+ Diagrams.ThreeD.Types: instance HasPhi Direction
+ Diagrams.ThreeD.Types: instance HasPhi P3
+ Diagrams.ThreeD.Types: instance HasPhi R3
+ Diagrams.ThreeD.Types: instance HasR P3
+ Diagrams.ThreeD.Types: instance HasR R3
+ Diagrams.ThreeD.Types: instance HasTheta Direction
+ Diagrams.ThreeD.Types: instance HasTheta P3
+ Diagrams.ThreeD.Types: instance HasTheta R3
+ Diagrams.ThreeD.Types: instance Spherical P3
+ Diagrams.ThreeD.Types: instance Spherical R3
+ Diagrams.ThreeD.Types: spherical :: Spherical t => Iso' t (Double, Angle, Angle)
+ Diagrams.Trail: trailLocSegments :: (InnerSpace v, OrderedField (Scalar v)) => Located (Trail v) -> [Located (Segment Closed v)]
+ Diagrams.TwoD: DImage :: ImageData t -> Int -> Int -> T2 -> DImage t
+ Diagrams.TwoD: Dashing :: [Measure R2] -> (Measure R2) -> Dashing
+ Diagrams.TwoD: GradPad :: SpreadMethod
+ Diagrams.TwoD: GradReflect :: SpreadMethod
+ Diagrams.TwoD: GradRepeat :: SpreadMethod
+ Diagrams.TwoD: GradientStop :: SomeColor -> Double -> GradientStop
+ Diagrams.TwoD: ImageRaster :: DynamicImage -> ImageData Embedded
+ Diagrams.TwoD: ImageRef :: FilePath -> ImageData External
+ Diagrams.TwoD: LG :: LGradient -> Texture
+ Diagrams.TwoD: LGradient :: [GradientStop] -> P2 -> P2 -> T2 -> SpreadMethod -> LGradient
+ Diagrams.TwoD: RG :: RGradient -> Texture
+ Diagrams.TwoD: RGradient :: [GradientStop] -> P2 -> Double -> P2 -> Double -> T2 -> SpreadMethod -> RGradient
+ Diagrams.TwoD: SC :: SomeColor -> Texture
+ Diagrams.TwoD: _LG :: Prism' Texture LGradient
+ Diagrams.TwoD: _RG :: Prism' Texture RGradient
+ Diagrams.TwoD: _SC :: Prism' Texture SomeColor
+ Diagrams.TwoD: _headLength :: ArrowOpts -> Measure R2
+ Diagrams.TwoD: _lGradEnd :: LGradient -> P2
+ Diagrams.TwoD: _lGradSpreadMethod :: LGradient -> SpreadMethod
+ Diagrams.TwoD: _lGradStart :: LGradient -> P2
+ Diagrams.TwoD: _lGradStops :: LGradient -> [GradientStop]
+ Diagrams.TwoD: _lGradTrans :: LGradient -> T2
+ Diagrams.TwoD: _rGradCenter0 :: RGradient -> P2
+ Diagrams.TwoD: _rGradCenter1 :: RGradient -> P2
+ Diagrams.TwoD: _rGradRadius0 :: RGradient -> Double
+ Diagrams.TwoD: _rGradRadius1 :: RGradient -> Double
+ Diagrams.TwoD: _rGradSpreadMethod :: RGradient -> SpreadMethod
+ Diagrams.TwoD: _rGradStops :: RGradient -> [GradientStop]
+ Diagrams.TwoD: _rGradTrans :: RGradient -> T2
+ Diagrams.TwoD: _stopColor :: GradientStop -> SomeColor
+ Diagrams.TwoD: _stopFraction :: GradientStop -> Double
+ Diagrams.TwoD: _tailLength :: ArrowOpts -> Measure R2
+ Diagrams.TwoD: dashing :: (HasStyle a, V a ~ R2) => [Measure R2] -> Measure R2 -> a -> a
+ Diagrams.TwoD: dashingG :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a
+ Diagrams.TwoD: dashingL :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a
+ Diagrams.TwoD: dashingN :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a
+ Diagrams.TwoD: dashingO :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a
+ Diagrams.TwoD: data DImage :: * -> *
+ Diagrams.TwoD: data Dashing
+ Diagrams.TwoD: data DashingA
+ Diagrams.TwoD: data Embedded
+ Diagrams.TwoD: data External
+ Diagrams.TwoD: data GradientStop
+ Diagrams.TwoD: data ImageData :: * -> *
+ Diagrams.TwoD: data LGradient
+ Diagrams.TwoD: data LineWidth
+ Diagrams.TwoD: data RGradient
+ Diagrams.TwoD: data SpreadMethod
+ Diagrams.TwoD: data Texture
+ Diagrams.TwoD: defaultLG :: Texture
+ Diagrams.TwoD: defaultRG :: Texture
+ Diagrams.TwoD: fc :: (HasStyle a, V a ~ R2) => Colour Double -> a -> a
+ Diagrams.TwoD: fcA :: (HasStyle a, V a ~ R2) => AlphaColour Double -> a -> a
+ Diagrams.TwoD: fillColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a
+ Diagrams.TwoD: fillTexture :: (HasStyle a, V a ~ R2) => Texture -> a -> a
+ Diagrams.TwoD: fontSizeG :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD: fontSizeL :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD: fontSizeN :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD: fontSizeO :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD: gaps :: Traversal' ArrowOpts (Measure R2)
+ Diagrams.TwoD: getDashing :: DashingA -> Dashing
+ Diagrams.TwoD: getFillTexture :: FillTexture -> Texture
+ Diagrams.TwoD: getLineTexture :: LineTexture -> Texture
+ Diagrams.TwoD: getLineWidth :: LineWidth -> Measure R2
+ Diagrams.TwoD: headLength :: Lens' ArrowOpts (Measure R2)
+ Diagrams.TwoD: headTexture :: Setter' ArrowOpts Texture
+ Diagrams.TwoD: huge :: Measure R2
+ Diagrams.TwoD: lGradEnd :: Lens' LGradient P2
+ Diagrams.TwoD: lGradSpreadMethod :: Lens' LGradient SpreadMethod
+ Diagrams.TwoD: lGradStart :: Lens' LGradient P2
+ Diagrams.TwoD: lGradStops :: Lens' LGradient [GradientStop]
+ Diagrams.TwoD: lGradTrans :: Lens' LGradient T2
+ Diagrams.TwoD: large :: Measure R2
+ Diagrams.TwoD: lc :: (HasStyle a, V a ~ R2) => Colour Double -> a -> a
+ Diagrams.TwoD: lcA :: (HasStyle a, V a ~ R2) => AlphaColour Double -> a -> a
+ Diagrams.TwoD: lengths :: Traversal' ArrowOpts (Measure R2)
+ Diagrams.TwoD: lineColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a
+ Diagrams.TwoD: lineTexture :: (HasStyle a, V a ~ R2) => Texture -> a -> a
+ Diagrams.TwoD: lineTextureA :: (HasStyle a, V a ~ R2) => LineTexture -> a -> a
+ Diagrams.TwoD: lineWidth :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a
+ Diagrams.TwoD: lineWidthA :: (HasStyle a, V a ~ R2) => LineWidth -> a -> a
+ Diagrams.TwoD: loadImageEmb :: FilePath -> IO (Either String (DImage Embedded))
+ Diagrams.TwoD: loadImageExt :: FilePath -> IO (Either String (DImage External))
+ Diagrams.TwoD: lw :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a
+ Diagrams.TwoD: lwG :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD: lwL :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD: lwN :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD: lwO :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD: medium :: Measure R2
+ Diagrams.TwoD: mkLinearGradient :: [GradientStop] -> P2 -> P2 -> SpreadMethod -> Texture
+ Diagrams.TwoD: mkRadialGradient :: [GradientStop] -> P2 -> Double -> P2 -> Double -> SpreadMethod -> Texture
+ Diagrams.TwoD: mkStops :: [(Colour Double, Double, Double)] -> [GradientStop]
+ Diagrams.TwoD: none :: Measure R2
+ Diagrams.TwoD: normal :: Measure R2
+ Diagrams.TwoD: rGradCenter0 :: Lens' RGradient P2
+ Diagrams.TwoD: rGradCenter1 :: Lens' RGradient P2
+ Diagrams.TwoD: rGradRadius0 :: Lens' RGradient Double
+ Diagrams.TwoD: rGradRadius1 :: Lens' RGradient Double
+ Diagrams.TwoD: rGradSpreadMethod :: Lens' RGradient SpreadMethod
+ Diagrams.TwoD: rGradStops :: Lens' RGradient [GradientStop]
+ Diagrams.TwoD: rGradTrans :: Lens' RGradient T2
+ Diagrams.TwoD: raster :: (Int -> Int -> AlphaColour Double) -> Int -> Int -> DImage Embedded
+ Diagrams.TwoD: rasterDia :: Renderable (DImage Embedded) b => (Int -> Int -> AlphaColour Double) -> Int -> Int -> Diagram b R2
+ Diagrams.TwoD: recommendFillColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a
+ Diagrams.TwoD: shaftTexture :: Setter' ArrowOpts Texture
+ Diagrams.TwoD: small :: Measure R2
+ Diagrams.TwoD: solid :: Color a => a -> Texture
+ Diagrams.TwoD: stopColor :: Lens' GradientStop SomeColor
+ Diagrams.TwoD: stopFraction :: Lens' GradientStop Double
+ Diagrams.TwoD: tailLength :: Lens' ArrowOpts (Measure R2)
+ Diagrams.TwoD: tailTexture :: Setter' ArrowOpts Texture
+ Diagrams.TwoD: thick :: Measure R2
+ Diagrams.TwoD: thin :: Measure R2
+ Diagrams.TwoD: tiny :: Measure R2
+ Diagrams.TwoD: ultraThick :: Measure R2
+ Diagrams.TwoD: ultraThin :: Measure R2
+ Diagrams.TwoD: uncheckedImageRef :: FilePath -> Int -> Int -> DImage External
+ Diagrams.TwoD: veryLarge :: Measure R2
+ Diagrams.TwoD: verySmall :: Measure R2
+ Diagrams.TwoD: veryThick :: Measure R2
+ Diagrams.TwoD: veryThin :: Measure R2
+ Diagrams.TwoD.Arrow: _headLength :: ArrowOpts -> Measure R2
+ Diagrams.TwoD.Arrow: _tailLength :: ArrowOpts -> Measure R2
+ Diagrams.TwoD.Arrow: gaps :: Traversal' ArrowOpts (Measure R2)
+ Diagrams.TwoD.Arrow: headLength :: Lens' ArrowOpts (Measure R2)
+ Diagrams.TwoD.Arrow: headTexture :: Setter' ArrowOpts Texture
+ Diagrams.TwoD.Arrow: lengths :: Traversal' ArrowOpts (Measure R2)
+ Diagrams.TwoD.Arrow: shaftTexture :: Setter' ArrowOpts Texture
+ Diagrams.TwoD.Arrow: tailLength :: Lens' ArrowOpts (Measure R2)
+ Diagrams.TwoD.Arrow: tailTexture :: Setter' ArrowOpts Texture
+ Diagrams.TwoD.Arrowheads: lineHead :: ArrowHT
+ Diagrams.TwoD.Arrowheads: lineTail :: ArrowHT
+ Diagrams.TwoD.Attributes: Dashing :: [Measure R2] -> (Measure R2) -> Dashing
+ Diagrams.TwoD.Attributes: FillTexture :: (Recommend (Last Texture)) -> FillTexture
+ Diagrams.TwoD.Attributes: GradPad :: SpreadMethod
+ Diagrams.TwoD.Attributes: GradReflect :: SpreadMethod
+ Diagrams.TwoD.Attributes: GradRepeat :: SpreadMethod
+ Diagrams.TwoD.Attributes: GradientStop :: SomeColor -> Double -> GradientStop
+ Diagrams.TwoD.Attributes: LG :: LGradient -> Texture
+ Diagrams.TwoD.Attributes: LGradient :: [GradientStop] -> P2 -> P2 -> T2 -> SpreadMethod -> LGradient
+ Diagrams.TwoD.Attributes: LineTexture :: (Last Texture) -> LineTexture
+ Diagrams.TwoD.Attributes: RG :: RGradient -> Texture
+ Diagrams.TwoD.Attributes: RGradient :: [GradientStop] -> P2 -> Double -> P2 -> Double -> T2 -> SpreadMethod -> RGradient
+ Diagrams.TwoD.Attributes: SC :: SomeColor -> Texture
+ Diagrams.TwoD.Attributes: _LG :: Prism' Texture LGradient
+ Diagrams.TwoD.Attributes: _RG :: Prism' Texture RGradient
+ Diagrams.TwoD.Attributes: _SC :: Prism' Texture SomeColor
+ Diagrams.TwoD.Attributes: _lGradEnd :: LGradient -> P2
+ Diagrams.TwoD.Attributes: _lGradSpreadMethod :: LGradient -> SpreadMethod
+ Diagrams.TwoD.Attributes: _lGradStart :: LGradient -> P2
+ Diagrams.TwoD.Attributes: _lGradStops :: LGradient -> [GradientStop]
+ Diagrams.TwoD.Attributes: _lGradTrans :: LGradient -> T2
+ Diagrams.TwoD.Attributes: _rGradCenter0 :: RGradient -> P2
+ Diagrams.TwoD.Attributes: _rGradCenter1 :: RGradient -> P2
+ Diagrams.TwoD.Attributes: _rGradRadius0 :: RGradient -> Double
+ Diagrams.TwoD.Attributes: _rGradRadius1 :: RGradient -> Double
+ Diagrams.TwoD.Attributes: _rGradSpreadMethod :: RGradient -> SpreadMethod
+ Diagrams.TwoD.Attributes: _rGradStops :: RGradient -> [GradientStop]
+ Diagrams.TwoD.Attributes: _rGradTrans :: RGradient -> T2
+ Diagrams.TwoD.Attributes: _stopColor :: GradientStop -> SomeColor
+ Diagrams.TwoD.Attributes: _stopFraction :: GradientStop -> Double
+ Diagrams.TwoD.Attributes: dashing :: (HasStyle a, V a ~ R2) => [Measure R2] -> Measure R2 -> a -> a
+ Diagrams.TwoD.Attributes: dashingG :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a
+ Diagrams.TwoD.Attributes: dashingL :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a
+ Diagrams.TwoD.Attributes: dashingN :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a
+ Diagrams.TwoD.Attributes: dashingO :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a
+ Diagrams.TwoD.Attributes: data Dashing
+ Diagrams.TwoD.Attributes: data DashingA
+ Diagrams.TwoD.Attributes: data GradientStop
+ Diagrams.TwoD.Attributes: data LGradient
+ Diagrams.TwoD.Attributes: data LineWidth
+ Diagrams.TwoD.Attributes: data RGradient
+ Diagrams.TwoD.Attributes: data SpreadMethod
+ Diagrams.TwoD.Attributes: data Texture
+ Diagrams.TwoD.Attributes: defaultLG :: Texture
+ Diagrams.TwoD.Attributes: defaultRG :: Texture
+ Diagrams.TwoD.Attributes: fc :: (HasStyle a, V a ~ R2) => Colour Double -> a -> a
+ Diagrams.TwoD.Attributes: fcA :: (HasStyle a, V a ~ R2) => AlphaColour Double -> a -> a
+ Diagrams.TwoD.Attributes: fillColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a
+ Diagrams.TwoD.Attributes: fillTexture :: (HasStyle a, V a ~ R2) => Texture -> a -> a
+ Diagrams.TwoD.Attributes: getDashing :: DashingA -> Dashing
+ Diagrams.TwoD.Attributes: getFillTexture :: FillTexture -> Texture
+ Diagrams.TwoD.Attributes: getLineTexture :: LineTexture -> Texture
+ Diagrams.TwoD.Attributes: getLineWidth :: LineWidth -> Measure R2
+ Diagrams.TwoD.Attributes: huge :: Measure R2
+ Diagrams.TwoD.Attributes: instance AttributeClass DashingA
+ Diagrams.TwoD.Attributes: instance AttributeClass FillTexture
+ Diagrams.TwoD.Attributes: instance AttributeClass LineTexture
+ Diagrams.TwoD.Attributes: instance AttributeClass LineWidth
+ Diagrams.TwoD.Attributes: instance Data Dashing
+ Diagrams.TwoD.Attributes: instance Data DashingA
+ Diagrams.TwoD.Attributes: instance Data LineWidth
+ Diagrams.TwoD.Attributes: instance Default FillTexture
+ Diagrams.TwoD.Attributes: instance Default LineTexture
+ Diagrams.TwoD.Attributes: instance Default LineWidth
+ Diagrams.TwoD.Attributes: instance Eq Dashing
+ Diagrams.TwoD.Attributes: instance Eq DashingA
+ Diagrams.TwoD.Attributes: instance Semigroup DashingA
+ Diagrams.TwoD.Attributes: instance Semigroup FillTexture
+ Diagrams.TwoD.Attributes: instance Semigroup LineTexture
+ Diagrams.TwoD.Attributes: instance Semigroup LineWidth
+ Diagrams.TwoD.Attributes: instance Transformable DashingA
+ Diagrams.TwoD.Attributes: instance Transformable FillTexture
+ Diagrams.TwoD.Attributes: instance Transformable LineTexture
+ Diagrams.TwoD.Attributes: instance Transformable LineWidth
+ Diagrams.TwoD.Attributes: instance Typeable Dashing
+ Diagrams.TwoD.Attributes: instance Typeable DashingA
+ Diagrams.TwoD.Attributes: instance Typeable FillTexture
+ Diagrams.TwoD.Attributes: instance Typeable LineTexture
+ Diagrams.TwoD.Attributes: instance Typeable LineWidth
+ Diagrams.TwoD.Attributes: instance Typeable Texture
+ Diagrams.TwoD.Attributes: instance Typeable v => SplitAttribute (FillTextureLoops v)
+ Diagrams.TwoD.Attributes: lGradEnd :: Lens' LGradient P2
+ Diagrams.TwoD.Attributes: lGradSpreadMethod :: Lens' LGradient SpreadMethod
+ Diagrams.TwoD.Attributes: lGradStart :: Lens' LGradient P2
+ Diagrams.TwoD.Attributes: lGradStops :: Lens' LGradient [GradientStop]
+ Diagrams.TwoD.Attributes: lGradTrans :: Lens' LGradient T2
+ Diagrams.TwoD.Attributes: large :: Measure R2
+ Diagrams.TwoD.Attributes: lc :: (HasStyle a, V a ~ R2) => Colour Double -> a -> a
+ Diagrams.TwoD.Attributes: lcA :: (HasStyle a, V a ~ R2) => AlphaColour Double -> a -> a
+ Diagrams.TwoD.Attributes: lineColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a
+ Diagrams.TwoD.Attributes: lineLGradient :: (HasStyle a, V a ~ R2) => LGradient -> a -> a
+ Diagrams.TwoD.Attributes: lineRGradient :: (HasStyle a, V a ~ R2) => RGradient -> a -> a
+ Diagrams.TwoD.Attributes: lineTexture :: (HasStyle a, V a ~ R2) => Texture -> a -> a
+ Diagrams.TwoD.Attributes: lineTextureA :: (HasStyle a, V a ~ R2) => LineTexture -> a -> a
+ Diagrams.TwoD.Attributes: lineWidth :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a
+ Diagrams.TwoD.Attributes: lineWidthA :: (HasStyle a, V a ~ R2) => LineWidth -> a -> a
+ Diagrams.TwoD.Attributes: lw :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a
+ Diagrams.TwoD.Attributes: lwG :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD.Attributes: lwL :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD.Attributes: lwN :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD.Attributes: lwO :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD.Attributes: medium :: Measure R2
+ Diagrams.TwoD.Attributes: mkFillTexture :: Texture -> FillTexture
+ Diagrams.TwoD.Attributes: mkLineTexture :: Texture -> LineTexture
+ Diagrams.TwoD.Attributes: mkLinearGradient :: [GradientStop] -> P2 -> P2 -> SpreadMethod -> Texture
+ Diagrams.TwoD.Attributes: mkRadialGradient :: [GradientStop] -> P2 -> Double -> P2 -> Double -> SpreadMethod -> Texture
+ Diagrams.TwoD.Attributes: mkStops :: [(Colour Double, Double, Double)] -> [GradientStop]
+ Diagrams.TwoD.Attributes: newtype FillTexture
+ Diagrams.TwoD.Attributes: newtype LineTexture
+ Diagrams.TwoD.Attributes: none :: Measure R2
+ Diagrams.TwoD.Attributes: normal :: Measure R2
+ Diagrams.TwoD.Attributes: rGradCenter0 :: Lens' RGradient P2
+ Diagrams.TwoD.Attributes: rGradCenter1 :: Lens' RGradient P2
+ Diagrams.TwoD.Attributes: rGradRadius0 :: Lens' RGradient Double
+ Diagrams.TwoD.Attributes: rGradRadius1 :: Lens' RGradient Double
+ Diagrams.TwoD.Attributes: rGradSpreadMethod :: Lens' RGradient SpreadMethod
+ Diagrams.TwoD.Attributes: rGradStops :: Lens' RGradient [GradientStop]
+ Diagrams.TwoD.Attributes: rGradTrans :: Lens' RGradient T2
+ Diagrams.TwoD.Attributes: recommendFillColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a
+ Diagrams.TwoD.Attributes: small :: Measure R2
+ Diagrams.TwoD.Attributes: solid :: Color a => a -> Texture
+ Diagrams.TwoD.Attributes: splitTextureFills :: Typeable v => RTree b v a -> RTree b v a
+ Diagrams.TwoD.Attributes: stopColor :: Lens' GradientStop SomeColor
+ Diagrams.TwoD.Attributes: stopFraction :: Lens' GradientStop Double
+ Diagrams.TwoD.Attributes: styleFillTexture :: Setter' (Style v) Texture
+ Diagrams.TwoD.Attributes: styleLineTexture :: Setter' (Style v) Texture
+ Diagrams.TwoD.Attributes: thick :: Measure R2
+ Diagrams.TwoD.Attributes: thin :: Measure R2
+ Diagrams.TwoD.Attributes: tiny :: Measure R2
+ Diagrams.TwoD.Attributes: ultraThick :: Measure R2
+ Diagrams.TwoD.Attributes: ultraThin :: Measure R2
+ Diagrams.TwoD.Attributes: veryLarge :: Measure R2
+ Diagrams.TwoD.Attributes: verySmall :: Measure R2
+ Diagrams.TwoD.Attributes: veryThick :: Measure R2
+ Diagrams.TwoD.Attributes: veryThin :: Measure R2
+ Diagrams.TwoD.Image: DImage :: ImageData t -> Int -> Int -> T2 -> DImage t
+ Diagrams.TwoD.Image: ImageRaster :: DynamicImage -> ImageData Embedded
+ Diagrams.TwoD.Image: ImageRef :: FilePath -> ImageData External
+ Diagrams.TwoD.Image: data DImage :: * -> *
+ Diagrams.TwoD.Image: data Embedded
+ Diagrams.TwoD.Image: data External
+ Diagrams.TwoD.Image: data ImageData :: * -> *
+ Diagrams.TwoD.Image: instance HasOrigin (DImage a)
+ Diagrams.TwoD.Image: instance Renderable (DImage a) NullBackend
+ Diagrams.TwoD.Image: instance Transformable (DImage a)
+ Diagrams.TwoD.Image: instance Typeable DImage
+ Diagrams.TwoD.Image: instance Typeable Embedded
+ Diagrams.TwoD.Image: instance Typeable External
+ Diagrams.TwoD.Image: loadImageEmb :: FilePath -> IO (Either String (DImage Embedded))
+ Diagrams.TwoD.Image: loadImageExt :: FilePath -> IO (Either String (DImage External))
+ Diagrams.TwoD.Image: raster :: (Int -> Int -> AlphaColour Double) -> Int -> Int -> DImage Embedded
+ Diagrams.TwoD.Image: rasterDia :: Renderable (DImage Embedded) b => (Int -> Int -> AlphaColour Double) -> Int -> Int -> Diagram b R2
+ Diagrams.TwoD.Image: uncheckedImageRef :: FilePath -> Int -> Int -> DImage External
+ Diagrams.TwoD.Size: sizePair :: SizeSpec2D -> (Double, Double)
+ Diagrams.TwoD.Text: fontSizeG :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD.Text: fontSizeL :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD.Text: fontSizeN :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD.Text: fontSizeO :: (HasStyle a, V a ~ R2) => Double -> a -> a
+ Diagrams.TwoD.Text: getFontSizeIsLocal :: FontSize -> Bool
+ Diagrams.TwoD.Text: instance Data FontSize
+ Diagrams.TwoD.Text: instance Transformable FontSize
+ Diagrams.TwoD.Transform.ScaleInv: instance Typeable ScaleInv
+ Diagrams.TwoD.Types: instance Data R2
+ Diagrams.TwoD.Types: instance HasR P2
+ Diagrams.TwoD.Types: instance HasR R2
+ Diagrams.TwoD.Types: instance HasTheta P2
+ Diagrams.TwoD.Types: instance HasTheta R2
- Diagrams.Coordinates: (:&) :: a -> b -> :& a b
+ Diagrams.Coordinates: (:&) :: a -> b -> (:&) a b
- Diagrams.Names: class (Typeable a, Ord a, Show a) => IsName a
+ Diagrams.Names: class (Typeable * a, Ord a, Show a) => IsName a
- Diagrams.Segment: oeEnvelope :: Lens' (OffsetEnvelope v_ayvh) (Envelope v_ayvh)
+ Diagrams.Segment: oeEnvelope :: Lens' (OffsetEnvelope v_aFog) (Envelope v_aFog)
- Diagrams.Segment: oeOffset :: Lens' (OffsetEnvelope v_ayvh) (TotalOffset v_ayvh)
+ Diagrams.Segment: oeOffset :: Lens' (OffsetEnvelope v_aFog) (TotalOffset v_aFog)
- Diagrams.ThreeD.Camera: camForward :: Direction d => Camera l -> d
+ Diagrams.ThreeD.Camera: camForward :: Camera l -> Direction
- Diagrams.ThreeD.Camera: camRight :: Direction d => Camera l -> d
+ Diagrams.ThreeD.Camera: camRight :: Camera l -> Direction
- Diagrams.ThreeD.Camera: camUp :: Direction d => Camera l -> d
+ Diagrams.ThreeD.Camera: camUp :: Camera l -> Direction
- Diagrams.ThreeD.Light: parallelLight :: (Direction d, Backend b R3, Renderable ParallelLight b) => d -> Colour Double -> Diagram b R3
+ Diagrams.ThreeD.Light: parallelLight :: (Backend b R3, Renderable ParallelLight b) => Direction -> Colour Double -> Diagram b R3
- Diagrams.ThreeD.Transform: pointAt :: Direction d => d -> d -> d -> T3
+ Diagrams.ThreeD.Transform: pointAt :: Direction -> Direction -> Direction -> T3
- Diagrams.ThreeD.Transform: rotationAbout :: Direction d => P3 -> d -> Angle -> T3
+ Diagrams.ThreeD.Transform: rotationAbout :: P3 -> Direction -> Angle -> T3
- Diagrams.Transform: under :: Transformable a => (a -> a) -> Transformation (V a) -> a -> a
+ Diagrams.Transform: under :: (Transformable a, Transformable b, V a ~ V b) => (a -> b) -> Transformation (V a) -> a -> b
- Diagrams.TwoD: ArrowOpts :: ArrowHT -> ArrowHT -> Trail R2 -> Double -> Double -> Double -> Double -> Style R2 -> Style R2 -> Style R2 -> ArrowOpts
+ Diagrams.TwoD: ArrowOpts :: ArrowHT -> ArrowHT -> Trail R2 -> Measure R2 -> Measure R2 -> Style R2 -> Measure R2 -> Style R2 -> Measure R2 -> Style R2 -> ArrowOpts
- Diagrams.TwoD: _headGap :: ArrowOpts -> Double
+ Diagrams.TwoD: _headGap :: ArrowOpts -> Measure R2
- Diagrams.TwoD: _tailGap :: ArrowOpts -> Double
+ Diagrams.TwoD: _tailGap :: ArrowOpts -> Measure R2
- Diagrams.TwoD: fontSize :: HasStyle a => Double -> a -> a
+ Diagrams.TwoD: fontSize :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a
- Diagrams.TwoD: gap :: Traversal' ArrowOpts Double
+ Diagrams.TwoD: gap :: Traversal' ArrowOpts (Measure R2)
- Diagrams.TwoD: headGap :: Lens' ArrowOpts Double
+ Diagrams.TwoD: headGap :: Lens' ArrowOpts (Measure R2)
- Diagrams.TwoD: image :: Renderable Image b => FilePath -> Double -> Double -> Diagram b R2
+ Diagrams.TwoD: image :: (Typeable a, Renderable (DImage a) b) => DImage a -> Diagram b R2
- Diagrams.TwoD: tailGap :: Lens' ArrowOpts Double
+ Diagrams.TwoD: tailGap :: Lens' ArrowOpts (Measure R2)
- Diagrams.TwoD.Adjust: adjustDia2D :: Monoid' m => (Options b R2 -> SizeSpec2D) -> (SizeSpec2D -> Options b R2 -> Options b R2) -> b -> Options b R2 -> QDiagram b R2 m -> (Options b R2, QDiagram b R2 m)
+ Diagrams.TwoD.Adjust: adjustDia2D :: Monoid' m => Lens' (Options b R2) SizeSpec2D -> b -> Options b R2 -> QDiagram b R2 m -> (Options b R2, T2, QDiagram b R2 m)
- Diagrams.TwoD.Adjust: adjustDiaSize2D :: Monoid' m => (Options b R2 -> SizeSpec2D) -> (SizeSpec2D -> Options b R2 -> Options b R2) -> b -> Options b R2 -> QDiagram b R2 m -> (Options b R2, QDiagram b R2 m)
+ Diagrams.TwoD.Adjust: adjustDiaSize2D :: Monoid' m => Lens' (Options b R2) SizeSpec2D -> b -> Options b R2 -> QDiagram b R2 m -> (Options b R2, T2, QDiagram b R2 m)
- Diagrams.TwoD.Arrow: ArrowOpts :: ArrowHT -> ArrowHT -> Trail R2 -> Double -> Double -> Double -> Double -> Style R2 -> Style R2 -> Style R2 -> ArrowOpts
+ Diagrams.TwoD.Arrow: ArrowOpts :: ArrowHT -> ArrowHT -> Trail R2 -> Measure R2 -> Measure R2 -> Style R2 -> Measure R2 -> Style R2 -> Measure R2 -> Style R2 -> ArrowOpts
- Diagrams.TwoD.Arrow: _headGap :: ArrowOpts -> Double
+ Diagrams.TwoD.Arrow: _headGap :: ArrowOpts -> Measure R2
- Diagrams.TwoD.Arrow: _tailGap :: ArrowOpts -> Double
+ Diagrams.TwoD.Arrow: _tailGap :: ArrowOpts -> Measure R2
- Diagrams.TwoD.Arrow: gap :: Traversal' ArrowOpts Double
+ Diagrams.TwoD.Arrow: gap :: Traversal' ArrowOpts (Measure R2)
- Diagrams.TwoD.Arrow: headGap :: Lens' ArrowOpts Double
+ Diagrams.TwoD.Arrow: headGap :: Lens' ArrowOpts (Measure R2)
- Diagrams.TwoD.Arrow: tailGap :: Lens' ArrowOpts Double
+ Diagrams.TwoD.Arrow: tailGap :: Lens' ArrowOpts (Measure R2)
- Diagrams.TwoD.Arrowheads: arrowheadThorn :: Angle -> Double -> ArrowHT
+ Diagrams.TwoD.Arrowheads: arrowheadThorn :: Angle -> ArrowHT
- Diagrams.TwoD.Image: image :: Renderable Image b => FilePath -> Double -> Double -> Diagram b R2
+ Diagrams.TwoD.Image: image :: (Typeable a, Renderable (DImage a) b) => DImage a -> Diagram b R2
- Diagrams.TwoD.Text: FontSize :: (Last Double) -> FontSize
+ Diagrams.TwoD.Text: FontSize :: (Last (Measure R2, Bool)) -> FontSize
- Diagrams.TwoD.Text: Text :: T2 -> TextAlignment -> String -> Text
+ Diagrams.TwoD.Text: Text :: T2 -> T2 -> TextAlignment -> String -> Text
- Diagrams.TwoD.Text: fontSize :: HasStyle a => Double -> a -> a
+ Diagrams.TwoD.Text: fontSize :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a
- Diagrams.TwoD.Text: fontSizeA :: HasStyle a => FontSize -> a -> a
+ Diagrams.TwoD.Text: fontSizeA :: (HasStyle a, V a ~ R2) => FontSize -> a -> a
- Diagrams.TwoD.Text: getFontSize :: FontSize -> Double
+ Diagrams.TwoD.Text: getFontSize :: FontSize -> Measure R2
- Diagrams.TwoD.Transform.ScaleInv: scaleInvDir :: Lens' (ScaleInv t_asqr) R2
+ Diagrams.TwoD.Transform.ScaleInv: scaleInvDir :: Lens' (ScaleInv t_aAf2) R2
- Diagrams.TwoD.Transform.ScaleInv: scaleInvLoc :: Lens' (ScaleInv t_asqr) P2
+ Diagrams.TwoD.Transform.ScaleInv: scaleInvLoc :: Lens' (ScaleInv t_aAf2) P2
- Diagrams.TwoD.Transform.ScaleInv: scaleInvObj :: Lens (ScaleInv t_asqr) (ScaleInv t_assC) t_asqr t_assC
+ Diagrams.TwoD.Transform.ScaleInv: scaleInvObj :: Lens (ScaleInv t_aAf2) (ScaleInv t_aAh6) t_aAf2 t_aAh6
- Diagrams.TwoD.Vector: angleBetween :: R2 -> R2 -> Angle
+ Diagrams.TwoD.Vector: angleBetween :: (InnerSpace v, Scalar v ~ Double) => v -> v -> Angle

Files

CHANGES.markdown view
@@ -1,10 +1,91 @@+1.2 (27 May 2014)+-----------------++* **New features**++    - Several attributes (such as line width, dashing size, arrowhead+      size, and font size) that formerly had a value of type `Double`+      now have the more general type `Measure R2`. This allows the+      attributes to be specified relative to one of four measurement+      frames: `Local`, `Global`, `Normalized`, and `Output`.++    - New DSL for specifying measurements.++    - New synonyms for specifying measurements, *e.g.* `thin`,+      `thick`, and `medium`, `large`.++    - Support for radial and linear gradients for fills and strokes.++    - New `DImage` type that supports both embedded and external images in+      Backends that support them.++    - New `lengths` Traversal for setting `headLength` and `tailLength`+      simultaneously.++    - `Frustrum` and `Box` shapes added to `Diagrams.ThreeD.Shapes`.++    - New function `quartForm` to find roots of quartic polynomials.++    - New Lenses for polar coordinates.++    - New trig functions, `sinA`, `atanA`, etc. which take `Angle` as+      input or output.++* **New instances**++    - `Transformable` instances for `LineWidth`, `Dashing`,+      `LineTexture`, and  `FillTexture`.++* **API changes**++    - `FillColor` and `LineColor` attributes have been replaced with+      the more general `FillTexture` and `LineTexture`. Use the `solid`+      function to convert a color to a texture.++    - The size of arrow heads and tails is now specified in terms of+      length instead of the radius of their circumcircle.++    - Gaps at the ends of arrows are now specified using `Measure R2`.++    - The `gap` traversal has been replaced by `gaps` for consistency+      in naming, though `gap` is still provided for backwards compatibility.++    - `fontSize` now takes a value of type `Measure R2`.++    - Get rid of (bitrotted) `Show` backend.++    - Functions in `TwoD.Adjust` now return the adjustment+      transformation itself in addition to the resized `Diagram` and+      `Options` record; this can be used, *e.g.* to convert screen+      coordinates back into diagram coordinates.++    - Export `pathLocSegments`.++    - The `avgScale` function has been moved to `Diagrams.Core`.++    - The `Angle` definition and related functions (*e.g.*+      `angleBetween`) have moved to a separate module, `Diagrams.Angle`.++    - A separate `Diagrams.TwoD.Attributes` module now contains most+      of the attributes that require 2D transformation instances.++    - The `splitColorFills` function has been replaced by `splitTextureFills`.++* **Dependency/version changes**++  - Allow `semigroups-0.15`++  - Allow `opt-parse-applicative-0.9.0++  - Allow `lens-4.2`+ 1.1.0.7 (15 May 2014) ------------------------      - Allow `semigroups-0.14`  1.1.0.6 (10 April 2014)-----------------------+------------------------      - Allow `semigroups-0.13` 
diagrams-lib.cabal view
@@ -1,5 +1,5 @@ Name:                diagrams-lib-Version:             1.1.0.7+Version:             1.2 Synopsis:            Embedded domain-specific language for declarative graphics Description:         Diagrams is a flexible, extensible EDSL for creating                      graphics of many types.  Graphics can be created@@ -28,6 +28,7 @@   Exposed-modules:     Diagrams.Prelude,                        Diagrams.Prelude.ThreeD,                        Diagrams.Align,+                       Diagrams.Angle,                        Diagrams.Combinators,                        Diagrams.Coordinates,                        Diagrams.Attributes,@@ -56,6 +57,7 @@                        Diagrams.TwoD.Align,                        Diagrams.TwoD.Arrow,                        Diagrams.TwoD.Arrowheads,+                       Diagrams.TwoD.Attributes,                        Diagrams.TwoD.Combinators,                        Diagrams.TwoD.Deform,                        Diagrams.TwoD.Transform,@@ -75,6 +77,7 @@                        Diagrams.TwoD.Image,                        Diagrams.TwoD.Adjust,                        Diagrams.ThreeD.Align,+                       Diagrams.ThreeD.Attributes,                        Diagrams.ThreeD.Camera,                        Diagrams.ThreeD.Deform,                        Diagrams.ThreeD.Light,@@ -86,30 +89,31 @@                        Diagrams.Animation,                        Diagrams.Animation.Active,                        Diagrams.Util,-                       Diagrams.Backend.Show,                        Diagrams.Backend.CmdLine   Build-depends:       base >= 4.2 && < 4.8,                        containers >= 0.3 && < 0.6,                        array >= 0.3 && < 0.6,-                       semigroups >= 0.3.4 && < 0.15,+                       semigroups >= 0.3.4 && < 0.16,                        monoid-extras >= 0.3 && < 0.4,-                       diagrams-core >= 1.1 && < 1.2,+                       dual-tree >= 0.2 && < 0.3,+                       diagrams-core >= 1.2 && < 1.3,                        active >= 0.1 && < 0.2,                        vector-space >= 0.7.7 && < 0.9,                        vector-space-points >= 0.1.2 && < 0.3,                        MemoTrie >= 0.6 && < 0.7,                        colour >= 2.3.2 && < 2.4,                        data-default-class < 0.1,-                       pretty >= 1.0.1.2 && < 1.2,                        fingertree >= 0.1 && < 0.2,                        intervals >= 0.7 && < 0.8,-                       lens >= 4.0 && < 4.2,+                       lens >= 4.0 && < 4.3,                        tagged >= 0.7,-                       optparse-applicative >= 0.7 && < 0.9,+                       optparse-applicative >= 0.7 && < 0.10,                        filepath,                        safe >= 0.2 && < 0.4,+                       JuicyPixels >= 3.1.5 && < 3.2,                        hashable >= 1.1 && < 1.3   if impl(ghc < 7.6)     Build-depends: ghc-prim   Hs-source-dirs:      src+  ghc-options: -Wall   default-language:    Haskell2010
diagrams/src_Diagrams_Combinators_appendsEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="200.0" height="182.15600114617723" font-size="1" viewBox="0 0 200 182"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(30.3030303030303,0.0,0.0,30.3030303030303,100.0,91.07800057308862)"><g><g><path d="M 2.0001669752541407,1.732340017192659 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g><g><path d="M -1.669752541431091e-4,1.7323400171926577 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g><g><path d="M -1.0,-7.771561172376096e-16 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g><g><path d="M -1.6697525414155479e-4,-1.7323400171926586 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g><g><path d="M 2.0001669752541424,-1.7323400171926582 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g><g><path d="M 3.0,0.0 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g><g><path d="M 1.0,0.0 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="200.0" height="182.15600114617723" font-size="1" viewBox="0 0 200 182" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.7634783583493163" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><path d="M 160.6111204622467,143.5731526092298 c 0.0,-16.735901510024043 -13.567128793006255,-30.3030303030303 -30.303030303030294 -30.3030303030303c -16.735901510024043,-1.024778410754815e-15 -30.3030303030303,13.567128793006253 -30.3030303030303 30.30303030303029c -2.04955682150963e-15,16.735901510024043 13.567128793006251,30.3030303030303 30.303030303030287 30.3030303030303c 16.735901510024043,3.0743352322644448e-15 30.3030303030303,-13.56712879300625 30.303030303030308 -30.30303030303029Z" /></g><g><path d="M 99.99494014381385,143.57315260922977 c 0.0,-16.735901510024043 -13.567128793006255,-30.3030303030303 -30.303030303030294 -30.3030303030303c -16.735901510024043,-1.024778410754815e-15 -30.3030303030303,13.567128793006253 -30.3030303030303 30.30303030303029c -2.04955682150963e-15,16.735901510024043 13.567128793006251,30.3030303030303 30.303030303030287 30.3030303030303c 16.735901510024043,3.0743352322644448e-15 30.3030303030303,-13.56712879300625 30.303030303030308 -30.30303030303029Z" /></g><g><path d="M 69.6969696969697,91.07800057308859 c 0.0,-16.735901510024043 -13.567128793006255,-30.3030303030303 -30.303030303030294 -30.3030303030303c -16.735901510024043,-1.024778410754815e-15 -30.3030303030303,13.567128793006253 -30.3030303030303 30.30303030303029c -2.04955682150963e-15,16.735901510024043 13.567128793006251,30.3030303030303 30.303030303030287 30.3030303030303c 16.735901510024043,3.0743352322644448e-15 30.3030303030303,-13.56712879300625 30.303030303030308 -30.30303030303029Z" /></g><g><path d="M 99.99494014381389,38.58284853694745 c 0.0,-16.735901510024043 -13.567128793006255,-30.3030303030303 -30.303030303030294 -30.3030303030303c -16.735901510024043,-1.024778410754815e-15 -30.3030303030303,13.567128793006253 -30.3030303030303 30.30303030303029c -2.04955682150963e-15,16.735901510024043 13.567128793006251,30.3030303030303 30.303030303030287 30.3030303030303c 16.735901510024043,3.0743352322644448e-15 30.3030303030303,-13.56712879300625 30.303030303030308 -30.30303030303029Z" /></g><g><path d="M 160.61112046224676,38.58284853694746 c 0.0,-16.735901510024043 -13.567128793006255,-30.3030303030303 -30.303030303030294 -30.3030303030303c -16.735901510024043,-1.024778410754815e-15 -30.3030303030303,13.567128793006253 -30.3030303030303 30.30303030303029c -2.04955682150963e-15,16.735901510024043 13.567128793006251,30.3030303030303 30.303030303030287 30.3030303030303c 16.735901510024043,3.0743352322644448e-15 30.3030303030303,-13.56712879300625 30.303030303030308 -30.30303030303029Z" /></g><g><path d="M 190.9090909090909,91.07800057308862 c 0.0,-16.735901510024043 -13.567128793006255,-30.3030303030303 -30.303030303030294 -30.3030303030303c -16.735901510024043,-1.024778410754815e-15 -30.3030303030303,13.567128793006253 -30.3030303030303 30.30303030303029c -2.04955682150963e-15,16.735901510024043 13.567128793006251,30.3030303030303 30.303030303030287 30.3030303030303c 16.735901510024043,3.0743352322644448e-15 30.3030303030303,-13.56712879300625 30.303030303030308 -30.30303030303029Z" /></g><g><path d="M 130.3030303030303,91.07800057308862 c 0.0,-16.735901510024043 -13.567128793006255,-30.3030303030303 -30.303030303030294 -30.3030303030303c -16.735901510024043,-1.024778410754815e-15 -30.3030303030303,13.567128793006253 -30.3030303030303 30.30303030303029c -2.04955682150963e-15,16.735901510024043 13.567128793006251,30.3030303030303 30.303030303030287 30.3030303030303c 16.735901510024043,3.0743352322644448e-15 30.3030303030303,-13.56712879300625 30.303030303030308 -30.30303030303029Z" /></g></g></g></g></g></svg>
diagrams/src_Diagrams_Combinators_besideEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="169.72067997066802" height="200.0" font-size="1" viewBox="0 0 170 200"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(39.69528724072871,0.0,0.0,39.69528724072871,84.86033998533402,99.99999999999999)"><g><g fill="rgb(128,0,128)" fill-opacity="1.0"><path d="M 1.9434489327457674,-0.7901733991186513 c 0.0,-0.8284271247461902 -0.6715728752538097,-1.5 -1.4999999999999996 -1.5c -0.8284271247461902,-5.072653133236334e-17 -1.5,0.6715728752538096 -1.5 1.4999999999999996c -1.0145306266472669e-16,0.8284271247461902 0.6715728752538095,1.5 1.4999999999999993 1.5c 0.8284271247461902,1.5217959399709003e-16 1.5,-0.6715728752538094 1.5000000000000002 -1.4999999999999996Z" /></g><g fill="rgb(255,165,0)" fill-opacity="1.0"><path d="M 5.655106725423198e-2,1.2901733991186521 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.8518419967810219,1.2901733991186521 c 0.0,-5.05931137120553e-2 -4.101382225269076e-2,-9.160693596474608e-2 -9.160693596474606e-2 -9.160693596474608e-2c -5.05931137120553e-2,-3.0979347383183296e-18 -9.160693596474608e-2,4.1013822252690756e-2 -9.160693596474608e-2 9.160693596474605e-2c -6.195869476636659e-18,5.05931137120553e-2 4.1013822252690756e-2,9.160693596474608e-2 9.160693596474603e-2 9.160693596474608e-2c 5.05931137120553e-2,9.293804214954989e-18 9.160693596474608e-2,-4.101382225269075e-2 9.160693596474609e-2 -9.160693596474605e-2Z" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="169.72067997066802" height="200.0" font-size="1" viewBox="0 0 170 200" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.7369573772655632" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g fill="rgb(128,0,128)" fill-opacity="1.0"><g fill="rgb(128,0,128)" fill-opacity="1.0"><g fill="rgb(128,0,128)" fill-opacity="1.0"><path d="M 162.00610360836492,68.63383995200215 c 0.0,-32.884652674811015 -26.658278186282047,-59.54293086109307 -59.542930861093055 -59.54293086109307c -32.884652674811015,-2.0136042319639878e-15 -59.54293086109307,26.658278186282043 -59.54293086109307 59.54293086109305c -4.0272084639279756e-15,32.884652674811015 26.65827818628204,59.54293086109307 59.54293086109304 59.54293086109307c 32.884652674811015,6.0408126958919634e-15 59.54293086109307,-26.658278186282036 59.54293086109308 -59.54293086109305Z" /></g></g></g><g fill="rgb(255,165,0)" fill-opacity="1.0"><g fill="rgb(255,165,0)" fill-opacity="1.0"><g fill="rgb(255,165,0)" fill-opacity="1.0"><path d="M 87.10515084376053,151.2138036683622 c 0.0,-21.923101783207343 -17.772185457521363,-39.69528724072871 -39.6952872407287 -39.69528724072871c -21.923101783207343,-1.342402821309325e-15 -39.69528724072871,17.77218545752136 -39.69528724072871 39.695287240728696c -2.68480564261865e-15,21.923101783207343 17.77218545752136,39.69528724072871 39.695287240728696 39.69528724072871c 21.923101783207343,4.0272084639279756e-15 39.69528724072871,-17.772185457521356 39.69528724072871 -39.695287240728696Z" /></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><path d="M 51.04622723939545,151.2138036683622 c 0.0,-2.0083081812028856 -1.628055455160751,-3.6363636363636367 -3.6363636363636362 -3.6363636363636367c -2.0083081812028856,-1.2297340929057781e-16 -3.6363636363636367,1.6280554551607507 -3.6363636363636367 3.636363636363636c -2.4594681858115563e-16,2.0083081812028856 1.6280554551607507,3.6363636363636367 3.6363636363636354 3.6363636363636367c 2.0083081812028856,3.689202278717335e-16 3.6363636363636367,-1.6280554551607502 3.636363636363638 -3.636363636363636Z" /></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_Combinators_positionEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="204.25531914893568" height="300.0" font-size="1" viewBox="0 0 204 300"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(31.91489361702117,0.0,0.0,31.91489361702117,102.12765957446776,293.6170212765958)"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 3.2000000000000055,-9.000000000000032 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 3.0000000000000053,-7.840000000000029 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 2.800000000000005,-6.7600000000000255 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 2.600000000000005,-5.760000000000023 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 2.400000000000005,-4.84000000000002 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 2.2000000000000046,-4.000000000000018 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 2.0000000000000044,-3.2400000000000153 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.800000000000004,-2.560000000000013 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.6000000000000039,-1.9600000000000108 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.4000000000000037,-1.440000000000009 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.2000000000000035,-1.000000000000007 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.0000000000000033,-0.6400000000000055 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.8000000000000032,-0.3600000000000038 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.600000000000003,-0.16000000000000242 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.40000000000000285,-4.000000000000114e-2 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.20000000000000268,-7.099748146989106e-30 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 2.4980018054066022e-15,-3.999999999999901e-2 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.19999999999999768,-0.15999999999999814 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.39999999999999786,-0.35999999999999743 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.5999999999999981,-0.6399999999999969 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.7999999999999983,-0.9999999999999964 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.9999999999999984,-1.4399999999999962 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -1.1999999999999986,-1.959999999999996 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -1.3999999999999988,-2.559999999999996 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -1.599999999999999,-3.239999999999996 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -1.7999999999999992,-3.9999999999999964 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -1.9999999999999993,-4.839999999999997 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -2.1999999999999993,-5.759999999999997 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -2.3999999999999995,-6.759999999999998 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -2.5999999999999996,-7.839999999999999 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -2.8,-9.0 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="204.25531914893568" height="300.0" font-size="1" viewBox="0 0 204 300" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.9901643964084406" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 204.25531914893565,6.3829787234042215 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 197.87234042553143,43.40425531914886 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 191.48936170212718,77.87234042553186 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 185.10638297872293,109.78723404255311 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 178.7234042553187,139.14893617021266 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 172.34042553191446,165.95744680851053 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 165.9574468085102,190.2127659574467 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 159.574468085106,211.91489361702116 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 153.19148936170174,231.06382978723394 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 146.8085106382975,247.659574468085 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 140.42553191489327,261.7021276595744 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 134.04255319148902,273.19148936170205 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 127.6595744680848,282.12765957446805 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 121.27659574468056,288.51063829787233 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 114.89361702127631,292.3404255319149 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 108.51063829787208,293.6170212765958 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 102.12765957446784,292.34042553191495 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 95.74468085106359,288.51063829787245 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 89.36170212765936,282.1276595744682 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 82.97872340425512,273.19148936170234 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 76.59574468085087,261.7021276595747 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 70.21276595744663,247.65957446808542 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 63.8297872340424,231.0638297872344 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 57.44680851063816,211.9148936170217 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 51.06382978723392,190.2127659574473 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 44.68085106382968,165.9574468085112 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 38.29787234042544,139.1489361702134 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 31.914893617021193,109.78723404255393 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 25.531914893616957,77.87234042553271 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 19.14893617021272,43.404255319149826 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 12.765957446808471,6.382978723405245 c 0.0,-3.525221807430585 -2.857756915973649,-6.382978723404235 -6.382978723404233 -6.382978723404235c -3.525221807430585,-2.1585758013771565e-16 -6.382978723404235,2.8577569159736487 -6.382978723404235 6.382978723404233c -4.317151602754313e-16,3.525221807430585 2.8577569159736482,6.382978723404235 6.382978723404232 6.382978723404235c 3.525221807430585,6.47572740413147e-16 6.382978723404235,-2.857756915973648 6.382978723404236 -6.382978723404233Z" /></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_Combinators_strutEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="119.99999999999999" font-size="1" viewBox="0 0 300 120"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(54.54545454545455,0.0,0.0,54.54545454545455,150.0,59.99999999999999)"><g><g><path d="M 2.5,1.1102230246251565e-16 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g><g></g><g><path d="M -0.5000000000000002,1.1102230246251565e-16 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="119.99999999999999" font-size="1" viewBox="0 0 300 120" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.758946638440411" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><path d="M 286.3636363636364,60.0 c 0.0,-30.12462271804328 -24.42083182741126,-54.54545454545455 -54.54545454545453 -54.54545454545455c -30.12462271804328,-1.844601139358667e-15 -54.54545454545455,24.42083182741126 -54.54545454545455 54.545454545454525c -3.689202278717334e-15,30.12462271804328 24.420831827411256,54.54545454545455 54.545454545454525 54.54545454545455c 30.12462271804328,5.533803418076001e-15 54.54545454545455,-24.420831827411252 54.545454545454554 -54.545454545454525Z" /></g><g></g><g><path d="M 122.72727272727272,60.0 c 0.0,-30.12462271804328 -24.42083182741126,-54.54545454545455 -54.54545454545453 -54.54545454545455c -30.12462271804328,-1.844601139358667e-15 -54.54545454545455,24.42083182741126 -54.54545454545455 54.545454545454525c -3.689202278717334e-15,30.12462271804328 24.420831827411256,54.54545454545455 54.545454545454525 54.54545454545455c 30.12462271804328,5.533803418076001e-15 54.54545454545455,-24.420831827411252 54.545454545454554 -54.545454545454525Z" /></g></g></g></g></g></svg>
diagrams/src_Diagrams_Combinators_withEnvelopeEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="166.66666666666669" font-size="1" viewBox="0 0 300 167"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(55.555555555555564,0.0,0.0,55.555555555555564,150.0,83.33333333333334)"><g><g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 2.0,1.0 l -2.220446049250313e-16,-2.0 h -2.0 l -2.220446049250313e-16,2.0 h 2.0 Z" /></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 1.7999999999999998,1.1102230246251565e-16 c 0.0,-0.4418277998646348 -0.35817220013536516,-0.8 -0.7999999999999998 -0.8c -0.4418277998646348,-2.7054150043927117e-17 -0.8,0.3581722001353651 -0.8 0.7999999999999998c -5.4108300087854235e-17,0.4418277998646348 0.3581722001353651,0.8 0.7999999999999997 0.8c 0.4418277998646348,8.116245013178136e-17 0.8,-0.35817220013536505 0.8000000000000002 -0.7999999999999998Z" /></g></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 0.19999999999999996,1.1102230246251565e-16 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.5522847498307935,-3.3817687554908895e-17 -1.0,0.4477152501692064 -1.0 0.9999999999999997c -6.763537510981779e-17,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.5522847498307935,1.0145306266472669e-16 1.0,-0.44771525016920627 1.0000000000000002 -0.9999999999999997Z" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="166.66666666666669" font-size="1" viewBox="0 0 300 167" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.894427190999916" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 261.11111111111114,138.8888888888889 l -1.2335811384723963e-14,-111.11111111111113 h -111.11111111111113 l -1.2335811384723963e-14,111.11111111111113 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"></g></g></g></g></g></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" stroke-dasharray="5.555555555555557,5.555555555555557" stroke-dashoffset="0.0"><path d="M 250.0,83.33333333333334 c 0.0,-24.545988881368604 -19.898455563075846,-44.44444444444446 -44.44444444444445 -44.44444444444446c -24.545988881368604,-1.503008335773729e-15 -44.44444444444446,19.898455563075846 -44.44444444444446 44.44444444444444c -3.006016671547458e-15,24.545988881368604 19.898455563075842,44.44444444444446 44.444444444444436 44.44444444444446c 24.545988881368604,4.509025007321188e-15 44.44444444444446,-19.89845556307584 44.44444444444448 -44.44444444444444Z" /></g></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 161.11111111111111,83.33333333333334 c 0.0,-30.68248610171075 -24.873069453844806,-55.555555555555564 -55.55555555555555 -55.555555555555564c -30.68248610171075,-1.878760419717161e-15 -55.555555555555564,24.873069453844803 -55.555555555555564 55.55555555555554c -3.757520839434322e-15,30.68248610171075 24.8730694538448,55.555555555555564 55.55555555555554 55.555555555555564c 30.68248610171075,5.636281259151484e-15 55.555555555555564,-24.873069453844796 55.55555555555557 -55.55555555555554Z" /></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_CubicSpline_cubicSplineEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600.0" height="150.9864382575878" font-size="1" viewBox="0 0 600 151"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(25.279963015185068,0.0,0.0,25.279963015185068,300.0,75.4932191287939)"><g><g><g stroke-width="5.0e-2"><path d="M 5.30560144347186,0.514806155640732 c -0.27272727272727276,-0.27272727272727276 0.27272727272727276,-3.3636363636363633 2.0 -2.999999999999999c 1.727272727272727,0.36363636363636376 4.636363636363636,4.181818181818182 3.0 4.999999999999998c -1.6363636363636362,0.8181818181818183 -7.818181818181818,-1.3636363636363633 -8.999999999999998 -3.0c -1.1818181818181825,-1.6363636363636367 2.636363636363636,-2.727272727272727 4.000000000000001 -1.9999999999999996c 1.363636363636364,0.7272727272727271 0.27272727272727276,3.272727272727273 -2.6645352591003757e-15 3.000000000000001Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 5.5056014434718605,-2.485193844359268 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 1.5056014434718603,-0.48519384435926804 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 10.50560144347186,2.514806155640732 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 7.5056014434718605,-2.485193844359268 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 5.5056014434718605,0.514806155640732 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g></g><g></g><g fill-opacity="0.0" stroke-width="5.0e-2"><path d="M -6.333419254268965,0.514806155640732 c 0.2142857142857144,-1.9107142857142858 0.4285714285714288,-3.8214285714285716 2.0 -3.0c 1.5714285714285712,0.8214285714285716 4.5,4.375 2.999999999999999 5.0c -1.5,0.625 -7.428571428571427,-1.6785714285714282 -9.0 -2.999999999999999c -1.571428571428572,-1.3214285714285716 1.214285714285714,-1.660714285714286 4.0 -2.0" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -6.133419254268965,-2.485193844359268 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -10.133419254268965,-0.48519384435926804 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -1.1334192542689652,2.514806155640732 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -4.133419254268965,-2.485193844359268 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -6.133419254268965,0.514806155640732 c 0.0,-0.1104569499661587 -8.954305003384129e-2,-0.2 -0.19999999999999996 -0.2c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996c -1.3527075021963559e-17,0.1104569499661587 8.954305003384128e-2,0.2 0.19999999999999993 0.2c 0.1104569499661587,2.029061253294534e-17 0.2,-8.954305003384126e-2 0.20000000000000004 -0.19999999999999996Z" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600.0" height="150.9864382575878" font-size="1" viewBox="0 0 600 151" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.2039392872038202" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><path d="M 434.12540826428113,88.50749970338121 c -6.894535367777746,-6.894535367777746 6.894535367777746,-85.03260286925885 50.559926030370136 -75.83988904555518c 43.66539066259239,9.192713823703665 117.20710125222166,105.7162089725921 75.8398890455552 126.39981507592529c -41.36721220666647,20.68360610333324 -197.64334720962873,-34.472676838888724 -227.51966713666556 -75.8398890455552c -29.876319927036917,-41.36721220666648 66.64717522185153,-68.94535367777745 101.1198520607403 -50.55992603037012c 34.47267683888874,18.385427647407315 6.894535367777746,82.73442441333296 -7.105427357601002e-14 75.83988904555521Z" /><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 439.18140086731813,12.667610657826017 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 338.0615488065779,63.227536688196146 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 565.5812159432435,139.06742573375135 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 489.7413268976883,12.667610657826017 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 439.18140086731813,88.50749970338121 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g></g><g></g><path d="M 139.89139549241958,88.50749970338121 c 5.417134931825375,-48.3027864754429 10.83426986365075,-96.6055729508858 50.559926030370136 -75.8398890455552c 39.72565616671939,20.765683905330597 113.75983356833281,110.59983819143467 75.83988904555518 126.39981507592535c -37.9199445227776,15.799976884490668 -187.79401096994619,-42.43422363263207 -227.51966713666562 -75.83988904555518c -39.72565616671941,-33.40566541292313 30.69709794701043,-41.98279572164664 101.11985206074027 -50.559926030370136" /><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 144.9473880954566,12.667610657826017 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 43.82753603471632,63.227536688196146 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 271.3472031713819,139.06742573375135 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 195.50731412582675,12.667610657826017 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 144.9473880954566,88.50749970338121 c 0.0,-2.7923476099146396 -2.263644993122374,-5.055992603037014 -5.055992603037013 -5.055992603037014c -2.7923476099146396,-1.7098197812943627e-16 -5.055992603037014,2.2636449931223734 -5.055992603037014 5.055992603037012c -3.4196395625887253e-16,2.7923476099146396 2.2636449931223734,5.055992603037014 5.055992603037011 5.055992603037014c 2.7923476099146396,5.129459343883088e-16 5.055992603037014,-2.263644993122373 5.055992603037017 -5.055992603037012Z" /></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TrailLike_explodeTrailEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="285.31695488854604" font-size="1" viewBox="0 0 300 285"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(168.5547242045168,0.0,0.0,168.5547242045168,150.0,142.65847744427302)"><g fill-opacity="0.0"><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -0.49999999999999956,0.7694208842938132 l 0.9999999999999996,1.1102230246251565e-16 " /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -0.8090169943749475,-0.18163563200134014 l 0.3090169943749479,0.9510565162951533 " /></g><g stroke="rgb(255,255,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -1.1102230246251565e-16,-0.7694208842938133 l -0.8090169943749473,0.5877852522924731 " /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 0.8090169943749473,-0.18163563200134036 l -0.8090169943749475,-0.5877852522924729 " /></g><g stroke="rgb(255,165,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 0.5000000000000002,0.7694208842938133 l 0.3090169943749471,-0.9510565162951536 " /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="285.3169548885461" font-size="1" viewBox="0 0 300 285" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.1702655183611206" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g stroke="rgb(0,0,255)" stroke-opacity="1.0"><path d="M 65.72263789774158,272.34800239361215 l 168.5547242045168,-1.871333357211977e-14 " /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 13.636363636363626,112.04293358657401 l 52.086274261377966,160.30506880703814 " /></g><g stroke="rgb(255,255,0)" stroke-opacity="1.0"><path d="M 150.0,12.968952494933887 l -136.36363636363637,99.0739810916401 " /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 286.3636363636364,112.04293358657402 l -136.36363636363635,-99.07398109164014 " /></g><g stroke="rgb(255,165,0)" stroke-opacity="1.0"><path d="M 234.2773621022584,272.34800239361215 l 52.086274261377966,-160.30506880703814 " /></g></g></g></g></g></svg>
diagrams/src_Diagrams_TrailLike_fromOffsetsEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="86.60254037844385" font-size="1" viewBox="0 0 300 87"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(90.9090909090909,0.0,0.0,90.9090909090909,150.0,43.301270189221924)"><g fill-opacity="0.0"><path d="M -1.5,0.4330127018922193 h 1.0 l 0.5000000000000001,-0.8660254037844386 l 0.5000000000000001,0.8660254037844386 h 1.0 " /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="86.60254037844385" font-size="1" viewBox="0 0 300 87" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.644741959094125" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><path d="M 13.636363636363626,82.66606127033276 h 90.9090909090909 l 45.45454545454546,-78.72958216222169 l 45.45454545454546,78.72958216222169 h 90.9090909090909 " /></g></g></g></g></svg>
diagrams/src_Diagrams_TrailLike_fromSegmentsEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="247.48737341529161" height="200.00000000000003" font-size="1" viewBox="0 0 247 200"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(128.564869306645,0.0,0.0,128.564869306645,123.74368670764581,100.00000000000001)"><g fill-opacity="0.0"><path d="M -0.875,0.7071067811865476 l 1.0,-1.0 c 1.0,-1.0 1.0,0.0 0.0 1.0h -1.0 " /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="247.48737341529161" height="200.00000000000003" font-size="1" viewBox="0 0 247 200" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.8899211172508118" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><path d="M 11.249426064331445,190.90909090909093 l 128.564869306645,-128.564869306645 c 128.564869306645,-128.564869306645 128.564869306645,0.0 0.0 128.564869306645h -128.564869306645 " /></g></g></g></g></svg>
diagrams/src_Diagrams_TrailLike_fromVerticesEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="305.02203183512904" font-size="1" viewBox="0 0 300 305"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(114.88022467370443,0.0,0.0,114.88022467370443,150.0,152.51101591756452)"><g><path d="M 0.41802076667285704,0.6469755613042312 l 0.457690772717425,-0.1352679348067608 l 0.311295508610812,-0.4195471927671871 l -0.45996928695328987,-0.39624138872120573 l 1.2786776094528052e-2,-0.47708988249036255 l -0.3028174891412384,-0.4257068344650894 l -0.5189862813282371,0.315011464662979 l -0.44978811048447176,-0.15958982826097634 l -0.49844700928799934,0.1564458998246363 l 0.13921812539752376,0.5909291807288132 l -0.29077111610952444,0.3784579443663209 l -5.239704189479388e-3,0.5223957179572758 l 0.6050278146739517,5.020285397155655e-2 l 0.2700816777820438,0.3934897011917795 l 0.49520869400790596,0.16641240945036362 l 0.2347096282100502,-0.5599021106421431 Z" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="305.0220318351292" font-size="1" viewBox="0 0 300 305" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.21000237719131" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><path d="M 198.02231959365204,226.8357137585907 l 52.57961880085914,-15.539610741748685 l 35.761697969125166,-48.197675766316436 l -52.84137502819749,-45.52029976131276 l 1.4689477105917228,-54.80819289004408 l -34.78774118767253,-48.905296788481024 l -59.62126060155821,36.18858783527575 l -51.671759188017134,-18.33371532625888 l -57.261704414941406,17.972540121134063 l 15.9934095243195,67.88607704837416 l -33.40385114728599,43.47733367835122 l -0.601938394511168,60.012937447513 l 69.50573128358397,5.767315143513668 l 31.02704382385218,45.20418527970044 l 56.88968602799999,19.11749498615032 Z" /></g></g></g></g></svg>
diagrams/src_Diagrams_TrailLike_twiddleEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="259.80762113533166" font-size="1" viewBox="0 0 300 260"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(136.36363636363635,0.0,0.0,136.36363636363635,150.0,129.90381056766583)"><g fill-opacity="0.0"><path d="M -0.5000000000000007,0.8660254037844385 h 0.0 " /><path d="M -0.5000000000000007,0.8660254037844385 l -0.49999999999999933,-0.866025403784439 " /><path d="M -0.5000000000000007,0.8660254037844385 l 9.992007221626409e-16,-1.7320508075688774 " /><path d="M -0.5000000000000007,0.8660254037844385 l 1.0000000000000009,-1.732050807568877 " /><path d="M -0.5000000000000007,0.8660254037844385 l 1.5000000000000004,-0.8660254037844382 " /><path d="M -0.5000000000000007,0.8660254037844385 l 1.0000000000000004,3.3306690738754696e-16 " /><path d="M -1.0,-5.551115123125783e-16 l 0.49999999999999933,0.866025403784439 " /><path d="M -1.0,-5.551115123125783e-16 h 0.0 " /><path d="M -1.0,-5.551115123125783e-16 l 0.5000000000000003,-0.8660254037844384 " /><path d="M -1.0,-5.551115123125783e-16 l 1.5000000000000002,-0.8660254037844379 " /><path d="M -1.0,-5.551115123125783e-16 l 2.0,8.881784197001252e-16 " /><path d="M -1.0,-5.551115123125783e-16 l 1.4999999999999996,0.8660254037844394 " /><path d="M -0.49999999999999967,-0.8660254037844389 l -9.992007221626409e-16,1.7320508075688774 " /><path d="M -0.49999999999999967,-0.8660254037844389 l -0.5000000000000003,0.8660254037844384 " /><path d="M -0.49999999999999967,-0.8660254037844389 h 0.0 " /><path d="M -0.49999999999999967,-0.8660254037844389 l 0.9999999999999999,4.440892098500626e-16 " /><path d="M -0.49999999999999967,-0.8660254037844389 l 1.4999999999999996,0.8660254037844393 " /><path d="M -0.49999999999999967,-0.8660254037844389 l 0.9999999999999993,1.7320508075688776 " /><path d="M 0.5000000000000002,-0.8660254037844385 l -1.0000000000000009,1.732050807568877 " /><path d="M 0.5000000000000002,-0.8660254037844385 l -1.5000000000000002,0.8660254037844379 " /><path d="M 0.5000000000000002,-0.8660254037844385 l -0.9999999999999999,-4.440892098500626e-16 " /><path d="M 0.5000000000000002,-0.8660254037844385 h 0.0 " /><path d="M 0.5000000000000002,-0.8660254037844385 l 0.49999999999999967,0.8660254037844388 " /><path d="M 0.5000000000000002,-0.8660254037844385 l -5.551115123125783e-16,1.7320508075688772 " /><path d="M 0.9999999999999999,3.3306690738754696e-16 l -1.5000000000000004,0.8660254037844382 " /><path d="M 0.9999999999999999,3.3306690738754696e-16 l -2.0,-8.881784197001252e-16 " /><path d="M 0.9999999999999999,3.3306690738754696e-16 l -1.4999999999999996,-0.8660254037844393 " /><path d="M 0.9999999999999999,3.3306690738754696e-16 l -0.49999999999999967,-0.8660254037844388 " /><path d="M 0.9999999999999999,3.3306690738754696e-16 h 0.0 " /><path d="M 0.9999999999999999,3.3306690738754696e-16 l -0.5000000000000002,0.8660254037844385 " /><path d="M 0.49999999999999967,0.8660254037844388 l -1.0000000000000004,-3.3306690738754696e-16 " /><path d="M 0.49999999999999967,0.8660254037844388 l -1.4999999999999996,-0.8660254037844394 " /><path d="M 0.49999999999999967,0.8660254037844388 l -0.9999999999999993,-1.7320508075688776 " /><path d="M 0.49999999999999967,0.8660254037844388 l 5.551115123125783e-16,-1.7320508075688772 " /><path d="M 0.49999999999999967,0.8660254037844388 l 0.5000000000000002,-0.8660254037844385 " /><path d="M 0.49999999999999967,0.8660254037844388 h 0.0 " /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="259.80762113533166" font-size="1" viewBox="0 0 300 260" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.1167258309225196" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><path d="M 81.81818181818174,247.99818381099834 h 0.0 " /><path d="M 81.81818181818174,247.99818381099834 l -68.18181818181809,-118.09437324333258 " /><path d="M 81.81818181818174,247.99818381099834 l 1.3625464393126918e-13,-236.18874648666508 " /><path d="M 81.81818181818174,247.99818381099834 l 136.36363636363646,-236.188746486665 " /><path d="M 81.81818181818174,247.99818381099834 l 204.5454545454546,-118.09437324333246 " /><path d="M 81.81818181818174,247.99818381099834 l 136.3636363636364,4.5418214643756395e-14 " /><path d="M 13.636363636363654,129.90381056766577 l 68.18181818181809,118.09437324333258 " /><path d="M 13.636363636363654,129.90381056766577 h 0.0 " /><path d="M 13.636363636363654,129.90381056766577 l 68.18181818181822,-118.09437324333248 " /><path d="M 13.636363636363654,129.90381056766577 l 204.54545454545456,-118.09437324333243 " /><path d="M 13.636363636363654,129.90381056766577 l 272.7272727272727,1.2111523905001706e-13 " /><path d="M 13.636363636363654,129.90381056766577 l 204.54545454545445,118.09437324333263 " /><path d="M 81.81818181818187,11.809437324333274 l -1.3625464393126918e-13,236.18874648666508 " /><path d="M 81.81818181818187,11.809437324333274 l -68.18181818181822,118.09437324333248 " /><path d="M 81.81818181818187,11.809437324333274 h 0.0 " /><path d="M 81.81818181818187,11.809437324333274 l 136.36363636363632,6.055761952500853e-14 " /><path d="M 81.81818181818187,11.809437324333274 l 204.54545454545445,118.09437324333261 " /><path d="M 81.81818181818187,11.809437324333274 l 136.36363636363626,236.1887464866651 " /><path d="M 218.1818181818182,11.80943732433333 l -136.36363636363646,236.188746486665 " /><path d="M 218.1818181818182,11.80943732433333 l -204.54545454545456,118.09437324333243 " /><path d="M 218.1818181818182,11.80943732433333 l -136.36363636363632,-6.055761952500853e-14 " /><path d="M 218.1818181818182,11.80943732433333 h 0.0 " /><path d="M 218.1818181818182,11.80943732433333 l 68.18181818181813,118.09437324333256 " /><path d="M 218.1818181818182,11.80943732433333 l -7.569702440626067e-14,236.18874648666505 " /><path d="M 286.3636363636363,129.9038105676659 l -204.5454545454546,118.09437324333246 " /><path d="M 286.3636363636363,129.9038105676659 l -272.7272727272727,-1.2111523905001706e-13 " /><path d="M 286.3636363636363,129.9038105676659 l -204.54545454545445,-118.09437324333261 " /><path d="M 286.3636363636363,129.9038105676659 l -68.18181818181813,-118.09437324333256 " /><path d="M 286.3636363636363,129.9038105676659 h 0.0 " /><path d="M 286.3636363636363,129.9038105676659 l -68.1818181818182,118.0943732433325 " /><path d="M 218.18181818181813,247.9981838109984 l -136.3636363636364,-4.5418214643756395e-14 " /><path d="M 218.18181818181813,247.9981838109984 l -204.54545454545445,-118.09437324333263 " /><path d="M 218.18181818181813,247.9981838109984 l -136.36363636363626,-236.1887464866651 " /><path d="M 218.18181818181813,247.9981838109984 l 7.569702440626067e-14,-236.18874648666505 " /><path d="M 218.18181818181813,247.9981838109984 l 68.1818181818182,-118.0943732433325 " /><path d="M 218.18181818181813,247.9981838109984 h 0.0 " /></g></g></g></g></svg>
diagrams/src_Diagrams_Trail_closeLineEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="500.0" height="68.18181818181819" font-size="1" viewBox="0 0 500 68"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(41.32231404958678,0.0,0.0,41.32231404958678,250.0,34.09090909090909)"><g fill-opacity="0.0"><g><path d="M 3.5,-0.75 l 2.0,1.0 l -3.0,0.5 l -2.0,-1.0 l 1.0,-0.5 h 2.0 Z" /></g><path d="M -2.5,-0.75 l 2.0,1.0 l -3.0,0.5 l -2.0,-1.0 l 1.0,-0.5 " /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="500.0" height="68.18181818181819" font-size="1" viewBox="0 0 500 68" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.7385489458759964" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><path d="M 394.6280991735537,3.099173553719009 l 82.64462809917356,41.32231404958678 l -123.96694214876034,20.66115702479339 l -82.64462809917356,-41.32231404958678 l 41.32231404958678,-20.66115702479339 Z" /></g><path d="M 146.69421487603304,3.099173553719009 l 82.64462809917356,41.32231404958678 l -123.96694214876034,20.66115702479339 l -82.64462809917356,-41.32231404958678 l 41.32231404958678,-20.66115702479339 " /></g></g></g></g></svg>
diagrams/src_Diagrams_Trail_glueLineEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="500.0" height="68.18181818181819" font-size="1" viewBox="0 0 500 68"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(41.32231404958677,0.0,0.0,41.32231404958677,136.36363636363637,0.0)"><g><path d="M 6.0,0.0 l 2.0,1.0 l -3.0,0.5 l -2.0,-1.0 l 3.0,-0.5 Z" /></g><path d="M 0.0,0.0 l 2.0,1.0 l -3.0,0.5 l -2.0,-1.0 l 1.0,-0.5 " /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="500.0" height="68.18181818181819" font-size="1" viewBox="0 0 500 68" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.7385489458759964" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><path d="M 384.297520661157,0.0 l 82.64462809917354,41.32231404958677 l -123.96694214876032,20.661157024793386 l -82.64462809917354,-41.32231404958677 Z" /></g><path d="M 136.36363636363637,0.0 l 82.64462809917354,41.32231404958677 l -123.96694214876032,20.661157024793386 l -82.64462809917354,-41.32231404958677 l 41.32231404958677,-20.661157024793386 " /></g></g></g></svg>
diagrams/src_Diagrams_Trail_lineFromOffsetsEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="50.0" font-size="1" viewBox="0 0 300 50"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(50.0,0.0,0.0,50.0,0.0,50.0)"><path d="M 0.0,0.0 l 2.0,-1.0 l 2.0,1.0 l 2.0,-0.5 " /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="50.0" font-size="1" viewBox="0 0 300 50" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 0.0,50.0 l 100.0,-50.0 l 100.0,50.0 l 100.0,-25.0 " /></g></g></g></svg>
diagrams/src_Diagrams_Trail_lineFromVerticesEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="120.00000000000001" font-size="1" viewBox="0 0 300 120"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(54.54545454545455,0.0,0.0,54.54545454545455,150.0,60.00000000000001)"><g fill-opacity="0.0"><path d="M -2.5,1.0 v -1.0 l 1.0,-1.0 l 4.0,1.0 " /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="120.00000000000001" font-size="1" viewBox="0 0 300 120" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.7589466384404111" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><path d="M 13.636363636363626,114.54545454545456 v -54.54545454545455 l 54.54545454545455,-54.54545454545455 l 218.1818181818182,54.54545454545455 " /></g></g></g></g></svg>
diagrams/src_Diagrams_Trail_trailOffsetEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="90.00000000000001" font-size="1" viewBox="0 0 300 90"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(54.54545454545455,0.0,0.0,54.54545454545455,150.0,45.00000000000001)"><g fill-opacity="0.0"><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="5.0e-2"><path d="M 0.5,-0.75 h -2.0 " /></g><path d="M 0.5,-0.75 l 2.0,1.0 l -3.0,0.5 l -2.0,-1.0 l 1.0,-0.5 " /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="90.00000000000001" font-size="1" viewBox="0 0 300 90" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.6572670690061994" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 177.27272727272728,4.090909090909101 h -109.0909090909091 " /></g><path d="M 177.27272727272728,4.090909090909101 l 109.0909090909091,54.54545454545455 l -163.63636363636363,27.272727272727273 l -109.0909090909091,-54.54545454545455 l 54.54545454545455,-27.272727272727273 " /></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arc_annularWedgeEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="178.54130895779457" font-size="1" viewBox="0 0 400 179"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(81.15495782275252,0.0,0.0,81.15495782275252,200.0,89.27065447889727)"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g><path d="M 2.0282508910505657,-0.49497249665864596 l 0.2121320343559643,-0.21213203435596428 c -0.39052429175126996,-0.39052429175127 -1.023689270621825,-0.3905242917512702 -1.414213562373095 -2.220446049250313e-16c -0.39052429175127,0.39052429175126996 -0.3905242917512702,1.023689270621825 -3.3306690738754696e-16 1.414213562373095c 0.3905242917512699,0.39052429175127007 1.0236892706218248,0.39052429175127024 1.4142135623730947 4.440892098500626e-16l -0.21213203435596423,-0.21213203435596434 c -0.2733670042258889,0.27336700422588883 -0.7165824894352774,0.2733670042258887 -0.9899494936611662 -3.108624468950438e-16c -0.2733670042258889,-0.2733670042258889 -0.2733670042258888,-0.7165824894352775 2.3314683517128283e-16 -0.9899494936611664c 0.2733670042258889,-0.27336700422588894 0.7165824894352775,-0.27336700422588883 0.9899494936611667 1.1102230246251565e-16Z" /></g><g><path d="M -3.989378006737523e-2,-0.29835431843854476 l 7.316992428735741e-2,-0.6961653267577913 c -0.28185620611337825,-2.9624280998431504e-2 -0.5630453243913867,6.173960189645773e-2 -0.7736590696265117 0.25137706989087893l 0.4683914244512005,0.5202013778341761 c 6.31841235705375e-2,-5.689124039832636e-2 0.14754085905394002,-8.430040526679312e-2 0.23209772088795366 -7.541312096726371e-2Z" /></g><path d="M -1.7403829254065295,2.250171937223655e-6 h 0.5 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0l -3.061616997868383e-17,0.5 c 0.27614237491539667,0.0 0.4999999999999999,0.22385762508460327 0.49999999999999983 0.5Z" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="178.54130895779457" font-size="1" viewBox="0 0 400 179" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.0689548060277785" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 364.6026155171688,49.10118238914234 l 17.215566301012974,-17.21556630101297 c -31.692982425834614,-31.692982425834618 -83.0774595809185,-31.692982425834632 -114.77044200675311 -1.8020020547460663e-14c -31.692982425834618,31.692982425834614 -31.692982425834632,83.0774595809185 -2.7030030821190994e-14 114.77044200675311c 31.69298242583461,31.69298242583462 83.07745958091849,31.692982425834636 114.77044200675309 3.6040041094921325e-14l -17.215566301012966,-17.215566301012974 c -22.185087698084224,22.185087698084217 -58.154221706642936,22.18508769808421 -80.33930940472716 -2.5228028766444926e-14c -22.185087698084224,-22.185087698084224 -22.185087698084214,-58.15422170664295 1.8921021574833692e-14 -80.33930940472717c 22.185087698084224,-22.185087698084228 58.15422170664295,-22.185087698084217 80.3393094047272 1.4210854715202004e-14Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 196.76242196124196,65.05772234978109 l 5.938102119434486,-56.49726773069128 c -22.87402851921224,-2.4041572749570763 -45.693919553281,5.0104747879005584 -62.78626916472949 20.400495504601384l 38.01228629587615,42.21692087747031 c 5.127704883434549,-4.617006215010248 11.973672193655174,-6.841395833867538 18.83588074941885 -6.120148651380411Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 58.75929709319445,89.27083709150592 h 40.57747891137626 c 0.0,-44.820645578667474 -36.33431224408504,-81.15495782275252 -81.15495782275251 -81.15495782275252l -2.4846539833143083e-15,40.57747891137626 c 22.41032278933373,0.0 40.577478911376254,18.167156122042524 40.57747891137625 40.57747891137626Z" /></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arc_arc'Ex.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="299.99999999999994" font-size="1" viewBox="0 0 300 300"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(109.09090909090911,0.0,0.0,109.09090909090911,150.0,149.99999999999997)"><g fill-opacity="0.0"><path d="M 1.2499999999999998,0.25000000000000033 c 0.0,-0.8284271247461902 -0.6715728752538097,-1.5 -1.4999999999999996 -1.5" /><path d="M 0.7499999999999998,0.25000000000000033 c 0.0,0.5522847498307932 -0.44771525016920655,0.9999999999999996 -1.0 0.9999999999999994c -0.5522847498307932,0.0 -0.9999999999999997,-0.44771525016920655 -0.9999999999999996 -1.0c 0.0,-0.5522847498307932 0.44771525016920655,-0.9999999999999997 1.0 -0.9999999999999997" /><path d="M 0.24999999999999978,0.25000000000000033 c 0.0,-0.2761423749153967 -0.22385762508460322,-0.5 -0.4999999999999999 -0.5" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="299.99999999999994" font-size="1" viewBox="0 0 300 300" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><path d="M 286.3636363636364,177.27272727272728 c 0.0,-90.37386815412985 -73.2624954822338,-163.63636363636365 -163.63636363636363 -163.63636363636365" /><path d="M 231.8181818181818,177.27272727272728 c 0.0,60.24924543608655 -48.84166365482254,109.09090909090907 -109.09090909090911 109.09090909090905c -60.24924543608655,0.0 -109.09090909090907,-48.84166365482254 -109.09090909090907 -109.09090909090911c 0.0,-60.24924543608655 48.84166365482254,-109.09090909090907 109.09090909090911 -109.09090909090907" /><path d="M 177.27272727272725,177.27272727272728 c 0.0,-30.124622718043284 -24.420831827411263,-54.545454545454554 -54.54545454545454 -54.545454545454554" /></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arc_arcBetweenEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="149.99999999999991" font-size="1" viewBox="0 0 300 150"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(136.363636363636,0.0,0.0,136.363636363636,150.0,74.99999999999997)"><g fill-opacity="0.0"><path d="M -0.9999999999999991,0.4999999999999992 c 0.5260763745333457,-0.5611805842666443 1.2354097078666786,-0.9158472509333104 2.0000000000000013 -0.9999999999999992" /><path d="M -0.9999999999999979,0.5000000000000004 c 0.6017048539333386,-0.44992362546665604 1.2790381872666725,-0.7885902921333223 2.0000000000000004 -0.9999999999999998" /><path d="M -0.9999999999999987,0.5 l 2.0000000000000004,-0.9999999999999999 " /><path d="M -1.0000000000000027,0.500000000000001 c 0.720961812733329,-0.21140970786667745 1.3982951460666655,-0.5500763745333455 2.000000000000005 -1.000000000000002" /><path d="M -0.9999999999999994,0.5000000000000004 c 0.7645902921333227,-8.415274906668882e-2 1.4739236254666557,-0.4388194157333549 2.0000000000000013 -0.999999999999999" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="150.0" font-size="1" viewBox="0 0 300 150" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.8485281374238571" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><path d="M 13.636363636364111,143.18181818181793 c 71.7376874363651,-76.52462512726947 168.46496016363756,-124.88826149090566 272.7272727272722 -136.36363636363595" /><path d="M 13.636363636364266,143.1818181818181 c 82.05066190000052,-61.353221654543866 174.4142982636367,-107.53503983636188 272.72727272727207 -136.363636363636" /><path d="M 13.636363636364166,143.18181818181804 l 272.72727272727207,-136.36363636363603 " /><path d="M 13.636363636363624,143.1818181818182 c 98.31297446363554,-28.82859652727414 190.67661082727207,-75.01041470909239 272.72727272727275 -136.36363636363635" /><path d="M 13.636363636364058,143.1818181818181 c 104.26231256363465,-11.475374872730281 200.9895852909071,-59.83901123636646 272.7272727272722 -136.36363636363592" /></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arc_wedgeEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="178.54130895779457" font-size="1" viewBox="0 0 400 179"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(81.15495782275252,0.0,0.0,81.15495782275252,200.0,89.27065447889727)"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g><path d="M 1.5332761442199825,2.250171937223655e-6 l 0.7071067811865476,-0.7071067811865475 c -0.39052429175126996,-0.39052429175127 -1.023689270621825,-0.3905242917512702 -1.414213562373095 -2.220446049250313e-16c -0.39052429175127,0.39052429175126996 -0.3905242917512702,1.023689270621825 -3.3306690738754696e-16 1.414213562373095c 0.3905242917512699,0.39052429175127007 1.0236892706218248,0.39052429175127024 1.4142135623730947 4.440892098500626e-16l -0.707106781186547,-0.7071067811865477 Z" /></g><g><path d="M -7.125231904767126e-2,2.250171937223655e-6 l 0.10452846326765346,-0.9945218953682733 c -0.28185620611337825,-2.9624280998431504e-2 -0.5630453243913867,6.173960189645773e-2 -0.7736590696265117 0.25137706989087893l 0.6691306063588582,0.7431448254773944 Z" /></g><path d="M -2.2403829254065295,2.250171937223655e-6 h 1.0 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0l -2.220446049250313e-16,1.0 Z" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="178.54130895779457" font-size="1" viewBox="0 0 400 179" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.0689548060277785" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 324.43296081480526,89.27083709150592 l 57.385221003376564,-57.38522100337656 c -31.692982425834614,-31.692982425834618 -83.0774595809185,-31.692982425834632 -114.77044200675311 -1.8020020547460663e-14c -31.692982425834618,31.692982425834614 -31.692982425834632,83.0774595809185 -2.7030030821190994e-14 114.77044200675311c 31.69298242583461,31.69298242583462 83.07745958091849,31.692982425834636 114.77044200675309 3.6040041094921325e-14Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g><g fill="rgb(0,0,255)" fill-opacity="1.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 194.21752105291293,89.27083709150592 l 8.483003027763553,-80.71038247241611 c -22.87402851921224,-2.4041572749570763 -45.693919553281,5.0104747879005584 -62.78626916472949 20.400495504601384Z" /></g></g></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 18.181818181818187,89.27083709150592 h 81.15495782275252 c 0.0,-44.820645578667474 -36.33431224408504,-81.15495782275252 -81.15495782275251 -81.15495782275252Z" /></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrow_example1.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="499.99999999999994" height="142.85714285714286" font-size="1" viewBox="0 0 500 143"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(64.93506493506493,0.0,0.0,64.93506493506493,71.42857142857139,71.42857142857143)"><g><g stroke="rgb(169,169,169)" stroke-opacity="1.0" stroke-width="7.0e-2"><path d="M 6.0,1.0 l -2.220446049250313e-16,-2.0 h -2.0 l -2.220446049250313e-16,2.0 h 2.0 Z" /><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 5.04,0.0 c 0.0,-2.209138999323174e-2 -1.7908610006768258e-2,-4.0e-2 -3.9999999999999994e-2 -4.0e-2c -2.209138999323174e-2,-1.3527075021963559e-18 -4.0e-2,1.7908610006768255e-2 -4.0e-2 3.999999999999999e-2c -2.7054150043927117e-18,2.209138999323174e-2 1.7908610006768255e-2,4.0e-2 3.999999999999998e-2 4.0e-2c 2.209138999323174e-2,4.0581225065890676e-18 4.0e-2,-1.790861000676825e-2 4.000000000000001e-2 -3.999999999999999e-2Z" /></g></g></g><g></g><g stroke="rgb(169,169,169)" stroke-opacity="1.0" stroke-width="7.0e-2"><path d="M 1.0000000000000002,1.0 l -2.220446049250313e-16,-2.0 h -2.0 l -2.220446049250313e-16,2.0 h 2.0 Z" /><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 4.0e-2,0.0 c 0.0,-2.209138999323174e-2 -1.7908610006768258e-2,-4.0e-2 -3.9999999999999994e-2 -4.0e-2c -2.209138999323174e-2,-1.3527075021963559e-18 -4.0e-2,1.7908610006768255e-2 -4.0e-2 3.999999999999999e-2c -2.7054150043927117e-18,2.209138999323174e-2 1.7908610006768255e-2,4.0e-2 3.999999999999998e-2 4.0e-2c 2.209138999323174e-2,4.0581225065890676e-18 4.0e-2,-1.790861000676825e-2 4.000000000000001e-2 -3.999999999999999e-2Z" /></g></g><g><g><g fill-opacity="0.0" stroke-width="2.0e-2"><path d="M 0.29748256273725837,3.878304871039902e-2 c 0.9519443557972225,0.12410577608570911 1.903888711594445,0.24821155217141821 2.15046054898094 0.17171496874379844c 0.24657183738649566,-7.649658342761977e-2 -0.21222884363773598,-0.35359552636856845 3.4342993748759695e-2 -0.43009210979618817c 0.24657183738649566,-7.649658342761977e-2 1.198516193183718,4.760919265808934e-2 2.1504605489809396 0.1717149687437984" /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.29748256273725837,3.878304871039902e-2 l -1.2927682903466336e-3,9.916085424575276e-3 l -9.430757659181744e-3,-1.2294957065939064e-3 l 1.0723525949528377e-2,-8.68658971798137e-3 l -8.137989368835107e-3,-1.1145581131169199e-2 l 9.43075765918174e-3,1.2294957065939237e-3 l -1.2927682903466336e-3,9.916085424575276e-3 h -0.0 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.29748256273725837,3.878304871039902e-2 l -0.15757826014270998,0.12764623322362204 l -0.30987766951797735,-4.03990090733323e-2 l 0.16997336692342907,-0.12603027286068874 l -0.13197986013857382,-0.16539616579119604 l 0.30987766951797735,4.03990090733323e-2 l 0.11958475335785472,0.16378020542826274 l 1.3877787807814457e-17,2.7755575615628914e-17 Z" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 5.0,-2.7755575615628914e-17 l -0.5609471155928247,0.10469666898034764 l 0.2039680403081149,-0.15123632743282647 l -0.15837583216628864,-0.19847539894943522 l 0.5153549074509984,0.24501505740191404 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 4.64302092471529,-4.653965845247886e-2 l -1.1567038557738623e-2,8.57662027886182e-3 l 2.5855365806932637e-3,-1.9832170849150513e-2 l 8.981501977045359e-3,1.1255550570288693e-2 h -0.0 Z" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="499.99999999999994" height="142.85714285714286" font-size="1" viewBox="0 0 500 143" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.0690449676496976" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g stroke="rgb(169,169,169)" stroke-opacity="1.0" stroke-width="5.345224838248488"><path d="M 461.03896103896096,136.36363636363637 l -1.4418480839287746e-14,-129.87012987012986 h -129.87012987012986 l -1.4418480839287746e-14,129.87012987012986 Z" /><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><path d="M 398.70129870129864,71.42857142857143 c 0.0,-1.4345058437163465 -1.1628967536862505,-2.5974025974025974 -2.597402597402597 -2.5974025974025974c -1.4345058437163465,-8.783814949326985e-17 -2.5974025974025974,1.1628967536862502 -2.5974025974025974 2.5974025974025965c -1.756762989865397e-16,1.4345058437163465 1.1628967536862502,2.5974025974025974 2.597402597402596 2.5974025974025974c 1.4345058437163465,2.6351444847980957e-16 2.5974025974025974,-1.16289675368625 2.5974025974025987 -2.5974025974025965Z" /></g></g></g></g></g><g></g><g stroke="rgb(169,169,169)" stroke-opacity="1.0" stroke-width="5.345224838248488"><path d="M 136.36363636363632,136.36363636363637 l -1.4418480839287746e-14,-129.87012987012986 h -129.87012987012986 l -1.4418480839287746e-14,129.87012987012986 Z" /><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><path d="M 74.02597402597398,71.42857142857143 c 0.0,-1.4345058437163465 -1.1628967536862505,-2.5974025974025974 -2.597402597402597 -2.5974025974025974c -1.4345058437163465,-8.783814949326985e-17 -2.5974025974025974,1.1628967536862502 -2.5974025974025974 2.5974025974025965c -1.756762989865397e-16,1.4345058437163465 1.1628967536862502,2.5974025974025974 2.597402597402596 2.5974025974025974c 1.4345058437163465,2.6351444847980957e-16 2.5974025974025974,-1.16289675368625 2.5974025974025987 -2.5974025974025965Z" /></g></g></g></g><g><g><g><path d="M 89.9819766975543,73.83089383093066 c 61.406842947188636,7.951049003214775 122.81368589437727,15.90209800642955 138.71310687684397 10.954204913391047c 15.89942098246672,-4.947893093038505 -13.70857999978851,-22.794728282330297 2.1908409826782096 -27.742621375368802c 15.89942098246672,-4.947893093038505 77.30626392965536,3.0031559101762695 138.71310687684394 10.954204913391044" /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 89.9819766975543,73.83089383093066 l -6.420476687285677e-2,0.49586061338928916 l -0.47159146753799513,-6.106236191164162e-2 l 0.5357962344108519,-0.43479825147764756 l -0.4073867006651384,-0.5569229753009308 l 0.47159146753799513,6.106236191164162e-2 l -6.420476687285677e-2,0.49586061338928916 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 89.9819766975543,73.83089383093066 l -9.81976544020477,7.968732456689302 l -19.326463821857203,-2.5024191691242024 l 10.592823993079056,-7.868635689924334 l -8.239407860814753,-10.307060971598373 l 19.326463821857203,2.5024191691242024 l 7.466349307940467,10.206964204833405 Z" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 396.103896103896,71.42857142857143 l -32.982355078418344,6.185770522810794 l 6.7381797601759725,-9.583905225546857 l -4.075015142080604,-10.984013721974463 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 369.8597207856536,68.03043672583537 l -0.26068935173322666,-3.375444349141672e-2 l -6.420476687285682e-2,0.49586061338928916 l 0.32489411860608347,-0.46210616989787245 l -0.26068935173322666,-3.375444349141672e-2 l 6.420476687285682e-2,-0.49586061338928916 Z" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrow_example2.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="500.0" height="191.60937134592436" font-size="1" viewBox="0 0 500 192"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(58.063445862401316,0.0,0.0,58.063445862401316,250.0,95.80468567296218)"><g><g><g><g fill-opacity="0.0"><path d="M -2.707106781186548,0.0 l 4.98932980156782e-17,0.8148193920143483 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -2.707106781186548,1.0 l -8.8167787843871e-2,-0.2713525491562421 l 8.816778784387098e-2,9.13525491562421e-2 l 8.816778784387096e-2,-9.135254915624214e-2 l -8.816778784387094e-2,0.27135254915624213 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -2.707106781186548,0.8200000000000001 l -4.9999999999999906e-3,-5.180607985651786e-3 l 9.999999999999981e-3,-6.123233995736754e-19 l -4.9999999999999906e-3,5.180607985651786e-3 v 8.673617379884035e-19 Z" /></g></g></g></g><g><g stroke="rgb(169,169,169)" stroke-opacity="1.0" stroke-width="0.1"><path d="M 3.9142135623730954,0.4999999999999996 l -2.220446049250313e-16,-1.0 l -0.7071067811865476,-0.7071067811865475 l -1.0,1.6081226496766364e-16 l -0.7071067811865475,0.7071067811865476 l 9.957992501029599e-17,1.0 l 0.7071067811865476,0.7071067811865476 l 1.0,-3.834758505292834e-17 l 0.7071067811865477,-0.7071067811865477 Z" /></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 2.75539105243401,0.0 c 0.0,-2.6666666666666675e-2 -2.161760458079523e-2,-4.828427124746191e-2 -4.8284271247461895e-2 -4.828427124746191e-2c -2.6666666666666675e-2,-1.632862398863138e-18 -4.828427124746191e-2,2.1617604580795226e-2 -4.828427124746191e-2 4.8284271247461895e-2c -3.265724797726276e-18,2.6666666666666675e-2 2.1617604580795223e-2,4.828427124746191e-2 4.828427124746189e-2 4.828427124746191e-2c 2.6666666666666675e-2,4.898587196589414e-18 4.828427124746191e-2,-2.1617604580795223e-2 4.8284271247461916e-2 -4.8284271247461895e-2Z" /></g></g><g></g><g stroke="rgb(169,169,169)" stroke-opacity="1.0" stroke-width="0.1"><path d="M -1.5000000000000004,0.4999999999999996 l -2.220446049250313e-16,-1.0 l -0.7071067811865476,-0.7071067811865475 l -1.0,1.6081226496766364e-16 l -0.7071067811865475,0.7071067811865476 l 9.957992501029599e-17,1.0 l 0.7071067811865476,0.7071067811865476 l 1.0,-3.834758505292834e-17 l 0.7071067811865477,-0.7071067811865477 Z" /></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M -2.658822509939086,0.0 c 0.0,-2.6666666666666675e-2 -2.161760458079523e-2,-4.828427124746191e-2 -4.8284271247461895e-2 -4.828427124746191e-2c -2.6666666666666675e-2,-1.632862398863138e-18 -4.828427124746191e-2,2.1617604580795226e-2 -4.828427124746191e-2 4.8284271247461895e-2c -3.265724797726276e-18,2.6666666666666675e-2 2.1617604580795223e-2,4.828427124746191e-2 4.828427124746189e-2 4.828427124746191e-2c 2.6666666666666675e-2,4.898587196589414e-18 4.828427124746191e-2,-2.1617604580795223e-2 4.8284271247461916e-2 -4.8284271247461895e-2Z" /></g><g><g><g fill-opacity="0.0"><path d="M -2.707106781186548,0.0 h 5.229032954387444 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 2.7071067811865483,0.0 l -0.2713525491562421,8.816778784387098e-2 l 9.13525491562421e-2,-8.816778784387098e-2 l -9.135254915624214e-2,-8.816778784387096e-2 l 0.27135254915624213,8.816778784387096e-2 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 2.527106781186548,0.0 l -5.180607985651786e-3,4.9999999999999906e-3 v -9.999999999999981e-3 l 5.180607985651786e-3,4.9999999999999906e-3 h -0.0 Z" /></g></g></g></g><g><g><g fill-opacity="0.0"><path d="M -1.5000000000000016,0.5000000000000004 l 2.81481939201435,-4.687615948763571e-16 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.5,0.49999999999999994 l -0.2713525491562421,8.816778784387103e-2 l 9.135254915624208e-2,-8.8167787843871e-2 l -9.135254915624215e-2,-8.816778784387094e-2 l 0.27135254915624213,8.816778784387092e-2 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.32,0.5 l -5.180607985651785e-3,4.999999999999991e-3 l -1.6653345369377307e-18,-9.999999999999981e-3 l 5.180607985651787e-3,4.99999999999999e-3 h -0.0 Z" /></g></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="500.0" height="191.60937134592436" font-size="1" viewBox="0 0 500 192" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.238093280317519" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><g><g><path d="M 92.8160519668354,95.80468567296218 l 2.89201135554859e-15,47.23012965962302 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 92.8160519668354,153.86813153536352 l -4.14210333348447,-12.748083238743886 l 4.142103333484469,2.1776325920251587 l 4.142103333484469,-2.1776325920251596 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 92.8160519668354,143.29768088864478 l -1.6095873091721878e-17,-0.26286555605956674 l -0.5,3.061616997868383e-17 l 0.5,0.2628655560595667 l -1.6095873091721878e-17,-0.26286555605956674 l 0.5,-3.061616997868383e-17 Z" /></g></g></g></g></g></g><g><g stroke="rgb(169,169,169)" stroke-opacity="1.0" stroke-width="6.190466401587595"><path d="M 477.2727272727272,124.83640860416281 l -1.2892674897102844e-14,-58.063445862401316 l -41.05705630836196,-41.05705630836195 l -58.063445862401316,9.337314240960074e-15 l -41.05705630836195,41.05705630836196 l 5.781953584817304e-15,58.063445862401316 l 41.05705630836196,41.05705630836196 l 58.063445862401316,-2.2265929286745346e-15 Z" /></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><path d="M 409.98749920274713,95.80468567296218 c 0.0,-1.5483585563307023 -1.2551926132518025,-2.803551169582505 -2.803551169582504 -2.803551169582505c -1.5483585563307023,-9.480961749714055e-17 -2.803551169582505,1.2551926132518023 -2.803551169582505 2.803551169582504c -1.896192349942811e-16,1.5483585563307023 1.255192613251802,2.803551169582505 2.8035511695825037 2.803551169582505c 1.5483585563307023,2.844288524914217e-16 2.803551169582505,-1.255192613251802 2.8035511695825055 -2.803551169582504Z" /></g></g></g></g><g></g><g stroke="rgb(169,169,169)" stroke-opacity="1.0" stroke-width="6.190466401587595"><path d="M 162.904831206398,124.83640860416281 l -1.2892674897102844e-14,-58.063445862401316 l -41.05705630836196,-41.05705630836195 l -58.063445862401316,9.337314240960074e-15 l -41.05705630836195,41.05705630836196 l 5.781953584817304e-15,58.063445862401316 l 41.05705630836196,41.05705630836196 l 58.063445862401316,-2.2265929286745346e-15 Z" /></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><path d="M 95.61960313641791,95.80468567296218 c 0.0,-1.5483585563307023 -1.2551926132518025,-2.803551169582505 -2.803551169582504 -2.803551169582505c -1.5483585563307023,-9.480961749714055e-17 -2.803551169582505,1.2551926132518023 -2.803551169582505 2.803551169582504c -1.896192349942811e-16,1.5483585563307023 1.255192613251802,2.803551169582505 2.8035511695825037 2.803551169582505c 1.5483585563307023,2.844288524914217e-16 2.803551169582505,-1.255192613251802 2.8035511695825055 -2.803551169582504Z" /></g></g></g><g><g><g><path d="M 92.8160519668354,95.80468567296218 h 292.70126366077255 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 407.18394803316454,95.80468567296218 l -25.81318531625282,8.387212331760587 l 4.4094184667558025,-8.387212331760587 l -4.4094184667558025,-8.387212331760587 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 385.78018118366754,95.80468567296218 h -0.26286555605956674 v 0.5 l 0.26286555605956674,-0.5 h -0.26286555605956674 v -0.5 Z" /></g></g></g></g></g></g><g><g><g><path d="M 162.90483120639794,124.83640860416287 l 152.52370518164744,-2.4886480444135933e-14 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 337.095168793602,124.83640860416284 l -25.81318531625282,8.38721233176059 l 4.409418466755801,-8.387212331760587 l -4.409418466755804,-8.387212331760587 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 315.691401944105,124.83640860416284 l -0.26286555605956674,4.2890372434385847e-17 l 8.15823363800974e-17,0.5 l 0.2628655560595667,-0.5 l -0.26286555605956674,4.2890372434385847e-17 l -8.15823363800974e-17,-0.5 Z" /></g></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_blockEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(200.0,0.0,0.0,200.0,0.0,50.0)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.2427050983124842,0.0 h -0.2417050983124837 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.2427050983124842,-8.816778784387098e-2 l -2.6945678834043217e-17,0.17633557568774197 h -0.24270509831248419 l -2.6945678834043217e-17,-0.17633557568774197 h 0.24270509831248424 Z" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 3.500000000000001,50.0 h -3.3000000000000007 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 3.500000000000001,48.660607986722184 l -3.8857805861880484e-16,2.6787840265556295 h -3.5000000000000004 l -3.8857805861880484e-16,-2.6787840265556295 Z" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_dart'Ex.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(200.0,0.0,0.0,200.0,0.0,50.0)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.18,0.0 h -0.1789999999999995 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.18,0.0 h 0.0 h 0.0 h 0.0 h -0.0 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.0,0.0 l 0.2713525491562421,8.816778784387098e-2 l -9.13525491562421e-2,-8.816778784387098e-2 l 9.135254915624214e-2,-8.816778784387096e-2 l -0.27135254915624213,8.816778784387096e-2 Z" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 3.5000000000000013,50.0 h -3.3000000000000087 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 3.5000000000000013,50.0 h 0.0 h 0.0 h 0.0 h 0.0 h 0.0 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 4.440892098500626e-16,50.0 l 4.221039653541545,1.371498922015771 l -0.7210396535415439,-1.371498922015771 l 0.7210396535415439,-1.371498922015771 Z" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_dartEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="73.63770250368194" font-size="1" viewBox="0 0 100 74"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(147.27540500736387,0.0,0.0,147.27540500736387,26.36229749631806,36.81885125184097)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.0,0.0 h -0.1789999999999995 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.0000000000005005e-3,0.0 l -0.2713525491562421,8.816778784387098e-2 l 9.13525491562421e-2,-8.816778784387098e-2 l -9.135254915624214e-2,-8.816778784387096e-2 l 0.27135254915624213,8.816778784387096e-2 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.1789999999999995,0.0 h 0.0 h 0.0 h 0.0 h -0.0 Z" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 0.0,50.0 h -3.3000000000000087 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.19999999999999218,50.0 l -4.221039653541545,1.371498922015771 l 0.7210396535415439,-1.371498922015771 l -0.7210396535415439,-1.371498922015771 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -3.3000000000000087,50.0 h 0.0 h 0.0 h 0.0 h 0.0 h 0.0 Z" /></g></g></g></g></g></g></g></g></g></svg>
− diagrams/src_Diagrams_TwoD_Arrowheads_missile'Ex.svg
@@ -1,4 +0,0 @@-<?xml version="1.0" encoding="UTF-8"?>-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"-    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(200.0,0.0,0.0,200.0,0.0,50.0)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.18000000000000005,0.0 h -0.17899999999999955 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.18000000000000005,0.0 h 0.0 h 0.0 h 0.0 h -0.0 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 5.551115123125783e-17,0.0 c -2.7755575615628914e-17,4.408389392193548e-2 0.22635254915624206,8.816778784387098e-2 0.27135254915624213 8.8167787843871e-2c 4.500000000000001e-2,0.0 -9.135254915624212e-2,-4.40838939219355e-2 -9.135254915624208e-2 -8.816778784387098e-2c 1.2721305490496585e-17,-4.4083893921935485e-2 0.13635254915624218,-8.816778784387096e-2 9.13525491562421e-2 -8.816778784387094e-2c -4.5000000000000005e-2,0.0 -0.27135254915624213,4.408389392193548e-2 -0.27135254915624213 8.816778784387093e-2Z" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>
− diagrams/src_Diagrams_TwoD_Arrowheads_missileEx.svg
@@ -1,4 +0,0 @@-<?xml version="1.0" encoding="UTF-8"?>-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"-    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="99.99999999999999" height="73.63770250368192" font-size="1" viewBox="0 0 100 74"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(147.27540500736384,0.0,0.0,147.27540500736384,26.362297496318064,36.81885125184096)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.0,0.0 h -0.17899999999999955 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.000000000000445e-3,0.0 c 2.7755575615628914e-17,4.408389392193548e-2 -0.22635254915624206,8.816778784387098e-2 -0.27135254915624213 8.8167787843871e-2c -4.500000000000001e-2,0.0 9.135254915624212e-2,-4.40838939219355e-2 9.135254915624208e-2 -8.816778784387098e-2c -1.2721305490496585e-17,-4.4083893921935485e-2 -0.13635254915624218,-8.816778784387096e-2 -9.13525491562421e-2 -8.816778784387094e-2c 4.5000000000000005e-2,0.0 0.27135254915624213,4.408389392193548e-2 0.27135254915624213 8.816778784387093e-2Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.17899999999999955,0.0 h 0.0 h 0.0 h 0.0 h -0.0 Z" /></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_quillEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(200.0,0.0,0.0,200.0,0.0,50.0)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.18000000000000002,0.0 h -0.17899999999999952 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.18000000000000002,0.0 h 0.0 h 0.0 h 0.0 h 0.0 h 0.0 h 0.0 h -0.0 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.18000000000000002,0.0 l -8.38525491562421e-2,8.816778784387098e-2 h -0.1875 l 9.13525491562421e-2,-8.816778784387098e-2 l -9.13525491562421e-2,-8.816778784387098e-2 h 0.1875 l 8.38525491562421e-2,8.816778784387098e-2 h -2.7755575615628914e-17 Z" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 3.5000000000000004,50.0 h -3.3000000000000007 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 3.5000000000000004,50.0 h 0.0 h 0.0 h 0.0 h 0.0 h 0.0 h 0.0 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 3.5000000000000004,50.0 l -1.6304662335935967,1.7143736525197137 h -3.645833333333334 l 1.7762995669269297,-1.7143736525197137 l -1.7762995669269297,-1.7143736525197137 h 3.645833333333334 l 1.6304662335935967,1.7143736525197137 Z" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_spike'Ex.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(200.0,0.0,0.0,200.0,0.0,50.0)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.21213203435596423,0.0 h -0.21113203435596373 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.21213203435596423,0.0 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.0,0.0 l 0.2560660171779821,0.10606601717798213 c -5.85786437626905e-2,-5.8578643762690494e-2 -5.857864376269052e-2,-0.15355339059327375 -3.3306690738754695e-17 -0.21213203435596423l -0.2560660171779821,0.10606601717798213 l 5.551115123125783e-17,-2.7755575615628914e-17 Z" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 3.500000000000001,50.0 h -3.3000000000000007 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 3.500000000000001,50.0 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 4.440892098500626e-16,50.0 l 4.224873734152917,1.7500000000000004 c -0.9664983122038887,-0.9664983122038886 -0.9664983122038892,-2.533501687796112 -5.495323605393214e-16 -3.5000000000000004l -4.224873734152917,1.7500000000000004 Z" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_spikeEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="70.31043123416943" font-size="1" viewBox="0 0 100 70"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(140.62086246833886,0.0,0.0,140.62086246833886,29.689568765830572,35.155215617084714)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.0,0.0 h -0.21113203435596373 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.0000000000005005e-3,0.0 l -0.2560660171779821,0.10606601717798213 c 5.85786437626905e-2,-5.8578643762690494e-2 5.857864376269052e-2,-0.15355339059327375 3.3306690738754695e-17 -0.21213203435596423l 0.2560660171779821,0.10606601717798213 l -5.551115123125783e-17,-2.7755575615628914e-17 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.21113203435596373,0.0 Z" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 0.0,50.0 h -3.3000000000000007 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.19999999999999973,50.0 l -4.224873734152917,1.7500000000000004 c 0.9664983122038887,-0.9664983122038886 0.9664983122038892,-2.533501687796112 5.495323605393214e-16 -3.5000000000000004l 4.224873734152917,1.7500000000000004 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -3.3000000000000007,50.0 Z" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_thorn'Ex.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(200.0,0.0,0.0,200.0,0.0,50.0)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.21213203435596423,0.0 h -0.21113203435596373 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.21213203435596423,0.0 h 0.0 h 0.0 h 0.0 h -0.0 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.0,0.0 c 7.5e-2,0.0 0.20303300858899107,5.3033008588991064e-2 0.2560660171779821 0.10606601717798213l -4.393398282201788e-2,-0.10606601717798213 l 4.393398282201788e-2,-0.10606601717798213 c -5.303300858899106e-2,5.3033008588991064e-2 -0.18106601717798212,0.10606601717798213 -0.2560660171779821 0.10606601717798211v 1.3877787807814457e-17 Z" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 3.500000000000001,50.0 h -3.3000000000000007 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 3.500000000000001,50.0 h 0.0 h 0.0 h 0.0 h 0.0 h 0.0 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 8.881784197001252e-16,50.0 c 2.3333333333333335,0.0 3.9832491561019445,1.649915822768611 3.9832491561019445 1.649915822768611l -0.48324915610194413,-1.649915822768611 h -3.5 c 2.3333333333333335,0.0 3.9832491561019445,-1.649915822768611 3.9832491561019445 -1.649915822768611l -0.48324915610194413,1.649915822768611 Z" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_thornEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="70.31043123416943" font-size="1" viewBox="0 0 100 70"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(140.62086246833886,0.0,0.0,140.62086246833886,29.689568765830572,35.155215617084714)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.0,0.0 h -0.21113203435596373 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.0000000000005005e-3,0.0 c -7.5e-2,0.0 -0.20303300858899107,5.3033008588991064e-2 -0.2560660171779821 0.10606601717798213l 4.393398282201788e-2,-0.10606601717798213 l -4.393398282201788e-2,-0.10606601717798213 c 5.303300858899106e-2,5.3033008588991064e-2 0.18106601717798212,0.10606601717798213 0.2560660171779821 0.10606601717798211v 1.3877787807814457e-17 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -0.21113203435596373,0.0 h 0.0 h 0.0 h 0.0 h -0.0 Z" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 0.0,50.0 h -3.2999999478459427 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.20000005215405725,50.0 c -2.3333333333333335,0.0 -3.9832491561019445,1.649915822768611 -3.9832491561019445 1.649915822768611l 0.48324915610194413,-1.649915822768611 h 3.5 c -2.3333333333333335,0.0 -3.9832491561019445,-1.649915822768611 -3.9832491561019445 -1.649915822768611l 0.48324915610194413,1.649915822768611 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M -3.2999999478459427,50.0 h 0.0 h 0.0 h 0.0 h 0.0 h 0.0 Z" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_tri'Ex.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(200.0,0.0,0.0,200.0,0.0,50.0)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.22499999999999998,0.0 h -0.22399999999999948 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.0,0.0 l 0.22499999999999998,0.1299038105676658 v -0.2598076211353316 l -0.22499999999999998,0.1299038105676658 Z" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 3.5,50.0 h -3.300000000000003 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.0,50.0 l 3.5,2.0207259421636903 v -4.041451884327381 Z" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_tri25Ex.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="119.99999999999999" height="82.72509808789549" font-size="1" viewBox="0 0 120 83"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(137.87516347982583,0.0,0.0,137.87516347982583,37.274901912104454,41.362549043947745)"><g stroke-width="0.0"><path d="M 0.6000000000000002,0.3 l -6.661338147750939e-17,-0.6 h -0.6 l -6.661338147750939e-17,0.6 h 0.6000000000000002 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.0,0.0 h -0.2703525491562416 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.0000000000005005e-3,0.0 l -0.2713525491562421,8.816778784387098e-2 v -0.17633557568774197 l 0.2713525491562421,8.816778784387098e-2 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="120.0" height="119.99999999999996" font-size="1" viewBox="0 0 120 120" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 120.0,119.99999999999996 l -1.3322676295501874e-14,-119.99999999999996 h -119.99999999999996 l -1.3322676295501874e-14,119.99999999999996 Z" /></g><g><g><g stroke-width="0.0"><path d="M 0.0,59.99999999999998 h -3.999999999999999 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.20000000000000018,59.99999999999998 l -4.199999999999999,1.3646627241782066 v -2.729325448356413 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Arrowheads_triEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="69.06077348066303" font-size="1" viewBox="0 0 100 69"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(138.12154696132606,0.0,0.0,138.12154696132606,30.939226519336966,34.530386740331515)"><g stroke-width="0.0"><path d="M 0.5,0.25 l -5.551115123125783e-17,-0.5 h -0.5 l -5.551115123125783e-17,0.5 h 0.5 Z" /></g><g><g><g fill-opacity="0.0" stroke-width="0.0"><path d="M 0.0,0.0 h -0.22399999999999948 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 1.0000000000005005e-3,0.0 l -0.22499999999999998,0.1299038105676658 v -0.2598076211353316 l 0.22499999999999998,0.1299038105676658 Z" /></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="0.0"><path d="M 100.0,100.0 l -1.1102230246251565e-14,-100.0 h -100.0 l -1.1102230246251565e-14,100.0 Z" /></g><g><g><g stroke-width="0.0"><path d="M 0.0,50.0 h -3.300000000000003 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g><g stroke-width="0.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="M 0.19999999999999707,50.0 l -3.5,2.0207259421636903 v -4.041451884327381 Z" /></g></g></g><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><g fill="rgb(0,0,0)" fill-opacity="1.0"><path d="" /></g></g></g></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Curvature_diagramA.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="200.0" font-size="1" viewBox="0 0 400 200"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(18.181818181818183,0.0,0.0,18.181818181818183,200.0,100.0)"><g fill-opacity="0.0" stroke-width="0.1"><path d="M -10.0,4.132231404958677 c 12.0,0.0 8.0,-10.0 20.0 -8.0" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="200.0" font-size="1" viewBox="0 0 400 200" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.0285189544531599" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="1.9284730395996748"><path d="M 18.18181818181816,175.13148009015777 c 218.1818181818182,0.0 145.45454545454547,-181.81818181818184 363.6363636363637 -145.45454545454547" /></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Curvature_diagramNeg.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="200.0" font-size="1" viewBox="0 0 400 200"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(18.181818181818183,0.0,0.0,18.181818181818183,200.0,100.0)"><g fill-opacity="0.0"><g stroke="rgb(255,0,0)" stroke-opacity="1.0" stroke-width="5.0e-2"><g><path d="M 4.464000000000002,-3.8037685950413227 l 2.077770135746605,7.445342986425346 " /><g><path d="M 14.271599430272687,3.6415743913840233 c 0.0,-4.269066838162075 -3.4607624563640047,-7.7298292945260805 -7.729829294526079 -7.7298292945260805c -4.269066838162075,-2.614049519350648e-16 -7.7298292945260805,3.4607624563640043 -7.7298292945260805 7.729829294526078c -5.228099038701296e-16,4.269066838162075 3.460762456364004,7.7298292945260805 7.729829294526077 7.7298292945260805c 4.269066838162075,7.842148558051945e-16 7.7298292945260805,-3.4607624563640034 7.729829294526082 -7.729829294526078Z" /></g></g></g><g fill-opacity="0.0" stroke-width="0.1"><path d="M -10.0,4.132231404958677 c 12.0,0.0 8.0,-10.0 20.0 -8.0" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="200.0" font-size="1" viewBox="0 0 400 200" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.0285189544531599" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><g><path d="M 281.16363636363644,30.840570999248655 l 37.77763883175646,135.36987248046086 " /><g><path d="M 459.483626004958,166.2104434797095 c 0.0,-77.61939705749228 -62.922953752072814,-140.5423508095651 -140.54235080956508 -140.5423508095651c -77.61939705749228,-4.75281730791027e-15 -140.5423508095651,62.92295375207281 -140.5423508095651 140.54235080956505c -9.50563461582054e-15,77.61939705749228 62.9229537520728,140.5423508095651 140.54235080956505 140.5423508095651c 77.61939705749228,1.425845192373081e-14 140.5423508095651,-62.92295375207279 140.54235080956516 -140.54235080956505Z" /></g></g></g><g stroke-width="1.9284730395996748"><path d="M 18.18181818181816,175.13148009015777 c 218.1818181818182,0.0 145.45454545454547,-181.81818181818184 363.6363636363637 -145.45454545454547" /></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Curvature_diagramPos.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="200.0" font-size="1" viewBox="0 0 400 200"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(18.181818181818183,0.0,0.0,18.181818181818183,200.0,100.0)"><g fill-opacity="0.0"><g stroke="rgb(255,0,0)" stroke-opacity="1.0" stroke-width="5.0e-2"><g><path d="M -4.463999999999999,3.1082314049586772 l -3.900145794392522,-8.6003214953271 " /><g><path d="M 1.079194030081819,-5.492090090368422 c 0.0,-5.215412572526979 -4.227927251947359,-9.44333982447434 -9.443339824474338 -9.44333982447434c -5.215412572526979,-3.193519156589014e-16 -9.44333982447434,4.227927251947358 -9.44333982447434 9.443339824474336c -6.387038313178028e-16,5.215412572526979 4.227927251947357,9.44333982447434 9.443339824474336 9.44333982447434c 5.215412572526979,9.580557469767042e-16 9.44333982447434,-4.227927251947357 9.443339824474343 -9.443339824474336Z" /></g></g></g><g fill-opacity="0.0" stroke-width="0.1"><path d="M -10.0,4.132231404958677 c 12.0,0.0 8.0,-10.0 20.0 -8.0" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="200.0" font-size="1" viewBox="0 0 400 200" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.0285189544531599" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><g><path d="M 118.83636363636364,156.51329827197594 l -70.91174171622768,-156.36948173322 " /><g><path d="M 219.62170963785124,0.14381653875594225 c 0.0,-94.82568313685418 -76.87140458086108,-171.69708771771528 -171.69708771771525 -171.69708771771528c -94.82568313685418,-5.806398466525481e-15 -171.69708771771528,76.87140458086107 -171.69708771771528 171.69708771771522c -1.1612796933050962e-14,94.82568313685418 76.87140458086105,171.69708771771528 171.6970877177152 171.69708771771528c 94.82568313685418,1.741919539957644e-14 171.69708771771528,-76.87140458086105 171.6970877177153 -171.69708771771522Z" /></g></g></g><g stroke-width="1.9284730395996748"><path d="M 18.18181818181816,175.13148009015777 c 218.1818181818182,0.0 145.45454545454547,-181.81818181818184 363.6363636363637 -145.45454545454547" /></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Curvature_diagramZero.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="200.0" font-size="1" viewBox="0 0 400 200"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(18.181818181818183,0.0,0.0,18.181818181818183,200.0,100.0)"><g fill-opacity="0.0"><g stroke="rgb(255,0,0)" stroke-opacity="1.0" stroke-width="5.0e-2"><g><path d="M -0.6039999999999992,6.1981404958677544e-2 l -33.11407551269532,-29.72616679687502 " /><g><path d="M 10.781216498483047,-29.66418539191634 c 0.0,-24.57628035604107 -19.923011655137294,-44.49929201117837 -44.49929201117836 -44.49929201117837c -24.57628035604107,-1.5048631536486836e-15 -44.49929201117837,19.92301165513729 -44.49929201117837 44.499292011178355c -3.0097263072973672e-15,24.57628035604107 19.923011655137287,44.49929201117837 44.49929201117835 44.49929201117837c 24.57628035604107,4.514589460946051e-15 44.49929201117837,-19.923011655137284 44.49929201117839 -44.499292011178355Z" /></g></g></g><g fill-opacity="0.0" stroke-width="0.1"><path d="M -10.0,4.132231404958677 c 12.0,0.0 8.0,-10.0 20.0 -8.0" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="200.0" font-size="1" viewBox="0 0 400 200" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.0285189544531599" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><g><path d="M 189.01818181818183,101.12693463561232 l -602.0741002308241,-540.4757599431822 " /><g><path d="M 396.0221181542372,-439.3488253075699 c 0.0,-446.8414610189286 -362.2365755479508,-809.0780365668795 -809.0780365668793 -809.0780365668795c -446.8414610189286,-2.7361148248157886e-14 -809.0780365668795,362.2365755479508 -809.0780365668795 809.0780365668793c -5.472229649631577e-14,446.8414610189286 362.23657554795074,809.0780365668795 809.0780365668792 809.0780365668795c 446.8414610189286,8.208344474447366e-14 809.0780365668795,-362.2365755479507 809.0780365668796 -809.0780365668793Z" /></g></g></g><g stroke-width="1.9284730395996748"><path d="M 18.18181818181816,175.13148009015777 c 218.1818181818182,0.0 145.45454545454547,-181.81818181818184 363.6363636363637 -145.45454545454547" /></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Offset_cubicOffsetExample.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600.0" height="302.85875688987323" font-size="1" viewBox="0 0 600 303"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(13.155574898915939,0.0,0.0,13.155574898915939,72.35566194403765,151.42937844493662)"><g fill-opacity="0.0"><g fill-opacity="0.0"><g fill-opacity="0.0"><g fill-opacity="0.0" stroke-width="0.1"><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 33.417476733497544,-1.6473872989404432 c 0.8062160672722944,1.9056016135526965 2.600074197059385,4.243483864433998 6.1181079451566704 6.588839696498854" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 32.86092310128323,-3.934973324746485 c 2.5438939233202618e-2,0.6274938344190009 0.18344919012734362,1.405702799055014 0.5565536322143174 2.287586025806042" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 33.000311673428904,-5.029283712603787 c -0.11129079091128213,0.22258158182256516 -0.16025559544153944,0.5795904798926212 -0.13938857214567424 1.094310387857302" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 32.97862528132407,-5.004468823346231 c 5.153156049894747e-3,-5.8414837533096176e-3 1.692390853525705e-2,-1.5289922118400412e-2 2.1686392104834695e-2 -2.4814889257555706e-2" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 32.70873785722833,-4.826371179429538 c 8.358937623750418e-2,-3.149744611848071e-2 0.18599518779940638,-8.299958544359143e-2 0.26988742409574185 -0.17809764391669347" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 32.05535699332027,-4.853120624705527 c 0.22391741974384205,0.10443579260780034 0.4091073150965916,0.11879455062523725 0.6533808639080556 2.6749445275989103e-2" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 31.72347357921467,-5.143549245977104 c 9.378804941573238e-2,0.1587182374727778 0.21780468092203975,0.23722193939149783 0.33188341410559863 0.29042862127157676" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 31.691808767395802,-5.205805672754547 c 5.879553721364061e-3,2.493597961259475e-2 2.2991427605793202e-2,4.75783919553141e-2 3.16648118188696e-2 6.225642677744325e-2" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 31.711972577462916,-5.04232626692882 c -3.953664939657209e-3,-6.508340746820274e-2 -9.44329551919676e-3,-0.11801225901966994 -2.0163810067113097e-2 -0.1634794058257274" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 31.661929314384686,-4.205360512837057 c 4.7781656372351655e-2,-0.35039881339724666 6.298412834573863e-2,-0.6239392027650261 5.004326307822682e-2 -0.8369657540917625" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 28.08645729142907,5.326289096396298 c 2.4270875082384364,-4.854175016476873 3.347932569058263,-7.86302694731943 3.5754720229556165 -9.531649609233355" /></g></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="0.1"><path d="M 28.980884482428987,5.773502691896256 c 10.0,-20.0 -5.0,-10.0 10.0 0.0" /></g></g></g><g fill-opacity="0.0"><g fill-opacity="0.0" stroke-width="0.1"><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 22.22681744227194,-4.975977707743981 c 0.0,1.1652184940288226 4.6232805071259264e-2,5.8820192426981635 4.707106781186548 10.542893218813452" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 22.22527234029002,-5.190961309967571 c 1.3596945248055547e-3,5.336801009862491e-2 1.5451019819199274e-3,0.12796315263602231 1.5451019819199274e-3 0.21498360222359025" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 22.219061458808028,-5.310773112363485 c 2.6673527761378324e-3,3.11932088542779e-2 5.02539135926483e-3,7.328131507884272e-2 6.210881481992558e-3 0.1198118023959136" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 22.17283082599389,-5.555708087831505 c 1.5097180450167613e-2,4.906583646304519e-2 3.7738468810918135e-2,0.14562383531926137 4.623063281413753e-2 0.2449349754680199" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 21.98765210484117,-5.902700770832826 c 5.9159862296237264e-2,7.248909052964869e-2 0.13843512625198873,0.19507599957394817 0.1851787211527185 0.34699268300132147" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 21.651201254320615,-6.170110768106992 c 0.11662169140991807,5.7260927430492714e-2 0.231782074850714,0.13915844190093196 0.33645085052055723 0.26740999727416614" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 21.098403476790917,-6.26695624580832 c 0.20191976907307563,-2.2211174598037786e-2 0.37056518594124643,7.369780030821005e-3 0.5527977775296966 9.684547770132745e-2" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 20.68717773824717,-6.127488517764908 c 0.1437020759541605,-8.692183392465402e-2 0.28088371953770785,-0.12513010595274743 0.41122573854374966 -0.139467728043412" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 20.48926554076378,-5.97114444896771 c 6.721861761310333e-2,-6.819078770254983e-2 0.1366654818483104,-0.1192974443172492 0.19791219748339017 -0.15634406879719798" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 20.34021917756031,-5.779740302591861 c 4.9921581199019904e-2,-8.181592474283761e-2 0.10709836789040317,-0.14884946518015596 0.14904636320346842 -0.19140414637584868" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 20.208899018783505,-5.493502020830686 c 4.542742635734065e-2,-0.12492542248268634 0.10576723145080269,-0.244359873088003 0.13132015877680647 -0.2862382817611753" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 19.662024018783505,-3.911470770830686 c 0.30680648873951233,-0.8437178440336588 0.4701733778151218,-1.3711017889915862 0.546875 -1.58203125" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 15.332390251272024,5.826808696756061 c 2.472343200154557,-4.944686400309114 3.7115479674728395,-8.03854351748049 4.329633767511479 -9.738279467586747" /></g></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="0.1"><path d="M 16.22681744227194,6.274022292256019 c 10.0,-20.0 0.0,-10.0 10.0 0.0" /></g></g></g><g fill-opacity="0.0"><g fill-opacity="0.0"><g fill-opacity="0.0" stroke-width="0.1"><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 13.009770219789226,-2.4104743608548738 c -0.2855399505357896,9.691052866669203e-2 -0.6461909532308479,0.16047436085487377 -1.0892105128500127 0.16047436085487377" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 13.893839526646092,-2.982120392131481 c -0.20403353302645844,0.23318118060166704 -0.4832891526977514,0.4356236759256369 -0.8840693068568655 0.5716460312766074" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 14.185013884508258,-4.851123441588392 c 0.2650946123717697,0.7069189663247197 0.17274121378843077,1.3388138247133696 -0.2911743578621664 1.8690030494569108" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 11.295559706939214,-6.75 c 1.352827876148151,0.0 2.551247208532007,0.9969913076461747 2.8894541775690445 1.898876558411608" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 9.203810396758112,-5.989978417355905 c 0.7131947941382997,-0.5593684659908238 1.4205071509921137,-0.7600215826440948 2.0917493101811013 -0.7600215826440948" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 7.49586988404493,-3.666654710493214 c 0.5144343791036887,-1.1224022816807757 1.1116643005702709,-1.8556560894957013 1.707940512713183 -2.3233237068626913" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 5.920559706939214,6.75 c 0.0,-5.2028660713222505 0.6810675710972038,-8.46557993374737 1.5753101771057156 -10.416654710493214" /></g></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="0.1"><path d="M 6.920559706939214,6.75 c 0.0,-20.0 10.0,-10.0 5.0 -10.0" /></g></g></g><g fill-opacity="0.0"><g fill-opacity="0.0" stroke-width="0.1"><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 2.660826934705069,-8.569475230141833 c 0.4889565094920343,-0.9250528557957409 1.1220197779275782,-1.556458070895495 1.9677823889408277 -1.8947631153007976" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 1.7534960535105757,-5.761630493146541 c 0.21565993096084224,-1.0869260520426458 0.5083600089169344,-2.0530349786323434 0.9073308811944933 -2.8078447369952926" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 0.8835457044574557,1.0837838328712444 c 0.31486663625486244,-2.3929864355369546 0.4763670537345419,-4.86175451761215 0.86995034905312 -6.845414326017785" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -0.7828015282143159,7.11175903331599 c 0.9591837382060433,-1.6232340185025347 1.3712137747622197,-3.7849609203321535 1.6663472326717716 -6.027975200444746" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -5.0,9.46423834544263 c 2.0016683287913244,0.0 3.404020713214209,-0.9763323360826055 4.217198471785684 -2.3524793121266407" /></g></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="0.1"><path d="M -5.0,10.46423834544263 c 10.0,0.0 5.0,-18.0 10.0 -20.0" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600.0" height="302.85875688987323" font-size="1" viewBox="0 0 600 303" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.7051228888683605" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><g><g stroke-width="3.1971054166281756"><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 511.9817800443453,129.7570514462028 c 10.606235857710121,25.069284754587564 34.20547084215346,55.8254698109027 80.48722731216127 86.67997412424124" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 504.6599970504862,99.66254214599796 c 0.33466387043136825,8.255042137307122 2.4133795608657396,18.492828458584018 7.321782993859167 30.094509300204834" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 506.49373385140154,85.26625987587948 c -1.4640943353929654,2.9281886707859424 -2.1082544888015438,7.624845968926011 -1.8337368009153654 14.396282270118487" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 506.20843689577913,85.59271401011557 c 6.779273038019215e-2,-7.684807703746527e-2 0.22264374631797684,-0.20114771562720807 0.2852969556224121 -0.3264541342360786" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 502.6579126738121,87.93569090398208 c 1.0996662998461504,-0.4143670115362421 2.4468736239330267,-1.09190726288214 3.550524221967022 -2.3429768938665214" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 494.06231178115127,87.58378657314935 c 2.9457623866121128,1.3739128917795689 5.382041925447614,1.56281060833337 8.595600892660828 0.35190433083272776" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 489.69619466917715,83.76303109322222 c 1.2338357087118965,2.0880296608970546 2.8653457932043813,3.120790991330947 4.3661171119741375 3.820755479927119" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 489.27962586563393,82.94401200781272 c 7.734890935360485e-2,0.32804714747133107 0.30246544790101604,0.6259210989381142 0.4165688035432176 0.8190190854095305" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 489.54489237921933,85.09467757558335 c -5.201273523887837e-2,-0.8562096416246061 -0.12423198149539025,-1.552519112523536 -0.2652665135854216 -2.1506655677706314" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 488.88654448360757,96.10544324136518 c 0.6285951592007363,-4.609697834138748 0.828592417895299,-8.2082789143452 0.6583478956117675 -11.010765665781841" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 441.84915448663645,221.4997735858574 c 31.929731500854007,-63.859463001708015 44.04397766876603,-103.4426399376551 47.0373899969711 -125.39433034449225" /></g></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="3.1971054166281756"><path d="M 453.61585838946286,227.38312553727062 c 131.55574898915938,-263.11149797831877 -65.77787449457969,-131.55574898915938 131.55574898915938 0.0" /></g></g></g><g><g stroke-width="3.1971054166281756"><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 364.7622235703774,85.96753101537462 c 0.0,15.32911917179821 0.6082191299019319,77.38134470418049 61.92469581709475 138.6978213913733" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 364.7418968655278,83.13929813428342 c 1.788756316072539e-2,0.7020868540585622 2.0326704849611067e-2,1.6834288388046041 2.0326704849611067e-2 2.8282328810911928" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 364.66018914900314,81.56310499408985 c 3.509055922831261e-2,0.4103645954199807 6.611191242317345e-2,0.9640578292107734 8.170771652464312e-2 1.5761931401935576" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 364.0519985963925,78.3408445789562 c 0.1986120881746295,0.6454892865675517 0.49647125301243666,1.9157652726099432 0.6081905526106672 3.222260415133674" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 361.61586606058245,73.77595634835652 c 0.7782819994477024,0.9536356598170914 1.821193672048922,2.5663369233759687 2.4361325358100574 4.56488823059968" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 357.18966169675525,70.25802410049732 c 1.5342253961814387,0.7533004195932371 3.0492264459247083,1.8307093052441525 4.4262043638271615 3.5179322478592" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 349.91728913050906,68.98396616497621 c 2.6563706456126566,-0.29220077101738523 4.874998058580779,9.695369318400074e-2 7.272372566246194 1.2740579355211068" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 344.50737812673475,70.81874430723295 c 1.8904834233446657,-1.1435066965469183 3.695186810264414,-1.646158480970656 5.409911003774321 -1.8347781422567455" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 341.90372938933297,72.87554041429576 c 0.8842995586107709,-0.8970890150369701 1.797912982551884,-1.5694264639648254 2.603648737401782 -2.0567961070628042" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 339.9429387947987,75.39357199790629 c 0.6567471005360201,-1.07633552587847 1.4089406003338527,-1.9582002878411218 1.9607905945342574 -2.518031583610547" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 338.2153466102729,79.15920115255244 c 0.597623909908983,-1.6434657522496974 1.3914287352020123,-3.2146946126988167 1.7275921845258109 -3.7656291546461453" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 331.02089158742825,99.97173175435304 c 4.036215742086064,-11.099593290736674 6.185401087323137,-18.037632279116448 7.194455022844654 -20.812530601800606" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 274.0620702740554,228.08439667676572 c 32.5250961454588,-65.0501922909176 48.82754727700816,-105.75166132240976 56.95882131337286 -128.11266492241268" /></g></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="3.1971054166281756"><path d="M 285.8287741768818,233.96774862817892 c 131.55574898915938,-263.11149797831877 0.0,-131.55574898915938 131.55574898915938 0.0" /></g></g></g><g><g><g stroke-width="3.1971054166281756"><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 243.50666848816087,119.71820244879379 c -3.7564422059063327,1.274913718368207 -8.501013484230306,2.111132473581956 -14.329190482484984 2.111132473581956" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 255.13710847034906,112.19787026866632 c -2.6841784256200127,3.067632486422875 -6.357946646148891,5.7308798963808005 -11.630439982188191 7.520332180127452" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 258.96767454384855,87.61006066523365 c 3.4874720283559038,9.299925408949084 2.272509976123352,17.612865546720847 -3.830566073499483 24.58780960343268" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 220.95524369385342,62.629247877254016 c 17.797228450008376,0.0 33.56312373749303,13.115993821307395 38.01243084999512 24.980812787979637" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 193.4370789740102,72.62776873252105 c 9.382487531803335,-7.358813750433995 18.687588219322443,-9.998520855267019 27.518164719843227 -9.998520855267019" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 170.96813963611902,103.1924277725802 c 6.767680004875894,-14.76584728336559 14.6245829686032,-24.412222671990158 22.468939337891168 -30.564659040059155" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 150.24402861218024,240.2295090126192 c 0.0,-68.44669429030839 8.959835442792022,-111.36957088117335 20.724111023938775 -137.037081240039" /></g></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="3.1971054166281756"><path d="M 163.3996035110962,240.2295090126192 c 0.0,-263.11149797831877 131.55574898915938,-131.55574898915938 65.77787449457969 -131.55574898915938" /></g></g></g><g><g stroke-width="3.1971054166281756"><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 107.3603699766031,38.693005210400855 c 6.432503982934959,-12.169602129876955 14.760815226591284,-20.476100728687896 25.887308602478793 -24.92669807904294" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 95.42391061094953,75.63181695246936 c 2.8371303744504006,-14.299137087230031 6.687768172920306,-27.008855431492076 11.936459365653556 -36.938811742068495" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 83.97921363564316,165.6871778325085 c 4.142251616420563,-31.481112284796282 6.26688245478068,-63.95917569658957 11.444696975306384 -90.05536088003915" /></g><g stroke="rgb(255,0,0)" stroke-opacity="1.0"><path d="M 62.05745780862836,244.98865707076718 c 12.61861350979178,-21.354576708878394 18.039105516309633,-49.793336876899446 21.921755827014795 -79.30147923825866" /></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 6.577787449457958,275.93687485959947 c 26.333097622202164,0.0 44.78184945015078,-12.844213173568285 55.4796703591704 -30.94821778883227" /></g></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="3.1971054166281756"><path d="M 6.577787449457958,289.0924497585154 c 131.55574898915938,0.0 65.77787449457969,-236.8003481804869 131.55574898915938 -263.11149797831877" /></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Offset_expandLoopExample.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="300.0" font-size="1" viewBox="0 0 300 300"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(22.727272727272723,0.0,0.0,22.727272727272723,150.0,150.00000000000003)"><g><g fill="rgb(0,128,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M -5.000000000000001,5.999999999999998 h 5.0 c 0.2652164898395441,-1.2726212873067038e-16 0.5195704027385128,-0.10535684036541806 0.7071067811865477 -0.2928932188134526l 5.0,-5.0 c 0.1875363784480345,-0.1875363784480347 0.29289321881345226,-0.44189029134700364 0.2928932188134524 -0.7071067811865477v -5.0 c 0.0,-0.5522847498307935 -0.44771525016920644,-1.0 -0.9999999999999998 -1.0c -0.26521648983954393,9.478247619436096e-17 -0.5195704027385128,0.10535684036541801 -0.7071067811865476 0.2928932188134525l -10.0,10.0 c -0.39052429175127,0.39052429175126996 -0.3905242917512702,1.023689270621825 -2.220446049250313e-16 1.414213562373095c 0.18753637844803464,0.18753637844803456 0.4418902913470036,0.2928932188134523 0.7071067811865476 0.2928932188134526l 3.3306690738754696e-16,1.7763568394002505e-15 ZM -5.000000000000001,3.9999999999999982 l 2.6645352591003757e-15,7.771561172376096e-16 c -0.5522847498307935,0.0 -1.0,0.44771525016920644 -1.0 0.9999999999999997c -1.1102230246251565e-16,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999996 1.0c 0.26521648983954393,-5.551115123125783e-17 0.5195704027385128,-0.10535684036541795 0.7071067811865476 -0.29289321881345237l 10.0,-10.0 c 0.39052429175126996,-0.3905242917512699 0.39052429175127,-1.023689270621825 0.0 -1.414213562373095c -0.3905242917512699,-0.39052429175126996 -1.023689270621825,-0.39052429175127 -1.414213562373095 -1.1102230246251565e-16c -0.18753637844803453,0.18753637844803472 -0.2928932188134523,0.4418902913470036 -0.2928932188134525 0.7071067811865476v 5.0 c -1.1102230246251565e-16,0.5522847498307935 0.4477152501692063,1.0 0.9999999999999997 1.0000000000000002c 0.5522847498307935,1.1102230246251565e-16 1.0,-0.4477152501692063 1.0000000000000002 -0.9999999999999996c 1.1102230246251565e-16,-0.5522847498307935 -0.4477152501692062,-1.0 -0.9999999999999994 -1.0000000000000002c -0.26521648983954393,5.551115123125783e-17 -0.5195704027385128,0.10535684036541787 -0.7071067811865476 0.29289321881345226l -5.0,5.0 c -0.39052429175126985,0.3905242917512701 -0.3905242917512697,1.023689270621825 4.440892098500626e-16 1.414213562373095c 0.3905242917512701,0.39052429175126985 1.023689270621825,0.39052429175126974 1.414213562373095 -3.3306690738754696e-16c 0.3905242917512699,-0.3905242917512701 0.39052429175126974,-1.023689270621825 -2.220446049250313e-16 -1.4142135623730947c -0.18753637844803472,-0.18753637844803447 -0.44189029134700375,-0.2928932188134522 -0.7071067811865476 -0.2928932188134523l -5.000000000000001,-2.886579864025407e-15 Z" /></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" stroke-width="0.2"><path d="M -5.000000000000001,4.999999999999998 h 5.0 l 5.0,-5.0 v -5.0 l -10.0,10.0 Z" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="300.00000000000006" font-size="1" viewBox="0 0 300 300" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g fill="rgb(0,128,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 36.363636363636374,286.3636363636364 h 113.63636363636363 c 6.027647496353275,-2.892321107515236e-15 11.80841824405711,-2.3944736446685924 16.070608663330628 -6.656664063942104l 113.63636363636363,-113.63636363636363 c 4.262190419273511,-4.262190419273516 6.656664063942097,-10.042961166977355 6.656664063942101 -16.070608663330628v -113.63636363636363 c 0.0,-12.551926132518032 -10.175346594754691,-22.727272727272727 -22.727272727272723 -22.727272727272727c -6.027647496353271,2.1541471862354763e-15 -11.80841824405711,2.394473644668591 -16.070608663330628 6.6566640639421015l -227.27272727272725,227.27272727272725 c -8.875552085256137,8.875552085256135 -8.87555208525614,23.265665241405113 -5.0464682937507114e-15 32.14121732666125c 4.262190419273514,4.262190419273512 10.042961166977355,6.656664063942098 16.07060866333063 6.656664063942117ZM 36.363636363636374,240.9090909090909 c -12.551926132518032,3.7848512203130333e-14 -22.727272727272727,10.17534659475473 -22.727272727272727 22.72727272727276c -2.5232341468753557e-15,12.551926132518032 10.17534659475469,22.727272727272727 22.727272727272716 22.727272727272727c 6.027647496353271,-1.2616170734376779e-15 11.80841824405711,-2.3944736446685897 16.070608663330628 -6.656664063942099l 227.27272727272725,-227.27272727272725 c 8.875552085256135,-8.875552085256134 8.875552085256137,-23.265665241405113 0.0 -32.14121732666125c -8.875552085256134,-8.875552085256135 -23.265665241405113,-8.875552085256137 -32.14121732666125 -2.5232341468753557e-15c -4.262190419273512,4.262190419273517 -6.656664063942098,10.042961166977355 -6.6566640639421015 16.070608663330628v 113.63636363636363 c -2.5232341468753557e-15,12.551926132518032 10.17534659475469,22.727272727272727 22.72727272727272 22.72727272727273c 12.551926132518032,2.5232341468753557e-15 22.727272727272727,-10.17534659475469 22.72727272727273 -22.727272727272716c 2.5232341468753557e-15,-12.551926132518032 -10.175346594754686,-22.727272727272727 -22.727272727272712 -22.72727272727273c -6.027647496353266,1.2616170734376779e-15 -11.808418244057094,2.3944736446685777 -16.07060866333061 6.656664063942079l -113.63636363636363,113.63636363636363 c -8.875552085256132,8.875552085256139 -8.875552085256128,23.265665241405113 1.0092936587501423e-14 32.14121732666125c 8.875552085256139,8.875552085256132 23.265665241405113,8.87555208525613 32.14121732666125 -7.569702440626068e-15c 8.875552085256134,-8.875552085256139 8.87555208525613,-23.265665241405113 -5.0464682937507114e-15 -32.14121732666124c -4.262190419273514,-4.262190419273507 -10.042961166977339,-6.656664063942092 -16.070608663330603 -6.656664063942101Z" /></g></g></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" stroke-width="3.0"><path d="M 36.363636363636374,263.6363636363636 h 113.63636363636363 l 113.63636363636363,-113.63636363636363 v -113.63636363636363 Z" /></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Offset_expandTrailExample.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600.0" height="197.3830287816636" font-size="1" viewBox="0 0 600 197"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(12.98696646675048,0.0,0.0,12.98696646675048,300.0,98.6915143908318)"><g fill-opacity="0.0"><g fill-opacity="0.0"><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><text transform="matrix(1.0,0.0,0.0,1.0,14.00005014902262,5.408430753773163)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineCapSquare</text></g></g><g fill-opacity="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.000025074511312,-9.161939524945151e-2 h -2.0 v 4.0 h 2.0 h 10.0 c 1.104569499661587,-6.763537510981779e-17 2.0,-0.895430500338413 1.9999999999999998 -1.9999999999999998c 0.0,-0.4678730100377969 -0.16403243875498852,-0.9209387968686479 -0.4635574408052485 -1.28036879932896l -5.0,-6.0 l -1.2803687993289596,-1.536442559194752 l -3.072885118389502,2.5607375986579175 l 1.2803687993289596,1.536442559194752 l 5.0,6.0 c 0.7071281620285479,0.8485537944342576 1.9682575640894535,0.9632019218943404 2.8168113585237107 0.2560737598657927c 0.8485537944342576,-0.7071281620285479 0.9632019218943405,-1.9682575640894533 0.25607375986579295 -2.8168113585237107c -0.37998765062862305,-0.4559851807543475 -0.9428828741606051,-0.7196312006710406 -1.5364425591947515 -0.7196312006710406l -10.000000000000002,8.881784197001252e-16 Z" /></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="0.2"><path d="M 9.000025074511312,1.9083806047505485 h 10.0 l -5.0,-6.0 " /></g></g></g><g fill-opacity="0.0"><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><text transform="matrix(1.0,0.0,0.0,1.0,-0.9999999999999947,5.000050149022616)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineCapRound</text></g></g><g fill-opacity="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M -6.000025074511304,-0.4999999999999991 c -1.104569499661587,-6.763537510981779e-17 -2.0,0.8954305003384128 -2.0 1.9999999999999993c -1.3527075021963558e-16,1.104569499661587 0.8954305003384126,2.0 1.9999999999999991 2.0h 10.0 c 1.104569499661587,-6.763537510981779e-17 2.0,-0.895430500338413 1.9999999999999998 -1.9999999999999998c 0.0,-0.4678730100377969 -0.16403243875498852,-0.9209387968686479 -0.4635574408052485 -1.28036879932896l -5.0,-6.0 c -0.7071281620285479,-0.8485537944342575 -1.9682575640894537,-0.9632019218943401 -2.8168113585237107 -0.2560737598657923c -0.848553794434257,0.7071281620285474 -0.9632019218943398,1.9682575640894528 -0.2560737598657927 2.8168113585237107l 5.0,6.0 c 0.7071281620285479,0.8485537944342576 1.9682575640894535,0.9632019218943404 2.8168113585237107 0.2560737598657927c 0.8485537944342576,-0.7071281620285479 0.9632019218943405,-1.9682575640894533 0.25607375986579295 -2.8168113585237107c -0.37998765062862305,-0.4559851807543475 -0.9428828741606051,-0.7196312006710406 -1.5364425591947515 -0.7196312006710406h -10.000000000000004 Z" /></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="0.2"><path d="M -6.000025074511304,1.5000000000000009 h 10.0 l -5.0,-6.0 " /></g></g></g><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><text transform="matrix(1.0,0.0,0.0,1.0,-15.000050149022613,4.640209474175787)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineCapButt</text></g></g><g fill-opacity="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M -21.000075223533923,-0.8598406748468275 v 4.0 h 10.0 c 1.104569499661587,-6.763537510981779e-17 2.0,-0.895430500338413 1.9999999999999998 -1.9999999999999998c 0.0,-0.4678730100377969 -0.16403243875498852,-0.9209387968686479 -0.4635574408052485 -1.28036879932896l -5.0,-6.0 l -3.072885118389502,2.5607375986579175 l 5.0,6.0 c 0.7071281620285479,0.8485537944342576 1.9682575640894535,0.9632019218943404 2.8168113585237107 0.2560737598657927c 0.8485537944342576,-0.7071281620285479 0.9632019218943405,-1.9682575640894533 0.25607375986579295 -2.8168113585237107c -0.37998765062862305,-0.4559851807543475 -0.9428828741606051,-0.7196312006710406 -1.5364425591947515 -0.7196312006710406l -10.000000000000002,8.881784197001252e-16 Z" /></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="0.2"><path d="M -21.000075223533923,1.1401593251531725 h 10.0 l -5.0,-6.0 " /></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600.0" height="197.3830287816636" font-size="1" viewBox="0 0 600 197" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.376545341172593" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><g fill="rgb(0,0,0)" fill-opacity="1.0"><text transform="matrix(12.98696646675048,0.0,0.0,12.98696646675048,481.81818181818187,168.9306232278259)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineCapSquare</text></g></g></g><g><g fill="rgb(0,128,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 416.8830238425919,97.50165637702322 h -25.97393293350096 v 51.94786586700192 h 25.97393293350096 h 129.86966466750482 c 14.345007052300385,-8.783783485172937e-16 25.97393293350096,-11.628925881200574 25.973932933500958 -25.973932933500958c 0.0,-6.076251092058475 -2.130283781570332,-11.960201272862653 -6.020204939150425 -16.62810666195877l -64.93483233375241,-77.92179880050288 l -16.628106661958775,-19.953727994350533 l -39.907455988701045,33.25621332391753 l 16.628106661958775,19.953727994350533 l 64.93483233375241,77.92179880050288 c 9.183449727959651,11.020139673551585 25.561694982757718,12.509071060351415 36.5818346563093 3.325621332391765c 11.020139673551585,-9.183449727959651 12.509071060351415,-25.561694982757714 3.3256213323917683 -36.5818346563093c -4.934886876493225,-5.921864251791868 -12.245188268797092,-9.34582627154219 -19.95372799435053 -9.34582627154219Z" /></g></g></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" stroke-width="3.4413633529314827"><path d="M 416.8830238425919,123.47558931052419 h 129.86966466750482 l -64.93483233375241,-77.92179880050288 " /></g></g></g><g><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><g fill="rgb(0,0,0)" fill-opacity="1.0"><text transform="matrix(12.98696646675048,0.0,0.0,12.98696646675048,287.0130335332496,163.62699800825925)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineCapRound</text></g></g></g><g><g fill="rgb(0,128,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 222.07787555765964,92.19803115745658 c -14.345007052300385,-8.783783485172937e-16 -25.97393293350096,11.628925881200571 -25.97393293350096 25.973932933500954c -1.7567566970345874e-15,14.345007052300385 11.628925881200571,25.97393293350096 25.97393293350095 25.97393293350096h 129.86966466750482 c 14.345007052300385,-8.783783485172937e-16 25.97393293350096,-11.628925881200574 25.973932933500958 -25.973932933500958c 0.0,-6.076251092058475 -2.130283781570332,-11.960201272862653 -6.020204939150425 -16.62810666195877l -64.93483233375241,-77.92179880050288 c -9.183449727959651,-11.020139673551583 -25.56169498275772,-12.50907106035141 -36.5818346563093 -3.3256213323917594c -11.020139673551583,9.183449727959651 -12.509071060351411,25.56169498275772 -3.3256213323917625 36.5818346563093l 64.93483233375241,77.92179880050288 c 9.183449727959651,11.020139673551585 25.561694982757718,12.509071060351415 36.5818346563093 3.325621332391765c 11.020139673551585,-9.183449727959651 12.509071060351415,-25.561694982757714 3.3256213323917683 -36.5818346563093c -4.934886876493225,-5.921864251791868 -12.245188268797092,-9.34582627154219 -19.95372799435053 -9.34582627154219Z" /></g></g></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" stroke-width="3.4413633529314827"><path d="M 222.07787555765964,118.17196409095754 h 129.86966466750482 l -64.93483233375241,-77.92179880050288 " /></g></g></g><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><g fill="rgb(0,0,0)" fill-opacity="1.0"><text transform="matrix(12.98696646675048,0.0,0.0,12.98696646675048,105.19485171506778,158.95375923065063)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineCapButt</text></g></g></g><g><g fill="rgb(0,128,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 27.272727272727366,87.52479237984795 v 51.94786586700192 h 129.86966466750482 c 14.345007052300385,-8.783783485172937e-16 25.97393293350096,-11.628925881200574 25.973932933500958 -25.973932933500958c 0.0,-6.076251092058475 -2.130283781570332,-11.960201272862653 -6.020204939150425 -16.62810666195877l -64.93483233375241,-77.92179880050288 l -39.907455988701045,33.25621332391753 l 64.93483233375241,77.92179880050288 c 9.183449727959651,11.020139673551585 25.561694982757718,12.509071060351415 36.5818346563093 3.325621332391765c 11.020139673551585,-9.183449727959651 12.509071060351415,-25.561694982757714 3.3256213323917683 -36.5818346563093c -4.934886876493225,-5.921864251791868 -12.245188268797092,-9.34582627154219 -19.95372799435053 -9.34582627154219Z" /></g></g></g><g stroke="rgb(255,255,255)" stroke-opacity="1.0" stroke-width="3.4413633529314827"><path d="M 27.272727272727366,113.49872531334891 h 129.86966466750482 l -64.93483233375241,-77.92179880050288 " /></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Offset_offsetTrailExample.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600.0" height="185.1008379753402" font-size="1" viewBox="0 0 600 185"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(13.702641330909062,0.0,0.0,13.702641330909062,300.0,92.5504189876701)"><g fill-opacity="0.0" stroke-width="0.2"><g fill-opacity="0.0"><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><text transform="matrix(1.0,0.0,0.0,1.0,14.135041612651108,4.64018439966448)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineJoinBevel</text></g></g><g fill-opacity="0.0"><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 8.366820333053731,3.14018439966448 h 10.0 l 1.536442559194752,-3.2803687993289596 l -5.0,-6.0 " /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M 8.366820333053731,1.1401843996644798 h 10.0 l -5.0,-6.0 " /></g></g></g><g fill-opacity="0.0"><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><text transform="matrix(1.0,0.0,0.0,1.0,1.366820333053731,4.64018439966448)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineJoinRound</text></g></g><g fill-opacity="0.0"><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -4.633179666946269,3.14018439966448 h 10.0 c 1.104569499661587,-6.763537510981779e-17 2.0,-0.895430500338413 1.9999999999999998 -1.9999999999999998c 0.0,-0.4678730100377969 -0.16403243875498852,-0.9209387968686479 -0.4635574408052485 -1.28036879932896l -5.0,-6.0 " /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -4.633179666946269,1.1401843996644798 h 10.0 l -5.0,-6.0 " /></g></g></g><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><text transform="matrix(1.0,0.0,0.0,1.0,-12.768221279597377,4.64018439966448)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineJoinMiter</text></g></g><g fill-opacity="0.0"><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -19.903262892248485,3.14018439966448 h 10.0 h 4.270083225302217 l -2.7336406661074655,-3.2803687993289596 l -5.0,-6.0 " /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -19.903262892248485,1.1401843996644798 h 10.0 l -5.0,-6.0 " /></g></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600.0" height="185.1008379753402" font-size="1" viewBox="0 0 600 185" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.333029648793779" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="3.0"><g><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><g fill="rgb(0,0,0)" fill-opacity="1.0"><text transform="matrix(13.702641330909062,0.0,0.0,13.702641330909062,493.6874054156325,156.13320152555207)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineJoinBevel</text></g></g></g><g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 414.64753810399236,135.57923952918844 h 137.02641330909063 l 21.0533213141897,-44.949717090309534 l -68.51320665454531,-82.21584798545437 " /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0"><path d="M 414.64753810399236,108.17395686737032 h 137.02641330909063 l -68.51320665454531,-82.21584798545437 " /></g></g></g><g><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><g fill="rgb(0,0,0)" fill-opacity="1.0"><text transform="matrix(13.702641330909062,0.0,0.0,13.702641330909062,318.7290487876289,156.13320152555207)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineJoinRound</text></g></g></g><g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 236.51320080217454,135.57923952918844 h 137.02641330909063 c 15.135519678924403,-9.267832864113272e-16 27.405282661818124,-12.269762982893718 27.40528266181812 -27.40528266181812c 0.0,-6.411096044960741 -2.247677674893909,-12.619294021209988 -6.3519613476284205 -17.54443442849141l -68.51320665454531,-82.21584798545437 " /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0"><path d="M 236.51320080217454,108.17395686737032 h 137.02641330909063 l -68.51320665454531,-82.21584798545437 " /></g></g></g><g><g fill="rgb(0,0,0)" fill-opacity="1.0" font-weight="bold" font-family="Helvetica"><g fill="rgb(0,0,0)" fill-opacity="1.0"><text transform="matrix(13.702641330909062,0.0,0.0,13.702641330909062,125.0416433719964,156.13320152555207)" dominant-baseline="middle" text-anchor="middle" stroke="none">LineJoinMiter</text></g></g></g><g><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 27.27272727272728,135.57923952918844 h 137.02641330909063 h 58.51141888944763 l -37.45809757525794,-44.949717090309534 l -68.51320665454531,-82.21584798545437 " /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0"><path d="M 27.27272727272728,108.17395686737032 h 137.02641330909063 l -68.51320665454531,-82.21584798545437 " /></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Offset_offsetTrailLeftExample.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="200.0" height="154.67216693398285" font-size="1" viewBox="0 0 200 155"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(15.151451832306767,0.0,0.0,15.151451832306767,100.0,77.33608346699143)"><g fill-opacity="0.0" stroke-width="0.2"><g stroke="rgb(0,128,0)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -6.000025074511308,-4.64018439966448 h 10.0 c 0.4678730100377967,1.6653345369377348e-16 0.9209387968686479,0.16403243875498819 1.28036879932896 0.46355744080524836c 0.8485537944342573,0.7071281620285479 0.9632019218943395,1.9682575640894537 0.2560737598657916 2.816811358523711l -5.0,6.0 " /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" fill-opacity="0.0"><path d="M -6.000025074511308,-2.64018439966448 h 10.0 l -5.0,6.0 " /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="200.0" height="154.67216693398285" font-size="1" viewBox="0 0 200 155" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.7035274935556856" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="3.0"><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 9.090909090909093,7.030553042453764 h 151.51451832306768 c 7.088955375224059,5.0464472042177966e-15 13.953559821257857,2.4853295947320184 19.399446190621173 7.023568235868117c 12.856821943491788,10.714018286243158 14.59390752436739,29.82195967587481 3.8798892381242314 42.678781619366596l -75.75725916153384,90.9087109938406 " /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0"><path d="M 9.090909090909093,37.3334567070673 h 151.51451832306768 l -75.75725916153384,90.9087109938406 " /></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Offset_offsetTrailOuterExample.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="271.2911579538083" font-size="1" viewBox="0 0 300 271"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(19.48051948051948,0.0,0.0,19.48051948051948,150.0,135.64557897690415)"><g stroke-width="0.2"><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 4.232050807568877,5.330127018922195 l 2.500000000000001,-4.330127018922193 c 0.35726558990816415,-0.6188021535170062 0.35726558990816465,-1.3811978464829942 1.1102230246251565e-15 -2.0000000000000004l -2.4999999999999982,-4.330127018922194 c -0.35726558990816315,-0.6188021535170058 -1.0175196277525493,-0.9999999999999999 -1.7320508075688763 -1.0000000000000004l -5.0,-2.220446049250313e-15 c -0.714531179816327,-3.61068003170518e-16 -1.3747852176607136,0.381197846482993 -1.7320508075688776 0.9999999999999987l -2.5000000000000013,4.330127018922193 c -0.35726558990816415,0.6188021535170058 -0.357265589908165,1.381197846482994 -1.4432899320127035e-15 2.0l 2.4999999999999964,4.3301270189221945 c 0.35726558990816343,0.6188021535170066 1.0175196277525498,1.0000000000000009 1.7320508075688772 1.000000000000001h 5.000000000000002 c 0.714531179816327,2.735631709452133e-16 1.3747852176607136,-0.3811978464829932 1.7320508075688776 -0.9999999999999989l 8.881784197001252e-16,6.661338147750939e-16 Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0"><path d="M 2.4999999999999996,4.3301270189221945 l 2.500000000000001,-4.330127018922193 l -2.4999999999999982,-4.330127018922194 l -5.0,-2.220446049250313e-15 l -2.5000000000000013,4.330127018922193 l 2.4999999999999964,4.3301270189221945 h 5.000000000000002 Z" /></g></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="271.2911579538083" font-size="1" viewBox="0 0 300 271" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="1.141138711190835" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g stroke-width="3.0"><g stroke="rgb(0,128,0)" stroke-opacity="1.0"><path d="M 232.44254819939368,239.47922220266122 l 48.701298701298725,-84.35312374523753 c 6.959719283925273,-12.05458740617544 6.959719283925287,-26.906451554863526 1.9464949133038462e-14 -38.961038961038966l -48.701298701298676,-84.35312374523755 c -6.959719283925259,-12.054587406175445 -19.82181093024447,-19.480519480519487 -33.741249498095 -19.4805194805195l -97.40259740259742,-4.325544251786325e-14 c -13.919438567850523,-7.0337922695555446e-15 -26.781530214169745,7.42593207434402 -33.741249498095016 19.480519480519458l -48.70129870129873,84.35312374523753 c -6.959719283925277,12.05458740617544 -6.959719283925293,26.906451554863523 -2.811603763661111e-14 38.961038961038966l 48.70129870129864,84.35312374523757 c 6.9597192839252635,12.054587406175456 19.82181093024449,19.480519480519504 33.74124949809503 19.4805194805195h 97.40259740259745 c 13.919438567850523,2.238416443174295e-15 26.78153021416974,-7.42593207434403 33.74124949809499 -19.480519480519447Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0"><path d="M 198.70129870129864,219.99870272214173 l 48.701298701298725,-84.35312374523753 l -48.701298701298676,-84.35312374523755 l -97.40259740259742,-4.325544251786325e-14 l -48.70129870129873,84.35312374523753 l 48.70129870129864,84.35312374523757 Z" /></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_decagonEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="95.10565162951534" font-size="1" viewBox="0 0 100 95"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(28.092454034086124,0.0,0.0,28.092454034086124,49.99999999999999,47.55282581475767)"><path d="M 1.3090169943749481,0.9510565162951532 l 0.3090169943749472,-0.9510565162951536 l -0.3090169943749477,-0.9510565162951534 l -0.8090169943749475,-0.5877852522924729 l -1.0,4.440892098500626e-16 l -0.8090169943749473,0.5877852522924731 l -0.3090169943749473,0.9510565162951536 l 0.3090169943749475,0.9510565162951535 l 0.8090169943749475,0.587785252292473 l 1.0,-5.551115123125783e-17 l 0.8090169943749477,-0.5877852522924736 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="95.10565162951534" font-size="1" viewBox="0 0 100 95" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 86.7734997443158,74.27033728259734 l 8.681045710229654,-26.717511467839685 l -8.681045710229668,-26.717511467839678 l -22.727272727272723,-16.512330181940012 l -28.092454034086124,4.678333393029941e-15 l -22.72727272727272,16.51233018194002 l -8.681045710229657,26.717511467839685 l 8.681045710229663,26.71751146783968 l 22.727272727272723,16.512330181940015 l 28.092454034086124,-1.5594444643433139e-15 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_dodecagonEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="99.99999999999999" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(24.35901749373842,0.0,0.0,24.35901749373842,50.0,49.99999999999999)"><path d="M 1.8660254037844393,0.4999999999999996 l -2.220446049250313e-16,-1.0 l -0.5000000000000001,-0.8660254037844386 l -0.8660254037844387,-0.49999999999999994 l -1.0,1.6081226496766364e-16 l -0.8660254037844386,0.49999999999999994 l -0.5000000000000001,0.8660254037844386 l -3.4450928483976665e-16,1.0 l 0.49999999999999956,0.8660254037844389 l 0.8660254037844385,0.5000000000000002 l 1.0,-3.834758505292834e-17 l 0.8660254037844385,-0.5000000000000003 l 0.5000000000000021,-0.8660254037844389 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="99.99999999999999" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 95.45454545454545,62.179508746869196 l -5.408788415759074e-15,-24.35901749373842 l -12.179508746869214,-21.09552796080702 l -21.095527960807022,-12.179508746869208 l -24.35901749373842,3.917228775555017e-15 l -21.09552796080702,12.179508746869208 l -12.179508746869214,21.09552796080702 l -8.391907696167188e-15,24.35901749373842 l 12.1795087468692,21.095527960807026 l 21.095527960807015,12.179508746869216 l 24.35901749373842,-9.341094951469035e-16 l 21.095527960807015,-12.17950874686922 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_hendecagonEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="98.98214418809323" font-size="1" viewBox="0 0 100 99"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(25.875425140597297,0.0,0.0,25.875425140597297,50.00000000000001,50.5141613269018)"><path d="M 1.7566685458330673,0.2525708066345108 l -0.1423148382732844,-0.9898214418809328 l -0.6548607339452844,-0.7557495743542588 l -0.9594929736144971,-0.28173255684143045 l -0.9594929736144977,0.28173255684142884 l -0.6548607339452855,0.7557495743542577 l -0.14231483827328584,0.9898214418809326 l 0.4154150130018858,0.9096319953545187 l 0.841253532831181,0.5406408174555977 l 0.9999999999999999,-2.7755575615628914e-17 l 0.8412535328311814,-0.5406408174555973 l 0.41541501300188677,-0.9096319953545157 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="98.98214418809326" font-size="1" viewBox="0 0 100 99" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 95.45454545454545,57.04953832667333 l -3.6824569441366046,-25.612050621948153 l -16.94479989871783,-19.55534153624188 l -24.827288611691024,-7.289949684219485 l -24.827288611691028,7.289949684219488 l -16.944799898717825,19.55534153624188 l -3.6824569441365966,25.612050621948153 l 10.74904007121057,23.537114601287985 l 21.767792813036245,13.989311000023635 l 25.875425140597297,-1.4363746381527874e-15 l 21.767792813036245,-13.989311000023637 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_heptagonEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="97.49279121818235" font-size="1" viewBox="0 0 100 97"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(40.45835162842079,0.0,0.0,40.45835162842079,50.0,51.28584316362768)"><path d="M 1.1234898018587336,0.2564292158181373 l -0.22252093395631548,-0.9749279121818234 l -0.9009688679024197,-0.4338837391175572 l -0.9009688679024187,0.43388373911755906 l -0.22252093395631345,0.9749279121818237 l 0.6234898018587343,0.7818314824680291 l 1.0,-2.7755575615628914e-17 l 0.6234898018587329,-0.7818314824680312 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="97.49279121818235" font-size="1" viewBox="0 0 100 97" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 95.45454545454544,61.66054654499813 l -9.002830190689187,-39.443976283414365 l -36.45171526385628,-17.554220883072148 l -36.45171526385627,17.554220883072173 l -9.002830190689156,39.443976283414365 l 25.22536964033506,31.631613031861047 l 40.45835162842079,-1.0106503541157029e-14 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_hexagonEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="86.6025403784439" font-size="1" viewBox="0 0 100 87"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(45.45454545454546,0.0,0.0,45.45454545454546,50.0,43.30127018922196)"><path d="M 0.49999999999999967,0.8660254037844387 l 0.5000000000000002,-0.8660254037844385 l -0.4999999999999996,-0.8660254037844388 l -0.9999999999999999,-4.440892098500626e-16 l -0.5000000000000003,0.8660254037844384 l 0.49999999999999933,0.866025403784439 l 1.0000000000000002,2.220446049250313e-16 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="86.6025403784439" font-size="1" viewBox="0 0 100 87" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 72.72727272727272,82.66606127033282 l 22.72727272727274,-39.364791081110845 l -22.727272727272712,-39.36479108111086 l -45.45454545454545,-2.018587317500285e-14 l -22.727272727272744,39.36479108111084 l 22.727272727272698,39.36479108111087 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_hruleEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="48.00000000000001" font-size="1" viewBox="0 0 300 48"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(54.54545454545455,0.0,0.0,54.54545454545455,150.0,24.000000000000004)"><g fill-opacity="0.0"><g fill-opacity="0.0"><path d="M -2.5,0.4 h 5.0 " /></g><g fill-opacity="0.0"><g fill-opacity="0.0"><path d="M -2.0,0.2 h 4.0 " /></g><path d="M -1.5,0.0 h 3.0 " /></g><g fill-opacity="0.0"><path d="M -1.0,-0.2 h 2.0 " /></g><path d="M -0.5,-0.4 h 1.0 " /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="300.0" height="48.00000000000001" font-size="1" viewBox="0 0 300 48" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><path d="M 13.636363636363626,45.81818181818183 h 272.72727272727275 " /></g><g><g><path d="M 40.90909090909091,34.909090909090914 h 218.1818181818182 " /></g><path d="M 68.18181818181819,24.000000000000004 h 163.63636363636363 " /></g><g><path d="M 95.45454545454545,13.090909090909093 h 109.0909090909091 " /></g><path d="M 122.72727272727272,2.1818181818181834 h 54.54545454545455 " /></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_nonagonEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="98.48077530122075" font-size="1" viewBox="0 0 100 98"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(31.572395939441876,0.0,0.0,31.572395939441876,50.0,50.771330594287235)"><path d="M 1.266044443118978,0.7309511000407727 l 0.1736481776669308,-0.984807753012208 l -0.49999999999999956,-0.8660254037844388 l -0.9396926207859082,-0.3420201433256692 l -0.9396926207859086,0.3420201433256681 l -0.5000000000000006,0.8660254037844384 l 0.17364817766692983,0.9848077530122082 l 0.766044443118978,0.6427876096865394 l 1.0,-2.7755575615628914e-17 l 0.7660444431189786,-0.6427876096865375 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="98.48077530122083" font-size="1" viewBox="0 0 100 98" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 89.97205643508258,73.84920813714508 l 5.482489019462867,-31.09274030233352 l -15.786197969720943,-27.342496941897323 l -29.668347484824512,-10.798395384342669 l -29.668347484824512,10.798395384342673 l -15.786197969720938,27.342496941897327 l 5.4824890194628795,31.09274030233352 l 24.185858465361633,20.294344917990855 l 31.57239593944188,5.257860137182526e-15 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_octagonEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="99.99999999999999" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(37.65577839755409,0.0,0.0,37.65577839755409,50.00000000000001,50.00000000000001)"><path d="M 1.2071067811865475,0.4999999999999996 l -2.220446049250313e-16,-1.0 l -0.7071067811865476,-0.7071067811865475 l -1.0,1.6081226496766364e-16 l -0.7071067811865475,0.7071067811865476 l 9.957992501029599e-17,1.0 l 0.7071067811865476,0.7071067811865476 l 1.0,-3.834758505292834e-17 l 0.7071067811865477,-0.7071067811865477 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="99.99999999999999" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 95.45454545454544,68.82788919877703 l -8.361262437429426e-15,-37.65577839755409 l -26.626656255768403,-26.6266562557684 l -37.65577839755409,6.0555110132310925e-15 l -26.6266562557684,26.626656255768403 l 3.74975958903276e-15,37.65577839755409 l 26.626656255768403,26.626656255768403 l 37.65577839755409,-1.4440081648344269e-15 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_pentagonEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="95.10565162951538" font-size="1" viewBox="0 0 100 95"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(56.18490806817227,0.0,0.0,56.18490806817227,50.00000000000001,52.573111211913364)"><path d="M 0.5000000000000001,0.6881909602355868 l 0.3090169943749472,-0.9510565162951536 l -0.8090169943749475,-0.5877852522924729 l -0.8090169943749473,0.5877852522924731 l 0.3090169943749479,0.9510565162951533 l 0.9999999999999996,1.1102230246251565e-16 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="95.10565162951536" font-size="1" viewBox="0 0 100 95" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 78.09245403408613,91.239057046097 l 17.362091420459326,-53.43502293567938 l -45.45454545454545,-33.024660363880045 l -45.45454545454546,33.02466036388004 l 17.362091420459322,53.435022935679385 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_rectEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="150.0" height="104.99999999999999" font-size="1" viewBox="0 0 150 105"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(136.36363636363635,0.0,0.0,136.36363636363635,74.99999999999999,52.49999999999999)"><path d="M 0.5000000000000001,0.35 l -1.1102230246251565e-16,-0.7 h -1.0 l -1.1102230246251565e-16,0.7 h 1.0 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="150.0" height="104.99999999999999" font-size="1" viewBox="0 0 150 105" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5019960159204453" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 143.1818181818182,100.22727272727272 l -1.5139404881252133e-14,-95.45454545454544 h -136.36363636363635 l -1.5139404881252133e-14,95.45454545454544 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_roundedRectEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="76.19047619047622" font-size="1" viewBox="0 0 400 76"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(173.1601731601732,0.0,0.0,173.1601731601732,199.99999999999997,38.09523809523811)"><g><g><path d="M 1.0499999999999998,0.10000000000000003 v -0.1 c -0.11045694996615868,-4.4408920985006264e-17 -0.19999999999999996,-8.954305003384136e-2 -0.19999999999999996 -0.20000000000000007h -0.29999999999999993 c -0.1104569499661587,-6.763537510981779e-18 -0.2,8.954305003384128e-2 -0.2 0.19999999999999996v 0.2 h 0.6 c 5.522847498307935e-2,1.014530626647267e-17 0.1,-4.477152501692063e-2 9.999999999999992e-2 -9.999999999999992e-2Z" /></g><g><path d="M 0.15000000000000013,0.10000000000000003 v -0.20000000000000004 c -5.522847498307934e-2,-2.2204460492503132e-17 -9.999999999999998e-2,-4.477152501692068e-2 -9.999999999999998e-2 -0.10000000000000003h -0.3 c -2.2204460492503132e-17,5.5228474983079326e-2 -4.477152501692068e-2,9.999999999999998e-2 -0.10000000000000003 9.999999999999996e-2v 0.2 c 5.522847498307934e-2,2.2204460492503132e-17 9.999999999999998e-2,4.477152501692068e-2 9.999999999999996e-2 0.10000000000000003h 0.30000000000000004 c 0.0,-5.522847498307934e-2 4.477152501692068e-2,-9.999999999999998e-2 9.999999999999998e-2 -9.999999999999998e-2Z" /></g><path d="M -0.5499999999999998,0.10000000000000003 v -0.20000000000000004 c 0.0,-5.522847498307935e-2 -4.4771525016920645e-2,-0.1 -9.999999999999998e-2 -0.1h -0.3 c -5.522847498307935e-2,-3.3817687554908897e-18 -0.1,4.477152501692064e-2 -0.1 9.999999999999998e-2v 0.2 c -6.763537510981779e-18,5.522847498307935e-2 4.477152501692064e-2,0.1 9.999999999999998e-2 0.10000000000000003h 0.30000000000000004 c 5.522847498307935e-2,1.014530626647267e-17 0.1,-4.477152501692063e-2 9.999999999999998e-2 -9.999999999999998e-2Z" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400.0" height="76.19047619047622" font-size="1" viewBox="0 0 400 76" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.6982972487551757" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><path d="M 381.81818181818187,55.41125541125544 v -17.31601731601732 c -19.126744582884623,-7.689856447620133e-15 -34.63203463203463,-15.505290049150023 -34.63203463203463 -34.63203463203465h -51.94805194805195 c -19.126744582884626,-1.1711753265769319e-15 -34.63203463203464,15.505290049150009 -34.63203463203464 34.63203463203463v 34.63203463203464 h 103.89610389610392 c 9.563372291442313,1.7567629898653979e-15 17.31601731601732,-7.752645024575003 17.31601731601728 -17.316017316017295Z" /></g><g><path d="M 225.97402597402595,55.41125541125544 v -34.632034632034646 c -9.563372291442311,-3.844928223810067e-15 -17.316017316017316,-7.752645024575012 -17.316017316017316 -17.316017316017327h -51.94805194805196 c -3.844928223810067e-15,9.56337229144231 -7.752645024575012,17.316017316017316 -17.316017316017327 17.316017316017312v 34.63203463203464 c 9.563372291442311,3.844928223810067e-15 17.316017316017316,7.752645024575012 17.316017316017312 17.316017316017327h 51.94805194805197 c 0.0,-9.563372291442311 7.752645024575012,-17.316017316017316 17.316017316017323 -17.31601731601731Z" /></g><path d="M 104.76190476190474,55.41125541125544 v -34.632034632034646 c 0.0,-9.563372291442313 -7.752645024575005,-17.31601731601732 -17.316017316017316 -17.31601731601732h -51.94805194805196 c -9.563372291442313,-5.855876632884659e-16 -17.31601731601732,7.7526450245750045 -17.31601731601732 17.316017316017316v 34.63203463203464 c -1.1711753265769319e-15,9.563372291442313 7.7526450245750045,17.31601731601732 17.316017316017316 17.316017316017327h 51.94805194805197 c 9.563372291442313,1.7567629898653979e-15 17.31601731601732,-7.752645024575003 17.31601731601731 -17.316017316017316Z" /></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_squareEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="200.0" height="85.71428571428572" font-size="1" viewBox="0 0 200 86"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="3.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(25.974025974025974,0.0,0.0,25.974025974025974,100.0,42.85714285714286)"><g><g><path d="M 3.5000000000000004,1.5 l -3.3306690738754696e-16,-3.0 h -3.0 l -3.3306690738754696e-16,3.0 h 3.000000000000001 Z" /></g><g><path d="M 2.220446049250313e-16,1.0 l -2.220446049250313e-16,-2.0 h -2.0 l -2.220446049250313e-16,2.0 h 2.0 Z" /></g><path d="M -2.5,0.5 l -1.1102230246251565e-16,-1.0 h -1.0 l -1.1102230246251565e-16,1.0 h 1.0 Z" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="200.0" height="85.71428571428572" font-size="1" viewBox="0 0 200 86" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5237229365663817" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><path d="M 190.90909090909093,81.81818181818181 l -8.651088503572648e-15,-77.92207792207792 h -77.92207792207792 l -8.651088503572648e-15,77.92207792207792 Z" /></g><g><path d="M 100.0,68.83116883116884 l -5.767392335715099e-15,-51.94805194805195 h -51.94805194805195 l -5.767392335715099e-15,51.94805194805195 Z" /></g><path d="M 35.06493506493507,55.84415584415585 l -2.8836961678575494e-15,-25.974025974025974 h -25.974025974025974 l -2.8836961678575494e-15,25.974025974025974 Z" /></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_triangleEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="86.60254037844385" font-size="1" viewBox="0 0 100 87"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(90.9090909090909,0.0,0.0,90.9090909090909,50.0,57.73502691896257)"><path d="M 0.5,0.28867513459481275 l -0.5000000000000002,-0.8660254037844385 l -0.4999999999999999,0.8660254037844386 l 1.0,-1.1102230246251565e-16 Z" /></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="86.60254037844385" font-size="1" viewBox="0 0 100 87" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 95.45454545454545,83.97822097303646 l -45.454545454545475,-78.72958216222167 l -45.454545454545446,78.72958216222169 Z" /></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_unitSquareEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill="rgb(0,0,0)" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(90.9090909090909,0.0,0.0,90.9090909090909,49.99999999999999,50.0)"><path d="M 0.5000000000000001,0.5 l -1.1102230246251565e-16,-1.0 h -1.0 l -1.1102230246251565e-16,1.0 h 1.0 Z" /><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 2.2000000000000002e-2,0.0 c 0.0,-1.2150264496277458e-2 -9.849735503722543e-3,-2.2000000000000002e-2 -2.2e-2 -2.2000000000000002e-2c -1.2150264496277458e-2,-7.439891262079958e-19 -2.2000000000000002e-2,9.849735503722541e-3 -2.2000000000000002e-2 2.1999999999999995e-2c -1.4879782524159916e-18,1.2150264496277458e-2 9.84973550372254e-3,2.2000000000000002e-2 2.1999999999999992e-2 2.2000000000000002e-2c 1.2150264496277458e-2,2.2319673786239874e-18 2.2000000000000002e-2,-9.84973550372254e-3 2.2000000000000006e-2 -2.1999999999999995e-2Z" /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="100.0" height="100.0" font-size="1" viewBox="0 0 100 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><path d="M 95.45454545454545,95.45454545454545 l -1.0092936587501423e-14,-90.9090909090909 h -90.9090909090909 l -1.0092936587501423e-14,90.9090909090909 Z" /><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><g fill="rgb(255,0,0)" fill-opacity="1.0"><path d="M 51.99999999999999,50.0 c 0.0,-1.104569499661587 -0.895430500338413,-2.0 -1.9999999999999998 -2.0c -1.104569499661587,-6.76353751098178e-17 -2.0,0.8954305003384128 -2.0 1.9999999999999996c -1.352707502196356e-16,1.104569499661587 0.8954305003384126,2.0 1.9999999999999991 2.0c 1.104569499661587,2.029061253294534e-16 2.0,-0.8954305003384126 2.000000000000001 -1.9999999999999996Z" /></g></g></g></g></g></g></svg>
diagrams/src_Diagrams_TwoD_Shapes_vruleEx.svg view
@@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="50.00000000000001" height="100.0" font-size="1" viewBox="0 0 50 100"><g><g stroke="rgb(0,0,0)" stroke-opacity="1.0" fill-opacity="0.0" stroke-width="1.0e-2" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g transform="matrix(45.45454545454546,0.0,0.0,45.45454545454546,25.000000000000004,50.0)"><g fill-opacity="0.0"><g fill-opacity="0.0"><g fill-opacity="0.0"><path d="M 0.5,-0.9999999999999999 v 1.9999999999999998 " /></g><path d="M 0.30000000000000004,-0.8999999999999999 v 1.7999999999999998 " /></g><g fill-opacity="0.0"><g fill-opacity="0.0"><path d="M 0.10000000000000003,-0.7999999999999999 v 1.5999999999999999 " /></g><path d="M -9.999999999999998e-2,-0.7 v 1.4 " /></g><g fill-opacity="0.0"><path d="M -0.3,-0.6 v 1.2 " /></g><path d="M -0.5,-0.5 v 1.0 " /></g></g></g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="50.00000000000001" height="100.0" font-size="1" viewBox="0 0 50 100" stroke="rgb(0,0,0)" stroke-opacity="1"><g><g fill="rgb(0,0,0)" fill-opacity="0.0"><g stroke="rgb(0,0,0)" stroke-opacity="1.0" stroke-width="0.5" stroke-linecap="butt" stroke-linejoin="miter" font-size="1.0em" stroke-miterlimit="10.0"><g><g><g><path d="M 47.727272727272734,4.545454545454547 v 90.9090909090909 " /></g><path d="M 38.63636363636364,9.090909090909086 v 81.81818181818183 " /></g><g><g><path d="M 29.545454545454547,13.636363636363633 v 72.72727272727273 " /></g><path d="M 20.454545454545457,18.18181818181818 v 63.63636363636364 " /></g><g><path d="M 11.363636363636365,22.727272727272723 v 54.545454545454554 " /></g><path d="M 2.2727272727272734,27.27272727272727 v 45.45454545454546 " /></g></g></g></g></svg>
+ src/Diagrams/Angle.hs view
@@ -0,0 +1,113 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE RankNTypes                 #-}+{-# LANGUAGE TypeFamilies               #-}+-----------------------------------------------------------------------------+-- |+-- Module      :  Diagrams.Angle+-- Copyright   :  (c) 2013 diagrams-lib team (see LICENSE)+-- License     :  BSD-style (see LICENSE)+-- Maintainer  :  diagrams-discuss@googlegroups.com+--+-- Type for representing angles, independent of vector-space+--+-----------------------------------------------------------------------------++module Diagrams.Angle+       (+         Angle+       , rad, turn, deg+       , fullTurn, fullCircle, angleRatio+       , sinA, cosA, tanA, asinA, acosA, atanA+       , (@@)+       , angleBetween+       , HasTheta(..)+       ) where++import           Control.Lens            (Iso', Lens', iso, review, (^.))+                                         -- , review , (^.), _1, _2, Lens', lens)++import           Data.VectorSpace++-- | Angles can be expressed in a variety of units.  Internally,+-- they are represented in radians.+newtype Angle = Radians Double+              deriving (Read, Show, Eq, Ord, Enum, AdditiveGroup)++instance VectorSpace Angle where+  type Scalar Angle = Double+  s *^ Radians t = Radians (s*t)++-- | The radian measure of an @Angle@ @a@ can be accessed as @a+-- ^. rad@.  A new @Angle@ can be defined in radians as @pi \@\@ rad@.+rad :: Iso' Angle Double+rad = iso (\(Radians r) -> r) Radians++-- | The measure of an @Angle@ @a@ in full circles can be accessed as+-- @a ^. turn@.  A new @Angle@ of one-half circle can be defined in as+-- @1/2 \@\@ turn@.+turn :: Iso' Angle Double+turn = iso (\(Radians r) -> r/2/pi) (Radians . (*(2*pi)))++-- | The degree measure of an @Angle@ @a@ can be accessed as @a+-- ^. deg@.  A new @Angle@ can be defined in degrees as @180 \@\@+-- deg@.+deg :: Iso' Angle Double+deg = iso (\(Radians r) -> r/2/pi*360) (Radians . (*(2*pi/360)))++-- | An angle representing one full turn.+fullTurn :: Angle+fullTurn = 1 @@ turn++-- | Deprecated synonym for 'fullTurn', retained for backwards compatibility.+fullCircle :: Angle+fullCircle = fullTurn++-- | Calculate ratio between two angles.+angleRatio :: Angle -> Angle -> Double+angleRatio a b = (a^.rad) / (b^.rad)++-- | The sine of the given @Angle@.+sinA :: Angle -> Double+sinA (Radians r) = sin r++-- | The cosine of the given @Angle@.+cosA :: Angle -> Double+cosA (Radians r) = cos r++-- | The tangent function of the given @Angle@.+tanA :: Angle -> Double+tanA (Radians r) = tan r++-- | The @Angle@ with the given sine.+asinA :: Double -> Angle+asinA = Radians . asin++-- | The @Angle@ with the given cosine.+acosA :: Double -> Angle+acosA = Radians . acos++-- | The @Angle@ with the given tangent.+atanA :: Double -> Angle+atanA = Radians . atan++-- | @30 \@\@ deg@ is an @Angle@ of the given measure and units.+--+-- More generally, @\@\@@ reverses the @Iso\'@ on its right, and+-- applies the @Iso\'@ to the value on the left.  @Angle@s are the+-- motivating example where this order improves readability.+(@@) :: b -> Iso' a b -> a+-- The signature above is slightly specialized, in favor of readability+a @@ i = review i a++infixl 5 @@++-- | compute the positive angle between the two vectors in their common plane+angleBetween  :: (InnerSpace v, Scalar v ~ Double) => v -> v -> Angle+angleBetween v1 v2 = acos (normalized v1 <.> normalized v2) @@ rad++------------------------------------------------------------+-- Polar Coordinates++-- | The class of types with at least one angle coordinate, called _theta.+class HasTheta t where+    _theta :: Lens' t Angle
src/Diagrams/Attributes.hs view
@@ -29,22 +29,13 @@      Color(..), SomeColor(..), someToAlpha -  -- ** Line color-  , LineColor, getLineColor, mkLineColor, styleLineColor, lineColor, lineColorA, lc, lcA--  -- ** Fill color-  , FillColor, getFillColor, mkFillColor, styleFillColor, recommendFillColor, fillColor, fc, fcA-   -- ** Opacity   , Opacity, getOpacity, opacity    -- ** Converting colors   , colorToSRGBA, colorToRGBA -  -- * Lines-  -- ** Width-  , LineWidth, getLineWidth, lineWidth, lineWidthA, lw-+  -- * Line stuff   -- ** Cap style   , LineCap(..), LineCapA, getLineCap, lineCap @@ -54,31 +45,17 @@   -- ** Miter limit   , LineMiterLimit(..), getLineMiterLimit, lineMiterLimit, lineMiterLimitA -  -- ** Dashing-  , Dashing(..), DashingA, getDashing, dashing--  -- * Compilation utilities-  , splitFills-   ) where -import           Control.Lens                (Setter, sets) import           Data.Colour import           Data.Colour.RGBSpace        (RGB (..)) import           Data.Colour.SRGB            (toSRGB) import           Data.Default.Class-import           Data.Maybe                  (fromMaybe)-import           Data.Monoid.Recommend+ import           Data.Semigroup import           Data.Typeable -import           Diagrams.Attributes.Compile import           Diagrams.Core-import           Diagrams.Core.Style         (setAttr)-import           Diagrams.Core.Types         (RTree)-import           Diagrams.Located            (unLoc)-import           Diagrams.Path               (Path, pathTrails)-import           Diagrams.Trail              (isLoop)  ------------------------------------------------------------ --  Color  -------------------------------------------------@@ -112,110 +89,6 @@ someToAlpha :: SomeColor -> AlphaColour Double someToAlpha (SomeColor c) = toAlphaColour c --- | The color with which lines (strokes) are drawn.  Note that child---   colors always override parent colors; that is, @'lineColor' c1---   . 'lineColor' c2 $ d@ is equivalent to @'lineColor' c2 $ d@.---   More precisely, the semigroup structure on line color attributes---   is that of 'Last'.-newtype LineColor = LineColor (Last SomeColor)-  deriving (Typeable, Semigroup)-instance AttributeClass LineColor--instance Default LineColor where-    def = LineColor (Last (SomeColor (black :: Colour Double)))--getLineColor :: LineColor -> SomeColor-getLineColor (LineColor (Last c)) = c--mkLineColor :: Color c => c -> LineColor-mkLineColor = LineColor . Last . SomeColor--styleLineColor :: (Color c, Color c') => Setter (Style v) (Style v) c c'-styleLineColor = sets modifyLineColor-  where-    modifyLineColor f s-      = flip setAttr s-      . mkLineColor-      . f-      . fromAlphaColour . someToAlpha-      . getLineColor-      . fromMaybe def . getAttr-      $ s---- | Set the line (stroke) color.  This function is polymorphic in the---   color type (so it can be used with either 'Colour' or---   'AlphaColour'), but this can sometimes create problems for type---   inference, so the 'lc' and 'lcA' variants are provided with more---   concrete types.-lineColor :: (Color c, HasStyle a) => c -> a -> a-lineColor = applyAttr . mkLineColor---- | Apply a 'lineColor' attribute.-lineColorA :: HasStyle a => LineColor -> a -> a-lineColorA = applyAttr---- | A synonym for 'lineColor', specialized to @'Colour' Double@---   (i.e. opaque colors).-lc :: HasStyle a => Colour Double -> a -> a-lc = lineColor---- | A synonym for 'lineColor', specialized to @'AlphaColour' Double@---   (i.e. colors with transparency).-lcA :: HasStyle a => AlphaColour Double -> a -> a-lcA = lineColor---- | The color with which shapes are filled. Note that child---   colors always override parent colors; that is, @'fillColor' c1---   . 'fillColor' c2 $ d@ is equivalent to @'lineColor' c2 $ d@.---   More precisely, the semigroup structure on fill color attributes---   is that of 'Last'.-newtype FillColor = FillColor (Recommend (Last SomeColor))-  deriving (Typeable, Semigroup)-instance AttributeClass FillColor--instance Default FillColor where-  def = FillColor (Recommend (Last (SomeColor (transparent :: AlphaColour Double))))--mkFillColor :: Color c => c -> FillColor-mkFillColor = FillColor . Commit . Last . SomeColor--styleFillColor :: (Color c, Color c') => Setter (Style v) (Style v) c c'-styleFillColor = sets modifyFillColor-  where-    modifyFillColor f s-      = flip setAttr s-      . mkFillColor-      . f-      . fromAlphaColour . someToAlpha-      . getFillColor-      . fromMaybe def . getAttr-      $ s---- | Set the fill color.  This function is polymorphic in the color---   type (so it can be used with either 'Colour' or 'AlphaColour'),---   but this can sometimes create problems for type inference, so the---   'fc' and 'fcA' variants are provided with more concrete types.-fillColor :: (Color c, HasStyle a) => c -> a -> a-fillColor = applyAttr . mkFillColor---- | Set a \"recommended\" fill color, to be used only if no explicit---   calls to 'fillColor' (or 'fc', or 'fcA') are used.-recommendFillColor :: (Color c, HasStyle a) => c -> a -> a-recommendFillColor = applyAttr . FillColor . Recommend . Last . SomeColor--getFillColor :: FillColor -> SomeColor-getFillColor (FillColor c) = getLast . getRecommend $ c---- | A synonym for 'fillColor', specialized to @'Colour' Double@---   (i.e. opaque colors).-fc :: HasStyle a => Colour Double -> a -> a-fc = fillColor---- | A synonym for 'fillColor', specialized to @'AlphaColour' Double@---   (i.e. colors with transparency).-fcA :: HasStyle a => AlphaColour Double -> a -> a-fcA = fillColor- instance (Floating a, Real a) => Color (Colour a) where   toAlphaColour   = opaque . colourConvert   fromAlphaColour = colourConvert . (`over` black)@@ -228,14 +101,6 @@   toAlphaColour (SomeColor c) = toAlphaColour c   fromAlphaColour c = SomeColor c -instance Color LineColor where-  toAlphaColour (LineColor c) = toAlphaColour . getLast $ c-  fromAlphaColour = LineColor . Last . fromAlphaColour--instance Color FillColor where-  toAlphaColour (FillColor c) = toAlphaColour . getLast . getRecommend $ c-  fromAlphaColour = FillColor . Commit . Last . fromAlphaColour- -- | Convert to sRGBA. colorToSRGBA, colorToRGBA :: Color c => c -> (Double, Double, Double, Double) colorToSRGBA col = (r, g, b, a)@@ -277,43 +142,9 @@ opacity = applyAttr . Opacity . Product  ---------------------------------------------------------------  Lines and stuff    -------------------------------------+--  Line stuff    ------------------------------------- ------------------------------------------------------------ --- | The width of lines.  By default, the line width is measured with---   respect to the /final/ coordinate system of a rendered diagram,---   as opposed to the local coordinate systems in effect at the time---   the line width was set for various subdiagrams.  This is so that---   it is easy to combine a variety of shapes (some created by---   scaling) and have them all drawn using a consistent line width.---   However, sometimes it is desirable for scaling to affect line---   width; the 'freeze' operation is provided for this purpose.  The---   line width of frozen diagrams is affected by transformations.------   Line widths specified on child nodes always override line widths---   specified at parent nodes.-newtype LineWidth = LineWidth (Last Double)-  deriving (Typeable, Semigroup)-instance AttributeClass LineWidth--instance Default LineWidth where-    def = LineWidth (Last 0.01)--getLineWidth :: LineWidth -> Double-getLineWidth (LineWidth (Last w)) = w---- | Set the line (stroke) width.-lineWidth :: HasStyle a => Double -> a -> a-lineWidth = applyAttr . LineWidth . Last---- | Apply a 'LineWidth' attribute.-lineWidthA ::  HasStyle a => LineWidth -> a -> a-lineWidthA = applyAttr---- | A convenient synonym for 'lineWidth'.-lw :: HasStyle a => Double -> a -> a-lw = lineWidth- -- | What sort of shape should be placed at the endpoints of lines? data LineCap = LineCapButt   -- ^ Lines end precisely at their endpoints.              | LineCapRound  -- ^ Lines are capped with semicircles@@ -379,43 +210,3 @@ -- | Apply a 'LineMiterLimit' attribute. lineMiterLimitA :: HasStyle a => LineMiterLimit -> a -> a lineMiterLimitA = applyAttr---- | Create lines that are dashing... er, dashed.-data Dashing = Dashing [Double] Double-  deriving (Typeable, Eq)--newtype DashingA = DashingA (Last Dashing)-  deriving (Typeable, Semigroup, Eq)-instance AttributeClass DashingA--getDashing :: DashingA -> Dashing-getDashing (DashingA (Last d)) = d---- | Set the line dashing style.-dashing :: HasStyle a =>-           [Double]  -- ^ A list specifying alternate lengths of on-                     --   and off portions of the stroke.  The empty-                     --   list indicates no dashing.-        -> Double    -- ^ An offset into the dash pattern at which the-                     --   stroke should start.-        -> a -> a-dashing ds offs = applyAttr (DashingA (Last (Dashing ds offs)))----------------------------------------------------------------data FillLoops v = FillLoops--instance Typeable v => SplitAttribute (FillLoops v) where-  type AttrType (FillLoops v) = FillColor-  type PrimType (FillLoops v) = Path v--  primOK _ = all (isLoop . unLoc) . pathTrails---- | Push fill attributes down until they are at the root of subtrees---   containing only loops. This makes life much easier for backends,---   which typically have a semantics where fill attributes are---   applied to lines/non-closed paths as well as loops/closed paths,---   whereas in the semantics of diagrams, fill attributes only apply---   to loops.-splitFills :: forall b v a. Typeable v => RTree b v a -> RTree b v a-splitFills = splitAttr (FillLoops :: FillLoops v)
src/Diagrams/Attributes/Compile.hs view
@@ -83,7 +83,7 @@   --   * is some sort of prim not under consideration: don't apply the attribute; return True   --   * is unsafe: don't apply the attribute; return False   --   * is safe  :  do   apply the attribute; return True-  splitAttr' mattr (Node rp@(RPrim _ (Prim prm)) _) =+  splitAttr' mattr (Node rp@(RPrim (Prim prm)) _) =       case cast prm :: Maybe (PrimType code) of         Nothing  -> (Node rp [], True)         Just p ->
src/Diagrams/Backend/CmdLine.hs view
@@ -423,13 +423,15 @@     -- that users will call from their program @main@.  For instance an expected     -- user program would take the following form.     ---    -- > import Diagrams.Prelude-    -- > import Diagrams.Backend.TheBestBackend.CmdLine-    -- >-    -- > d :: Diagram B R2-    -- > d = ...-    -- >-    -- > main = mainWith d+    -- @+    -- import Diagrams.Prelude+    -- import Diagrams.Backend.TheBestBackend.CmdLine+    -- +    -- d :: Diagram B R2+    -- d = ...+    -- +    -- main = mainWith d+    -- @     --     -- Most backends should be able to use the default implementation.  A different     -- implementation should be used to handle more complex interactions with the user.@@ -449,7 +451,7 @@ -- TODO: why can't we get away with: instance (Parseable (Args (a -> d)), Mainable (ResultOf d)) => ... --       Doesn't `Args (a -> d)` imply `ToResult (a -> d)` which implies `ToResult d` ? --- | With this instance we can perform IO to produce something +-- | With this instance we can perform IO to produce something --   'Mainable' before rendering. instance Mainable d => Mainable (IO d) where     type MainOpts (IO d) = MainOpts d@@ -464,9 +466,11 @@ -- --   Typically a backend can write its @[(String,Diagram B V)]@ instance as -----   > instance Mainable [(String,Diagram B V)] where---   >     type MainOpts [(String,Diagram B V)] = (DiagramOpts, DiagramMultiOpts)---   >     mainRender = defaultMultiMainRender+--   @+--   instance Mainable [(String,Diagram B V)] where+--       type MainOpts [(String,Diagram B V)] = (DiagramOpts, DiagramMultiOpts)+--       mainRender = defaultMultiMainRender+--   @ -- --   We do not provide this instance in general so that backends can choose to --   opt-in to this form or provide a different instance that makes more sense.@@ -508,9 +512,11 @@ --   implementation works by modifying the output field and running the base @mainRender@. --   Typically a backend can write its @Animation B V@ instance as -----   > instance Mainable (Animation B V) where---   >     type MainOpts (Animation B V) = (DiagramOpts, DiagramAnimOpts)---   >     mainRender = defaultAnimMainRender output+--   @+--   instance Mainable (Animation B V) where+--       type MainOpts (Animation B V) = (DiagramOpts, DiagramAnimOpts)+--       mainRender = defaultAnimMainRender output+--   @ -- --   We do not provide this instance in general so that backends can choose to --   opt-in to this form or provide a different instance that makes more sense.
− src/Diagrams/Backend/Show.hs
@@ -1,68 +0,0 @@-{-# LANGUAGE FlexibleContexts           #-}-{-# LANGUAGE FlexibleInstances          #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses      #-}-{-# LANGUAGE ScopedTypeVariables        #-}-{-# LANGUAGE TypeFamilies               #-}-{-# LANGUAGE TypeSynonymInstances       #-}--------------------------------------------------------------------------------- |--- Module      :  Diagrams.Backend.Show--- Copyright   :  (c) 2011 diagrams-lib team (see LICENSE)--- License     :  BSD-style (see LICENSE)--- Maintainer  :  diagrams-discuss@googlegroups.com------ A simple Show-based diagrams backend, for testing purposes.----------------------------------------------------------------------------------module Diagrams.Backend.Show where--import           Diagrams.Core.Transform (onBasis)-import           Diagrams.Prelude--import           Data.Basis--import           Text.PrettyPrint        (Doc, empty, hsep, parens, ($+$))-import qualified Text.PrettyPrint        as PP--import           Data.List               (transpose)---- | Token for identifying this backend.-data ShowBackend = ShowBackend--instance HasLinearMap v => Backend ShowBackend v where-  data Render  ShowBackend v = SR Doc-  type Result  ShowBackend v = String-  data Options ShowBackend v = SBOpt--  withStyle _ _ _ r = r -- XXX FIXME--  doRender _ _ (SR r) = PP.render r--instance Monoid (Render ShowBackend v) where-  mempty = SR empty-  (SR d1) `mappend` (SR d2) = SR (d1 $+$ d2)--renderTransf :: forall v. (Num (Scalar v), HasLinearMap v, Show (Scalar v))-             => Transformation v -> Doc-renderTransf t = renderMat mat-  where vmat :: [v]-        (vmat, _) = onBasis t-        mat :: [[Scalar v]]-        mat = map decompV vmat---        mat' :: [[Scalar v]]---        mat'  = map (++[0]) mat ++ [decompV tr ++ [1]]-        decompV = map snd . decompose--renderMat :: Show a => [[a]] -> Doc-renderMat = PP.vcat . map renderRow . transpose-  where renderRow = parens . hsep . map (PP.text . show)--instance (Show v, HasLinearMap v) => Renderable (Segment o v) ShowBackend where-  render _ s = SR $ PP.text (show s)--instance (Show v, OrderedField (Scalar v), InnerSpace v, HasLinearMap v) => Renderable (Trail v) ShowBackend where-  render _ t = SR $ PP.text (show t)--instance (Show v, OrderedField (Scalar v), InnerSpace v, HasLinearMap v) => Renderable (Path v) ShowBackend where-  render _ p = SR $ PP.text (show p)
src/Diagrams/Combinators.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP                   #-} {-# LANGUAGE FlexibleContexts      #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE Rank2Types            #-}@@ -39,21 +40,27 @@  import           Data.Typeable -import           Control.Lens       (Lens', generateSignatures, lensField,-                                     lensRules, makeLensesWith, (%~), (&), (.~),-                                     (^.), _Wrapping)+import           Control.Lens          (Lens', generateSignatures, lensField,+                                        lensRules, makeLensesWith, (%~), (&),+                                        (.~), (^.), _Wrapping) import           Data.AdditiveGroup-import           Data.AffineSpace   ((.+^))+import           Data.AffineSpace      ((.+^)) import           Data.Default.Class+import           Data.Monoid.Deletable (toDeletable)+import           Data.Monoid.MList     (inj)+#if __GLASGOW_HASKELL__ < 707 import           Data.Proxy+#endif import           Data.Semigroup+import qualified Data.Tree.DUAL        as D import           Data.VectorSpace  import           Diagrams.Core+import           Diagrams.Core.Types   (QDiagram (QD)) import           Diagrams.Located import           Diagrams.Path-import           Diagrams.Segment   (straight)-import           Diagrams.Trail     (Trail, trailVertices)+import           Diagrams.Segment      (straight)+import           Diagrams.Trail        (Trail, trailVertices) import           Diagrams.Util  ------------------------------------------------------------@@ -68,7 +75,7 @@ --   > sqNewEnv = --   >     circle 1 # fc green --   >     |||---   >     (    c # dashing [0.1,0.1] 0 # lc white+--   >     (    c # dashingG [0.1,0.1] 0 # lc white --   >       <> square 2 # withEnvelope (c :: D R2) # fc blue --   >     ) --   > c = circle 0.8@@ -86,7 +93,7 @@ -- | @phantom x@ produces a \"phantom\" diagram, which has the same --   envelope and trace as @x@ but produces no output. phantom :: (Backend b (V a), Typeable (V a), Enveloped a, Traced a, Monoid' m) => a -> QDiagram b (V a) m-phantom a = mkQD nullPrim (getEnvelope a) (getTrace a) mempty mempty+phantom a = QD $ D.leafU ((inj . toDeletable . getEnvelope $ a) <> (inj . toDeletable . getTrace $ a))  -- | @pad s@ \"pads\" a diagram, expanding its envelope by a factor of --   @s@ (factors between 0 and 1 can be used to shrink the envelope).@@ -127,7 +134,7 @@          , Monoid' m          )       => v -> QDiagram b v m-strut v = mkQD nullPrim env mempty mempty mempty+strut v = QD $ D.leafU (inj . toDeletable $ env)   where env = translate ((-0.5) *^ v) . getEnvelope $ straight v   -- note we can't use 'phantom' here because it tries to construct a   -- trace as well, and segments do not have a trace in general (only
src/Diagrams/Coordinates.hs view
@@ -16,7 +16,7 @@     ( (:&)(..), Coordinates(..)      -- * Lenses for particular axes-    , HasX(..), HasY(..), HasZ(..)+    , HasX(..), HasY(..), HasZ(..), HasR(..)     )     where @@ -121,3 +121,8 @@ -- | The class of types with at least three coordinates, the third called _z. class HasZ t where     _z :: Lens' t Double++-- | The class of types with a single length coordinate _r.  _r is+-- magnitude of a vector, or the distance from the origin of a point.+class HasR t where+    _r :: Lens' t Double
src/Diagrams/CubicSpline.hs view
@@ -41,9 +41,9 @@ --   <<diagrams/src_Diagrams_CubicSpline_cubicSplineEx.svg#diagram=cubicSplineEx&width=600>> -- --   > pts = map p2 [(0,0), (2,3), (5,-2), (-4,1), (0,3)]---   > dot = circle 0.2 # fc blue # lw 0+--   > dot = circle 0.2 # fc blue # lw none --   > mkPath closed = position (zip pts (repeat dot))---   >              <> cubicSpline closed pts # lw 0.05+--   >              <> cubicSpline closed pts --   > cubicSplineEx = (mkPath False ||| strutX 2 ||| mkPath True) --   >               # centerXY # pad 1.1 --
src/Diagrams/Deform.hs view
@@ -1,25 +1,26 @@-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UndecidableInstances       #-}+{-# LANGUAGE FlexibleContexts     #-}+{-# LANGUAGE FlexibleInstances    #-}+{-# LANGUAGE GADTs                #-}+{-# LANGUAGE ScopedTypeVariables  #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE UndecidableInstances #-}  module Diagrams.Deform (Deformation(..), Deformable(..), asDeformation) where -import Control.Lens (under, _Unwrapped)-import Data.AffineSpace-import Data.Basis-import Data.MemoTrie-import Data.Monoid hiding ((<>))-import Data.Semigroup-import Data.VectorSpace+import           Control.Lens        (under, _Unwrapped)+import           Data.AffineSpace+import           Data.Basis+import           Data.MemoTrie+import           Data.Monoid         hiding ((<>))+import           Data.Semigroup+import           Data.VectorSpace -import Diagrams.Core-import Diagrams.Located-import Diagrams.Parametric-import Diagrams.Path-import Diagrams.Segment-import Diagrams.Trail+import           Diagrams.Core+import           Diagrams.Located+import           Diagrams.Parametric+import           Diagrams.Path+import           Diagrams.Segment+import           Diagrams.Trail  ------------------------------------------------------------ -- Deformations
src/Diagrams/Path.hs view
@@ -44,7 +44,7 @@        , pathVertices        , pathOffsets        , pathCentroid-       , fixPath+       , pathLocSegments, fixPath           -- * Modifying paths @@ -130,8 +130,6 @@ of the v's are inside Points and hence ought to be translated. -} -instance (HasLinearMap v, InnerSpace v, OrderedField (Scalar v)) => IsPrim (Path v)- instance (InnerSpace v, OrderedField (Scalar v)) => Enveloped (Path v) where   getEnvelope = F.foldMap trailEnvelope . op Path --view pathTrails           -- this type signature is necessary to work around an apparent bug in ghc 6.12.1@@ -188,6 +186,11 @@ --   its vertices). pathCentroid :: (InnerSpace v, OrderedField (Scalar v)) => Path v -> Point v pathCentroid = centroid . concat . pathVertices++-- | Convert a path into a list of lists of located segments.+pathLocSegments :: (InnerSpace v, OrderedField (Scalar v))+                 => Path v -> [[Located (Segment Closed v)]]+pathLocSegments = map trailLocSegments . op Path  -- | Convert a path into a list of lists of 'FixedSegment's. fixPath :: (InnerSpace v, OrderedField (Scalar v)) => Path v -> [[FixedSegment v]]
src/Diagrams/Prelude.hs view
@@ -84,8 +84,10 @@          -- | Utilities for working with points.        , module Diagrams.Points +         -- | Angles+       , module Diagrams.Angle          -- | Convenience infix operators for working with coordinates.-        , module Diagrams.Coordinates+       , module Diagrams.Coordinates           -- | A wide range of things (shapes, transformations,          --   combinators) specific to creating two-dimensional@@ -123,6 +125,7 @@ import           Diagrams.Core  import           Diagrams.Align+import           Diagrams.Angle import           Diagrams.Animation import           Diagrams.Attributes import           Diagrams.Combinators
src/Diagrams/Prelude/ThreeD.hs view
@@ -80,8 +80,11 @@          -- | Utilities for working with points.        , module Diagrams.Points +         -- | Angles+       , module Diagrams.Angle+          -- | Convenience infix operators for working with coordinates.-        , module Diagrams.Coordinates+       , module Diagrams.Coordinates           -- | things (shapes, transformations, combinators) specific          -- to creating three-dimensional diagrams.@@ -118,6 +121,7 @@ import           Diagrams.Core  import           Diagrams.Align+import           Diagrams.Angle import           Diagrams.Animation import           Diagrams.Attributes import           Diagrams.Combinators
src/Diagrams/Segment.hs view
@@ -493,7 +493,7 @@   (OffsetEnvelope o1 e1) <> (OffsetEnvelope o2 e2)     = let !negOff = negateV . op TotalOffset $ o1           e2Off = moveOriginBy negOff e2-          !() = maybe () (\f -> f `seq` ()) $ appEnvelope e2Off+          !_unused = maybe () (\f -> f `seq` ()) $ appEnvelope e2Off       in OffsetEnvelope           (o1 <> o2)           (e1 <> e2Off)
src/Diagrams/Solve.hs view
@@ -1,4 +1,3 @@-{-# OPTIONS_GHC -fno-warn-unused-binds #-} ----------------------------------------------------------------------------- -- | -- Module      :  Diagrams.Solve@@ -6,12 +5,15 @@ -- License     :  BSD-style (see LICENSE) -- Maintainer  :  diagrams-discuss@googlegroups.com ----- Exact solving of low-degree (n <= 3) polynomials.+-- Exact solving of low-degree (n <= 4) polynomials. -- ----------------------------------------------------------------------------- module Diagrams.Solve        ( quadForm        , cubForm+       , quartForm+       , cubForm'+       , quartForm'        ) where  import           Data.List     (maximumBy)@@ -19,6 +21,20 @@  import           Diagrams.Util (tau) +import           Prelude hiding ((^))+import qualified Prelude as P ((^))++-- | A specialization of (^) to Integer+--   c.f. http://comments.gmane.org/gmane.comp.lang.haskell.libraries/21164+--   for discussion. "The choice in (^) and (^^) to overload on the+--   power's Integral type... was a genuinely bad idea." - Edward Kmett+(^) :: (Num a) => a -> Integer -> a+(^) = (P.^)++-- | Utility function used to avoid singularities+aboutZero' :: (Ord a, Num a) => a -> a -> Bool+aboutZero' toler x = abs x < toler+ ------------------------------------------------------------ -- Quadratic formula ------------------------------------------------------------@@ -48,14 +64,12 @@      -- see http://www.mpi-hd.mpg.de/astrophysik/HEA/internal/Numerical_Recipes/f5-6.pdf   | otherwise = [q/a, c/q]- where d = b*b - 4*a*c+ where d = b^2 - 4*a*c        q = -1/2*(b + signum b * sqrt d) -quadForm_prop :: Double -> Double -> Double -> Bool-quadForm_prop a b c = all (aboutZero . eval) (quadForm a b c)-  where eval x = a*x*x + b*x + c-        aboutZero x = abs x < tolerance-        tolerance = 1e-10+_quadForm_prop :: Double -> Double -> Double -> Bool+_quadForm_prop a b c = all (aboutZero' 1e-10 . eval) (quadForm a b c)+  where eval x = a*x^2 + b*x + c  ------------------------------------------------------------ -- Cubic formula@@ -64,10 +78,10 @@ -- See http://en.wikipedia.org/wiki/Cubic_formula#General_formula_of_roots  -- | Solve the cubic equation ax^3 + bx^2 + cx + d = 0, returning a---   list of all real roots.-cubForm :: (Floating d, Ord d) => d -> d -> d -> d -> [d]-cubForm a b c d-  | aboutZero a             = quadForm b c d+--   list of all real roots. First argument is tolerance.+cubForm' :: (Floating d, Ord d) => d -> d -> d -> d -> d -> [d]+cubForm' toler a b c d+  | aboutZero' toler a      = quadForm b c d      -- three real roots, use trig method to avoid complex numbers   | delta >  0              = map trig [0,1,2]@@ -77,35 +91,35 @@      -- two real roots, one of multiplicity 2   | delta == 0 && disc /= 0 = [ (b*c - 9*a*d)/(2*disc)-                              , (9*a*a*d - 4*a*b*c + b*b*b)/(a * disc)+                              , (9*a^2*d - 4*a*b*c + b^3)/(a * disc)                               ]      -- one real root (and two complex)   | otherwise               = [-b/(3*a) - cc/(3*a) + disc/(3*a*cc)] - where delta  = 18*a*b*c*d - 4*b*b*b*d + b*b*c*c - 4*a*c*c*c - 27*a*a*d*d-       disc   = 3*a*c - b*b-       qq     = sqrt(-27*a*a*delta)-       qq'    | aboutZero disc = maximumBy (comparing (abs . (+xx))) [qq, -qq]+ where delta  = 18*a*b*c*d - 4*b^3*d + b^2*c^2 - 4*a*c^3 - 27*a^2*d^2+       disc   = 3*a*c - b^2+       qq     = sqrt(-27*(a^2)*delta)+       qq'    | aboutZero' toler disc = maximumBy (comparing (abs . (+xx))) [qq, -qq]               | otherwise = qq        cc     = cubert (1/2*(qq' + xx))-       xx     = 2*b*b*b - 9*a*b*c + 27*a*a*d-       p      = disc/(3*a*a)-       q      = xx/(27*a*a*a)-       trig k = 2 * sqrt(-p/3) * cos(1/3*acos(3*q/(2*p)*sqrt(-3/p)) - k*tau/3)-                - b/(3*a)-+       xx     = 2*b^3 - 9*a*b*c + 27*a^2*d+       p      = disc/(3*a^2)+       q      = xx/(27*a^3)+       phi = 1/3*acos(3*q/(2*p)*sqrt(-3/p))+       trig k = 2 * sqrt(-p/3) * cos(phi - k*tau/3) - b/(3*a)        cubert x | x < 0     = -((-x)**(1/3))                 | otherwise = x**(1/3) -       aboutZero x = abs x < toler-       toler = 1e-10+-- | Solve the cubic equation ax^3 + bx^2 + cx + d = 0, returning a+--   list of all real roots within 1e-10 tolerance+--   (although currently it's closer to 1e-5)+cubForm :: (Floating d, Ord d) => d -> d -> d -> d -> [d]+cubForm = cubForm' 1e-10 -cubForm_prop :: Double -> Double -> Double -> Double -> Bool-cubForm_prop a b c d = all (aboutZero . eval) (cubForm a b c d)-  where eval x = a*x*x*x + b*x*x + c*x + d-        aboutZero x = abs x < tolerance-        tolerance = 1e-5+_cubForm_prop :: Double -> Double -> Double -> Double -> Bool+_cubForm_prop a b c d = all (aboutZero' 1e-5 . eval) (cubForm a b c d)+  where eval x = a*x^3 + b*x^2 + c*x + d            -- Basically, however large you set the tolerance it seems            -- that quickcheck can always come up with examples where            -- the returned solutions evaluate to something near zero@@ -116,3 +130,58 @@            -- issue in practice we could, say, use the solutions            -- generated here as very good guesses to a numerical            -- solver which can give us a more precise answer?+           +------------------------------------------------------------+-- Quartic formula+------------------------------------------------------------++-- Based on http://tog.acm.org/resources/GraphicsGems/gems/Roots3b/and4.c+-- as of 5/12/14, with help from http://en.wikipedia.org/wiki/Quartic_function++-- | Solve the quartic equation c4 x^4 + c3 x^3 + c2 x^2 + c1 x + c0 = 0, returning a+--   list of all real roots. First argument is tolerance.+quartForm' :: (Floating d, Ord d) => d -> d -> d -> d -> d -> d -> [d]+quartForm' toler c4 c3 c2 c1 c0+  -- obvious cubic+  | aboutZero' toler c4 = cubForm c3 c2 c1 c0+  -- x(ax^3+bx^2+cx+d)+  | aboutZero' toler c0 = 0 : cubForm c4 c3 c2 c1+  -- substitute solutions of y back to x+  | otherwise = map (\x->x-(a/4)) roots+    where+      -- eliminate c4: x^4+ax^3+bx^2+cx+d+      [a,b,c,d] = map (/c4) [c3,c2,c1,c0]+      -- eliminate cubic term via x = y - a/4+      -- reduced quartic: y^4 + py^2 + qy + r = 0+      p = b - 3/8*a^2+      q = 1/8*a^3-a*b/2+c+      r = (-3/256)*a^4+a^2*b/16-a*c/4+d++      -- | roots of the reduced quartic+      roots | aboutZero' toler r =+                0 : cubForm 1 0 p q   -- no constant term: y(y^3 + py + q) = 0+            | u < 0 || v < 0 = []     -- no real solutions due to square root+            | otherwise      = s1++s2 -- solutions of the quadratics++      -- solve the resolvent cubic - only one solution is needed+      z:_ = cubForm 1 (-p/2) (-r) (p*r/2 - q^2/8)+      +      -- solve the two quadratic equations+      -- y^2 ± v*y-(±u-z)+      u = z^2 - r+      v = 2*z - p+      u' = if aboutZero' toler u then 0 else sqrt u+      v' = if aboutZero' toler v then 0 else sqrt v+      s1 = quadForm 1 (if q<0 then -v' else v') (z-u')+      s2 = quadForm 1 (if q<0 then v' else -v') (z+u')++-- | Solve the quartic equation c4 x^4 + c3 x^3 + c2 x^2 + c1 x + c0 = 0, returning a+--   list of all real roots within 1e-10 tolerance+--   (although currently it's closer to 1e-5)+quartForm :: (Floating d, Ord d) => d -> d -> d -> d -> d -> [d]+quartForm = quartForm' 1e-10++_quartForm_prop :: Double -> Double -> Double -> Double -> Double -> Bool+_quartForm_prop a b c d e = all (aboutZero' 1e-5 . eval) (quartForm a b c d e)+  where eval x = a*x^4 + b*x^3 + c*x^2 + d*x + e+           -- Same note about tolerance as for cubic
src/Diagrams/ThreeD.hs view
@@ -31,7 +31,9 @@ --     for rendering 3D geometry to (2D) images. ----------------------------------------------------------------------------- module Diagrams.ThreeD-       ( module Diagrams.ThreeD.Align+       (+         module Diagrams.ThreeD.Align+       , module Diagrams.ThreeD.Attributes        , module Diagrams.ThreeD.Camera        , module Diagrams.ThreeD.Light        , module Diagrams.ThreeD.Shapes@@ -41,6 +43,7 @@        ) where  import Diagrams.ThreeD.Align+import Diagrams.ThreeD.Attributes import Diagrams.ThreeD.Camera import Diagrams.ThreeD.Light import Diagrams.ThreeD.Shapes
+ src/Diagrams/ThreeD/Attributes.hs view
@@ -0,0 +1,104 @@+{-# LANGUAGE DeriveDataTypeable         #-}+{-# LANGUAGE ExistentialQuantification  #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE TemplateHaskell            #-}+-----------------------------------------------------------------------------+-- |+-- Module      :  Diagrams.ThreeD.Attributes+-- Copyright   :  (c) 2014 diagrams-lib team (see LICENSE)+-- License     :  BSD-style (see LICENSE)+-- Maintainer  :  diagrams-discuss@googlegroups.com+--+-- 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.+--+-----------------------------------------------------------------------------++module Diagrams.ThreeD.Attributes where++import Control.Lens+import Data.Semigroup+import Data.Typeable++import Data.Colour++import Diagrams.Core++-- | @SurfaceColor@ is the inherent pigment of an object, assumed to+-- be opaque.+newtype SurfaceColor = SurfaceColor (Last (Colour Double))+                     deriving (Typeable, Semigroup)+instance AttributeClass SurfaceColor++surfaceColor :: Iso' SurfaceColor (Colour Double)+surfaceColor = iso (\(SurfaceColor (Last c)) -> c) (SurfaceColor . Last)++-- | Set the surface color.+sc :: HasStyle d => Colour Double -> d -> d+sc = applyAttr . review surfaceColor++-- | @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.+newtype Diffuse = Diffuse (Last Double)+                deriving (Typeable, Semigroup)+instance AttributeClass Diffuse++_Diffuse :: Iso' Diffuse Double+_Diffuse = iso (\(Diffuse (Last d)) -> d) (Diffuse . Last)++-- | Set the diffuse reflectance.+diffuse :: HasStyle d => Double -> d -> d+diffuse = applyAttr . review _Diffuse++-- | @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.+newtype Ambient = Ambient (Last Double)+                deriving (Typeable, Semigroup)+instance AttributeClass Ambient++_Ambient :: Iso' Ambient Double+_Ambient = iso (\(Ambient (Last d)) -> d) (Ambient . Last)++-- | Set the emittance due to ambient light.+ambient :: HasStyle d => Double -> d -> d+ambient = applyAttr . review _Ambient++-- | 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.+data Specular = Specular { _specularIntensity :: Double+                         , _specularSize :: Double+                         }++makeLenses ''Specular++newtype Highlight = Highlight (Last Specular)+                    deriving (Typeable, Semigroup)+instance AttributeClass Highlight++_Highlight :: Iso' Highlight Specular+_Highlight = iso (\(Highlight (Last s)) -> s) (Highlight . Last)++-- | Set the specular highlight.+highlight :: HasStyle d => Specular -> d -> d+highlight = applyAttr . review _Highlight
src/Diagrams/ThreeD/Camera.hs view
@@ -34,6 +34,7 @@ import           Data.Monoid import           Data.Typeable +import           Diagrams.Angle import           Diagrams.Core import           Diagrams.ThreeD.Types import           Diagrams.ThreeD.Vector@@ -85,8 +86,6 @@              (transform t u)              l -instance IsPrim (Camera l)- instance Renderable (Camera l) NullBackend where     render _ _ = mempty @@ -119,13 +118,13 @@ -- aspect ratio of 4:3, for VGA and similar computer resulotions. mm50Narrow = PerspectiveLens (36 @@ deg) (27 @@ deg) -camForward :: Direction d => Camera l -> d+camForward :: Camera l -> Direction camForward = direction . forward -camUp :: Direction d => Camera l -> d+camUp :: Camera l -> Direction camUp = direction . up -camRight :: Direction d => Camera l -> d+camRight :: Camera l -> Direction camRight c = direction right where   right = cross3 (forward c) (up c) 
src/Diagrams/ThreeD/Light.hs view
@@ -22,7 +22,6 @@  import           Diagrams.Core import           Diagrams.ThreeD.Types-import           Diagrams.ThreeD.Vector  data PointLight = PointLight P3 (Colour Double)   deriving Typeable@@ -39,9 +38,6 @@ instance Transformable ParallelLight where     transform t (ParallelLight v c) = ParallelLight (transform t v) c -instance IsPrim PointLight-instance IsPrim ParallelLight- -- | Construct a Diagram with a single PointLight at the origin, which -- takes up no space. pointLight :: (Backend b R3, Renderable PointLight b)@@ -51,8 +47,8 @@                (Query . const . Any $ False)  -- | Construct a Diagram with a single ParallelLight, which takes up no space.-parallelLight :: (Direction d, Backend b R3, Renderable ParallelLight b)-                 => d -- ^ The direction in which the light travels.+parallelLight :: (Backend b R3, Renderable ParallelLight b)+                 => Direction -- ^ The direction in which the light travels.                  -> Colour Double -- ^ The color of the light.                  -> Diagram b R3 parallelLight d c = mkQD (Prim $ ParallelLight (fromDirection d) c)
src/Diagrams/ThreeD/Shapes.hs view
@@ -15,18 +15,24 @@  module Diagrams.ThreeD.Shapes        (-         Ellipsoid(..)-       , sphere+         Ellipsoid(..), sphere+       , Box(..), cube+       , Frustum(..) , frustum, cone, cylinder        ) where +import           Control.Applicative+import           Control.Lens           (review, (^.), _1) import           Data.Typeable  import           Data.AffineSpace import           Data.Semigroup import           Data.VectorSpace+import           Diagrams.Angle+import           Diagrams.Coordinates import           Diagrams.Core import           Diagrams.Solve import           Diagrams.ThreeD.Types+import           Diagrams.ThreeD.Vector  data Ellipsoid = Ellipsoid T3   deriving Typeable@@ -36,11 +42,10 @@ instance Transformable Ellipsoid where   transform t1 (Ellipsoid t2) = Ellipsoid (t1 <> t2) -instance IsPrim Ellipsoid- instance Renderable Ellipsoid NullBackend where   render _ _ = mempty +-- | A sphere of radius 1 with its center at the origin. sphere :: (Backend b R3, Renderable Ellipsoid b) => Diagram b R3 sphere = mkQD (Prim $ Ellipsoid mempty)               (mkEnvelope sphereEnv)@@ -54,3 +59,104 @@                 c = p' <.> p' - 1                 p' = p .-. origin         sphereQuery v = Any $ magnitudeSq (v .-. origin) <= 1++data Box = Box T3+         deriving (Typeable)++type instance V Box = R3++instance Transformable Box where+    transform t1 (Box t2) = Box (t1 <> t2)++instance Renderable Box NullBackend where+    render _ _ = mempty++-- | A cube with side length 1, in the positive octant, with one+-- vertex at the origin.+cube :: (Backend b R3, Renderable Box b) => Diagram b R3+cube = mkQD (Prim $ Box mempty)+            (mkEnvelope boxEnv)+            (mkTrace boxTrace)+            mempty+            (Query boxQuery)+  where+    corners = mkR3 <$> [0,1] <*> [0,1] <*> [0,1]+    boxEnv v = maximum (map (v <.>) corners) / magnitudeSq v+    -- ts gives all intersections with the planes forming the box+    -- filter keeps only those actually on the box surface+    boxTrace p v = mkSortedList . filter (range . atT) $ ts where+      (x0, y0, z0) = unp3 p+      (vx, vy, vz) = unr3 v+      intersections f d = case d of+          0 -> []+          _ -> [-f/d, (1-f)/d]+      ts = concat $ zipWith intersections [x0,y0,z0] [vx,vy,vz]+      atT t = p .+^ (t*^v)+    range u = and [x >= 0, x <= 1, y >= 0, y <= 1, z >= 0, z <= 1] where+      (x, y, z) = unp3 u+    boxQuery = Any . range++data Frustum = Frustum Double Double T3+         deriving (Typeable)++type instance V Frustum = R3++instance Transformable Frustum where+    transform t1 (Frustum r0 r1 t2) = Frustum r0 r1 (t1 <> t2)++instance Renderable Frustum NullBackend where+    render _ _ = mempty++-- | A frustum of a right circular cone.  It has height 1 oriented+-- along the positive z axis, and radii r0 and r1 at Z=0 and Z=1.+-- 'cone' and 'cylinder' are special cases.+frustum :: (Backend b R3, Renderable Frustum b) => Double -> Double -> Diagram b R3+frustum r0 r1 = mkQD (Prim $ Frustum r0 r1 mempty)+                 (mkEnvelope frEnv)+                 (mkTrace frTrace)+                 mempty+                 (Query frQuery)+  where+    projectXY u = u ^-^ project unitZ u+    frQuery p = Any $ x >= 0 && x <= 1 && a <= r where+      (x, _, z) = unp3 p+      r = r0 + (r1-r0)*z+      v = p .-. origin+      a = magnitude $ projectXY v+    -- The plane containing v and the z axis intersects the frustum in a trapezoid+    -- Test the four corners of this trapezoid; one must determine the Envelope+    frEnv v = maximum . map (magnitude . project v . review cylindrical) $ corners+      where+        θ = v^._theta+        corners = [(r1,θ,1), (-r1,θ,1), (r0,θ,0), (-r0,θ,0)]+    -- The trace can intersect the sides of the cone or one of the end+    -- caps The sides are described by a quadric equation; substitute+    -- in the parametric form of the ray but disregard any+    -- intersections outside z = [0,1] Similarly, find intersections+    -- with the planes z=0, z=1, but disregard any r>r0, r>r1+    frTrace p v = mkSortedList $ filter zbounds (quadForm a b c) ++ ends+      where+        (px, py, pz) = unp3 p+        (vx, vy, vz) = unr3 v+        ray t = p .+^ t*^v+        dr = r1-r0+        a = vx**2 + vy**2 - vz**2 * dr**2+        b = 2 * (px * vx + py * vy - (r0+pz*dr) * dr  * vz)+        c = px**2 + py**2 - (r0 + dr*pz)**2+        zbounds t = (ray t)^._z >= 0 && (ray t)^._z <= 1+        ends = concatMap cap [0,1]+        cap z = if (ray t)^.cylindrical._1 < r0 + z*dr+                then [t]+                else []+          where+            t = (z - pz) / vz++-- | A cone with its base centered on the origin, with radius 1 at the+-- base, height 1, and it's apex on the positive Z axis.+cone :: (Backend b R3, Renderable Frustum b) => Diagram b R3+cone = frustum 1 0++-- | A circular cylinder of radius 1 with one end cap centered on the+-- origin, and extending to Z=1.+cylinder :: (Backend b R3, Renderable Frustum b) => Diagram b R3+cylinder = frustum 1 1
src/Diagrams/ThreeD/Transform.hs view
@@ -46,9 +46,9 @@ import           Diagrams.Core import qualified Diagrams.Core.Transform as T +import           Diagrams.Angle import           Diagrams.Transform import           Diagrams.ThreeD.Types-import           Diagrams.ThreeD.Vector import           Diagrams.Coordinates  import           Control.Lens                   (view, (*~), (//~))@@ -102,11 +102,10 @@  -- | @rotationAbout p d a@ is a rotation about a line parallel to @d@ --   passing through @p@.-rotationAbout-  :: Direction d-  => P3     -- ^ origin of rotation-  -> d      -- ^ direction of rotation axis-  -> Angle      -- ^ angle of rotation+rotationAbout ::+     P3        -- ^ origin of rotation+  -> Direction -- ^ direction of rotation axis+  -> Angle     -- ^ angle of rotation   -> T3 rotationAbout p d a   = mconcat [translation (negateV t),@@ -128,7 +127,7 @@ -- without tilting, it will be, otherwise if only tilting is -- necessary, no panning will occur.  The tilt will always be between -- ± 1/4 turn.-pointAt :: Direction d => d -> d -> d -> T3+pointAt :: Direction -> Direction -> Direction -> T3 pointAt a i f = pointAt' (fromDirection a) (fromDirection i) (fromDirection f)  -- | pointAt' has the same behavior as 'pointAt', but takes vectors@@ -137,9 +136,9 @@ pointAt' about initial final = tilt <> pan where   inPanPlane    = final ^-^ project final initial   panAngle      = angleBetween initial inPanPlane-  pan           = rotationAbout origin (direction about :: Spherical) panAngle+  pan           = rotationAbout origin (direction about) panAngle   tiltAngle     = angleBetween initial inPanPlane-  tiltDir       = direction $ cross3 inPanPlane about :: Spherical+  tiltDir       = direction $ cross3 inPanPlane about   tilt          = rotationAbout origin tiltDir tiltAngle  -- Scaling -------------------------------------------------@@ -261,4 +260,4 @@ --   useful for implementing backends. onBasis :: T3 -> ((R3, R3, R3), R3) onBasis t = ((x, y, z), v)-  where ((x:y:z:[]), v) = T.onBasis t+  where (x:y:z:[], v) = T.onBasis t
src/Diagrams/ThreeD/Types.hs view
@@ -1,13 +1,13 @@ {-# LANGUAGE FlexibleInstances          #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses      #-}+{-# LANGUAGE RankNTypes                 #-} {-# LANGUAGE TypeFamilies               #-} {-# LANGUAGE TypeOperators              #-} {-# LANGUAGE TypeSynonymInstances       #-}+{-# LANGUAGE UndecidableInstances       #-} {-# LANGUAGE ViewPatterns               #-} -{-# OPTIONS_GHC -fno-warn-orphans #-}- ----------------------------------------------------------------------------- -- | -- Module      :  Diagrams.ThreeD.Types@@ -21,28 +21,23 @@  module Diagrams.ThreeD.Types        ( -- * 3D Euclidean space-         R3, r3, unr3, mkR3+         R3(..), r3, unr3, mkR3        , P3, p3, unp3, mkP3        , T3        , r3Iso, p3Iso -         -- * Two-dimensional angles-         -- | These are defined in "Diagrams.TwoD.Types" but-         --   reëxported here for convenience.-       , Angle, rad, turn, deg, (@@)-       , fullTurn, angleRatio-          -- * Directions in 3D-       , Direction(..)-       , Spherical(..)-       , asSpherical+       , Direction, direction, fromDirection, angleBetweenDirs+       -- * other coördinate systems+       , Spherical(..), Cylindrical(..), HasPhi(..)        ) where -import           Control.Lens           (Iso', iso, over, Wrapped(..), Rewrapped-                                        , _1, _2, _3)+import           Control.Lens           (Iso', Lens', iso, over+                                        , _1, _2, _3, (^.))  import           Diagrams.Core-import           Diagrams.TwoD.Types+import           Diagrams.Angle+import           Diagrams.TwoD.Types    (R2) import           Diagrams.Coordinates  import           Data.AffineSpace.Point@@ -54,31 +49,28 @@ -- 3D Euclidean space  -- | The three-dimensional Euclidean vector space R^3.-newtype R3 = R3 { unR3 :: (Double, Double, Double) }-  deriving (AdditiveGroup, Eq, Ord, Show, Read)+data R3 = R3 !Double !Double !Double+  deriving (Eq, Ord, Show, Read)  r3Iso :: Iso' R3 (Double, Double, Double)-r3Iso = iso unR3 R3+r3Iso = iso unr3 r3  -- | Construct a 3D vector from a triple of components. r3 :: (Double, Double, Double) -> R3-r3 = R3+r3 (x,y,z) = R3 x y z  -- | Curried version of `r3`. mkR3 :: Double -> Double -> Double -> R3-mkR3 x y z = r3 (x, y, z)+mkR3 = R3  -- | Convert a 3D vector back into a triple of components. unr3 :: R3 -> (Double, Double, Double)-unr3 = unR3---- | Lens wrapped isomorphisms for R3.-instance Wrapped R3 where-    type Unwrapped R3 = (Double, Double, Double)-    _Wrapped' = iso unr3 r3-    {-# INLINE _Wrapped' #-}+unr3 (R3 x y z) = (x,y,z) -instance Rewrapped R3 R3+instance AdditiveGroup R3 where+    zeroV = R3 0 0 0+    R3 x1 y1 z1 ^+^ R3 x2 y2 z2 = R3 (x1 + x2) (y1 + y2) (z1 + z2)+    negateV (R3 x y z) = R3 (-x) (-y) (-z)  type instance V R3 = R3 @@ -88,31 +80,31 @@  instance HasBasis R3 where   type Basis R3 = Either () (Either () ()) -- = Basis (Double, Double, Double)-  basisValue = R3 . basisValue-  decompose  = decompose  . unR3-  decompose' = decompose' . unR3+  basisValue = r3 . basisValue+  decompose  = decompose  . unr3+  decompose' = decompose' . unr3  instance InnerSpace R3 where-  (unR3 -> vec1) <.> (unR3 -> vec2) = vec1 <.> vec2+    (R3 x1 y1 z1) <.> (R3 x2 y2 z2) = x1*x2 + y1*y2 + z1*z2  instance Coordinates R3 where   type FinalCoord R3       = Double   type PrevDim R3          = R2   type Decomposition R3    = Double :& Double :& Double -  (coords -> x :& y) ^& z   = r3 (x,y,z)-  coords (unR3 -> (x,y,z)) = x :& y :& z+  (coords -> x :& y) ^& z   = R3 x y z+  coords (R3 x y z) = x :& y :& z  -- | Points in R^3. type P3 = Point R3  -- | Construct a 3D point from a triple of coordinates. p3 :: (Double, Double, Double) -> P3-p3 = P . R3+p3 = P . r3  -- | Convert a 3D point back into a triple of coordinates. unp3 :: P3 -> (Double, Double, Double)-unp3 = unR3 . unPoint+unp3 = unr3 . unPoint  p3Iso :: Iso' P3 (Double, Double, Double) p3Iso = iso unp3 p3@@ -133,33 +125,14 @@ -------------------------------------------------------------------------------- -- Direction --- | Direction is a type class representing directions in R3.  The interface is--- based on that of the Angle class in 2D.--class Direction d where-    -- | Convert to spherical coördinates-    toSpherical :: d -> Spherical--    -- | Convert from spherical coördinates-    fromSpherical :: Spherical -> d---- | A direction expressed as a pair of spherical coordinates.--- `Spherical 0 0` is the direction of `unitX`.  The first coordinate--- represents rotation about the Z axis, the second rotation towards the Z axis.-data Spherical = Spherical Angle Angle-                   deriving (Show, Read, Eq)--instance Direction Spherical where-    toSpherical = id-    fromSpherical = id+-- | A @Direction@ represents directions in R3.  The constructor is+-- not exported; @Direction@s can be used with 'fromDirection' and the+-- lenses provided by its instances.+data Direction = Direction R3 --- | The identity function with a restricted type, for conveniently--- restricting unwanted polymorphism.  For example, @fromDirection--- . asSpherical . camForward@ gives a unit vector pointing in the--- direction of the camera view.  Without @asSpherical@, the--- intermediate type would be ambiguous.-asSpherical :: Spherical -> Spherical-asSpherical = id+-- | Not exported+_Dir :: Iso' Direction R3+_Dir = iso (\(Direction v) -> v) Direction  instance HasX R3 where     _x = r3Iso . _1@@ -178,3 +151,73 @@  instance HasZ P3 where     _z = p3Iso . _3++-- | Types which can be expressed in spherical 3D coordinates, as a+-- triple (r,θ,φ), where θ is rotation about the Z axis, and φ is the+-- angle from the Z axis.+class Spherical t where+    spherical :: Iso' t (Double, Angle, Angle)++-- | Types which can be expressed in cylindrical 3D coordinates.+class Cylindrical t where+    cylindrical :: Iso' t (Double, Angle, Double) -- r, θ, z++instance Cylindrical R3 where+    cylindrical = iso (\(R3 x y z) -> (sqrt (x^(2::Int)+y^(2::Int)), atanA (y/x), z))+                      (\(r,θ,z) -> R3 (r*cosA θ) (r*sinA θ) z)++instance Spherical R3 where+    spherical = iso+      (\v@(R3 x y z) -> (magnitude v, atanA (y/x), atanA (v^._r/z)))+      (\(r,θ,φ) -> R3 (r*cosA θ*sinA φ) (r*sinA θ*sinA φ) (r*cosA φ))++-- We'd like to write: instance Spherical t => HasR t+-- But GHC can't work out that the instance won't overlap.  Just write them explicitly:++instance HasR R3 where+    _r = spherical . _1++instance HasR P3 where+    _r = spherical . _1++instance HasTheta R3 where+    _theta = cylindrical . _2++instance HasTheta P3 where+    _theta = cylindrical . _2++-- | The class of types with at least two angle coordinates, the+-- second called _phi.+class HasPhi t where+    _phi :: Lens' t Angle++instance HasPhi R3 where+    _phi = spherical . _3++instance HasPhi P3 where+    _phi = spherical . _3++instance Cylindrical P3 where+    cylindrical = _relative origin . cylindrical++instance Spherical P3 where+    spherical = _relative origin . spherical++instance HasTheta Direction where+    _theta = _Dir . _theta++instance HasPhi Direction where+    _phi = _Dir . _phi++-- | @direction v@ is the direction in which @v@ points.  Returns an+--   unspecified value when given the zero vector as input.+direction :: R3 -> Direction+direction = Direction++-- | @fromDirection d@ is the unit vector in the direction @d@.+fromDirection :: Direction -> R3+fromDirection (Direction v) = normalized v++-- | compute the positive angle between the two directions in their common plane+angleBetweenDirs  :: Direction -> Direction -> Angle+angleBetweenDirs d1 d2 = angleBetween (fromDirection d1) (fromDirection d2)
src/Diagrams/ThreeD/Vector.hs view
@@ -15,17 +15,10 @@ module Diagrams.ThreeD.Vector        ( -- * Special 2D vectors          unitX, unitY, unitZ, unit_X, unit_Y, unit_Z,--         -- * Converting between vectors and angles-         direction, fromDirection, angleBetween, angleBetweenDirs        ) where -import Control.Lens ((^.))-import Data.VectorSpace-import Data.Cross--import Diagrams.ThreeD.Types import Diagrams.Coordinates+import Diagrams.ThreeD.Types   -- | The unit vector in the positive X direction.@@ -51,33 +44,3 @@ -- | The unit vector in the negative Z direction. unit_Z :: R3 unit_Z = 0 ^& 0 ^& (-1)----- | @direction v@ is the direction in which @v@ points.  Returns an---   unspecified value when given the zero vector as input.-direction :: Direction d => R3 -> d-direction v-  | r == 0 = fromSpherical $ Spherical zero zero-  | otherwise = fromSpherical $ Spherical θ φ where-  r = magnitude v-  (x,y,z) = unr3 v-  φ = asin (z / r) @@ rad-  θ = atan2 y x @@ rad-  zero = 0 @@ rad---- | @fromDirection d@ is the unit vector in the direction @d@.-fromDirection :: Direction d => d -> R3-fromDirection (toSpherical -> (Spherical θ' φ')) = r3 (x,y,z) where-  θ = θ'^.rad-  φ = φ'^.rad-  x = cos θ * cos φ-  y = sin θ * cos φ-  z = sin φ---- | compute the positive angle between the two vectors in their common plane-angleBetween  :: R3 -> R3 -> Angle-angleBetween v1 v2 = atan2 (magnitude $ cross3 v1 v2) (v1 <.> v2) @@ rad---- | compute the positive angle between the two vectors in their common plane-angleBetweenDirs  :: Direction d => d -> d -> Angle-angleBetweenDirs d1 d2 = angleBetween (fromDirection d1) (fromDirection d2)
src/Diagrams/Trail.hs view
@@ -77,7 +77,7 @@        , trailOffsets, trailOffset        , lineOffsets, lineOffset, loopOffsets        , trailVertices, lineVertices, loopVertices-       , fixTrail+       , trailLocSegments, fixTrail           -- * Modifying trails @@ -163,10 +163,8 @@   => Monoid (SegTree v) deriving instance (OrderedField (Scalar v), InnerSpace v)   => FT.Measured (SegMeasure v) (SegTree v)--instance (HasLinearMap v, InnerSpace v, OrderedField (Scalar v))-  => Transformable (SegTree v) where-  transform t = SegTree . transform t . op SegTree+deriving instance (HasLinearMap v, InnerSpace v, OrderedField (Scalar v))+  => Transformable (SegTree v)  type instance Codomain (SegTree v) = v @@ -938,7 +936,7 @@ -- --   > trailOffsetEx = (strokeLine almostClosed <> showOffset) # centerXY # pad 1.1 --   >   where showOffset = fromOffsets [trailOffset (wrapLine almostClosed)]---   >                    # stroke # lc red # lw 0.05+--   >                    # stroke # lc red trailOffset :: (InnerSpace v, OrderedField (Scalar v)) => Trail v -> v trailOffset = withLine lineOffset @@ -993,8 +991,12 @@ -- | Convert a concretely located trail into a list of fixed segments. fixTrail :: (InnerSpace v, OrderedField (Scalar v))          => Located (Trail v) -> [FixedSegment v]-fixTrail t = zipWith ((mkFixedSeg .) . at)-               (trailSegments (unLoc t)) (trailVertices t)+fixTrail t = map mkFixedSeg (trailLocSegments t)++-- | Convert a concretely located trail into a list of located segments.+trailLocSegments :: (InnerSpace v, OrderedField (Scalar v))+                  => Located (Trail v) -> [Located (Segment Closed v)]+trailLocSegments t = zipWith at (trailSegments (unLoc t)) (trailVertices t)  ------------------------------------------------------------ --  Modifying trails  --------------------------------------
src/Diagrams/Transform.hs view
@@ -11,6 +11,8 @@ -- ----------------------------------------------------------------------------- +{-# LANGUAGE TypeFamilies #-}+ module Diagrams.Transform     ( -- * Transformations       Transformation, inv, transl, apply, papply@@ -52,5 +54,5 @@ --   @ -- --   for all transformations @t1@ and @t2@.-under :: Transformable a => (a -> a) -> Transformation (V a) -> a -> a+under :: (Transformable a, Transformable b, V a ~ V b) => (a -> b) -> Transformation (V a) -> a -> b f `under` t = transform (inv t) . f . transform t
src/Diagrams/TwoD.hs view
@@ -65,14 +65,10 @@        , P2, p2, unp2, mkP2        , T2        , unitX, unitY, unit_X, unit_Y-       , direction, angleBetween, fromDirection+       , direction, fromDirection           -- * Angles        , tau-       , Angle-       , rad, turn, deg-       , fullTurn, fullCircle, angleRatio-       , (@@)           -- * Paths          -- ** Stroking@@ -148,24 +144,33 @@        , arrowHead        , arrowTail        , arrowShaft-       , headSize-       , tailSize        , headGap        , tailGap-       , gap-       , headColor+       , gaps, gap+       , headTexture        , headStyle-       , tailColor+       , tailTexture        , tailStyle-       , shaftColor+       , shaftTexture        , shaftStyle+       , headLength+       , tailLength+       , lengths           -- * Text        , text, topLeftText, alignedText, baselineText-       , font, fontSize, italic, oblique, bold+       , font, italic, oblique, bold, fontSize+       , fontSizeO, fontSizeL, fontSizeN, fontSizeG           -- * Images-       , Image, image+       , DImage(..), ImageData(..)+       , Embedded, External+       , image+       , loadImageEmb+       , loadImageExt+       , uncheckedImageRef+       , raster+       , rasterDia           -- * Transformations          -- ** Rotation@@ -233,6 +238,33 @@          -- ** Adjusting size        , sized, sizedAs +        -- * Textures+      , Texture(..), solid +      , SpreadMethod(..), GradientStop(..), mkStops, getFillTexture+      , fillTexture, getLineTexture, lineTexture, lineTextureA+      , stopFraction, stopColor++      , LGradient(..), lGradStops, lGradTrans, lGradStart, lGradEnd+      , lGradSpreadMethod, defaultLG, _LG, mkLinearGradient++      , RGradient(..)+      , rGradStops, rGradCenter0, rGradRadius0, rGradCenter1, rGradRadius1+      , rGradTrans, rGradSpreadMethod, defaultRG, _RG, mkRadialGradient++        -- ** Colors+      , fillColor, fc, fcA, recommendFillColor+      , lineColor, lc, lcA, _SC++       -- ** Width+       , LineWidth, getLineWidth, lineWidth, lineWidthA+       , lw, lwN, lwO, lwL, lwG+       , ultraThin, veryThin, thin, medium, thick, veryThick, ultraThick, none+       , tiny, verySmall, small, normal, large, veryLarge, huge++       -- ** Dashing+       , Dashing(..), DashingA, getDashing+       , dashing, dashingO, dashingL, dashingN, dashingG+          -- * Visual aids for understanding the internal model        , showOrigin        , showOrigin'@@ -245,13 +277,14 @@ import           Diagrams.TwoD.Arc import           Diagrams.TwoD.Arrow import           Diagrams.TwoD.Arrowheads+import           Diagrams.TwoD.Attributes import           Diagrams.TwoD.Combinators+import           Diagrams.TwoD.Deform import           Diagrams.TwoD.Ellipse import           Diagrams.TwoD.Image import           Diagrams.TwoD.Model import           Diagrams.TwoD.Path import           Diagrams.TwoD.Polygons-import           Diagrams.TwoD.Deform import           Diagrams.TwoD.Shapes import           Diagrams.TwoD.Size import           Diagrams.TwoD.Text
src/Diagrams/TwoD/Adjust.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE ViewPatterns-  #-}+{-# LANGUAGE Rank2Types #-}  ----------------------------------------------------------------------------- -- |@@ -18,27 +17,22 @@       setDefault2DAttributes     , adjustDiaSize2D     , adjustDia2D-    , adjustSize     -- for backwards compatibility-    , requiredScale  -- re-exported for backwards compatibility     ) where -import Diagrams.Core--import Diagrams.Attributes  (lineWidthA, lineColorA, lineCap-                            , lineJoin, lineMiterLimitA-                            )-import Diagrams.Util        ((#))--import Diagrams.TwoD.Types  (R2, p2)-import Diagrams.TwoD.Size   ( size2D, center2D, SizeSpec2D(..)-                            , requiredScaleT, requiredScale-                            )-import Diagrams.TwoD.Text   (fontSizeA)--import Data.AffineSpace     ((.-.))-import Data.Semigroup+import           Diagrams.Attributes      (lineCap, lineJoin,+                                           lineMiterLimitA)+import           Diagrams.Core+import           Diagrams.TwoD.Attributes (lineWidthA, lineTextureA)+import           Diagrams.TwoD.Size       (SizeSpec2D (..), center2D,+                                           requiredScale, size2D)+import           Diagrams.TwoD.Text       (fontSizeA)+import           Diagrams.TwoD.Types      (R2, T2, p2)+import           Diagrams.Util            (( # )) -import Data.Default.Class+import           Control.Lens             (Lens', (&), (.~), (^.))+import           Data.AffineSpace         ((.-.))+import           Data.Default.Class+import           Data.Semigroup  -- | Set default attributes of a 2D diagram (in case they have not --   been set):@@ -55,62 +49,58 @@ -- --       * Miter limit 10 setDefault2DAttributes :: Semigroup m => QDiagram b R2 m -> QDiagram b R2 m-setDefault2DAttributes d = d # lineWidthA def # lineColorA def # fontSizeA def+setDefault2DAttributes d = d # lineWidthA def # lineTextureA def # fontSizeA def                              # lineCap def # lineJoin def # lineMiterLimitA def + -- | Adjust the size and position of a 2D diagram to fit within the---   requested size. The first two arguments specify a method for---   extracting the requested output size from the rendering options,---   and a way of updating the rendering options with a new (more---   specific) size.+--   requested size. The first argument is a lens into the output+--   size contained in the rendering options.  Returns an updated+--   options record, any transformation applied to the diagram (the+--   inverse of which can be used, say, to translate output/device+--   coordinates back into local diagram coordinates), and the+--   modified diagram itself. adjustDiaSize2D :: Monoid' m-                => (Options b R2 -> SizeSpec2D)-                -> (SizeSpec2D -> Options b R2 -> Options b R2)+                => Lens' (Options b R2) SizeSpec2D                 -> b -> Options b R2 -> QDiagram b R2 m-                -> (Options b R2, QDiagram b R2 m)-adjustDiaSize2D getSize setSize _ opts d =+                -> (Options b R2, T2, QDiagram b R2 m)+adjustDiaSize2D szL _ opts d =   ( case spec of-       Dims _ _ -> opts-       _        -> setSize (uncurry Dims . scale s $ size) opts--  , d # scale s-      # translate tr+     Dims _ _ -> opts+     _        -> opts & szL .~ (uncurry Dims . scale s $ size)+  , adjustT+  , d # transform adjustT   )-  where spec = getSize opts+  where spec = opts ^. szL         size = size2D d         s    = requiredScale spec size         finalSz = case spec of                     Dims w h -> (w,h)                     _        -> scale s size         tr = (0.5 *. p2 finalSz) .-. (s *. center2D d)+        adjustT = translation tr <> scaling s  -- | @adjustDia2D@ provides a useful default implementation of --   the 'adjustDia' method from the 'Backend' type class. -----   As its first two arguments it requires a method for extracting---   the requested output size from the rendering options, and a way---   of updating the rendering options with a new (more specific) size.+--   As its first argument it requires a lens into the output size+--   contained in the rendering options. -- --   It then performs the following adjustments: -- --   * Set default attributes (see 'setDefault2DAttributes') -----   * Freeze the diagram in its final form--- --   * Scale and translate the diagram to fit within the requested --     size (see 'adjustDiaSize2D') -----   * Also return the actual adjusted size of the diagram.+--   It returns an updated options record, any transformation applied+--   to the diagram (the inverse of which can be used, say, to+--   translate output/device coordinates back into local diagram+--   coordinates), and the modified diagram itself. adjustDia2D :: Monoid' m-            => (Options b R2 -> SizeSpec2D)-            -> (SizeSpec2D -> Options b R2 -> Options b R2)+            => Lens' (Options b R2) SizeSpec2D             -> b -> Options b R2 -> QDiagram b R2 m-            -> (Options b R2, QDiagram b R2 m)-adjustDia2D getSize setSize b opts d-  = adjustDiaSize2D getSize setSize b opts (d # setDefault2DAttributes # freeze)+            -> (Options b R2, T2, QDiagram b R2 m)+adjustDia2D szL b opts d+  = adjustDiaSize2D szL b opts (d # setDefault2DAttributes) -{-# DEPRECATED adjustSize "Use Diagrams.TwoD.Size.requiredScaleT instead." #-}--- | Re-export 'requiredScaleT' with the name 'adjustSize' for---   backwards compatibility.-adjustSize :: SizeSpec2D -> (Double, Double) -> Transformation R2-adjustSize = requiredScaleT
src/Diagrams/TwoD/Arc.hs view
@@ -23,6 +23,7 @@     , annularWedge     ) where +import           Diagrams.Angle import           Diagrams.Core import           Diagrams.Located        (at) import           Diagrams.Segment@@ -130,7 +131,7 @@ -- --   <<diagrams/src_Diagrams_TwoD_Arc_arc'Ex.svg#diagram=arc'Ex&width=300>> -----   > arc'Ex = mconcat [ arc' r 0 (1/4 \@\@ turn) | r <- [0.5,-1,1.5] ]+--   > arc'Ex = mconcat [ arc' r (0 @@ turn) (1/4 @@ turn) | r <- [0.5,-1,1.5] ] --   >        # centerXY # pad 1.1 arc' :: (TrailLike p, V p ~ R2) => Double -> Angle -> Angle -> p arc' r start end = trailLike $ scale (abs r) ts `at` (rotate start $ p2 (abs r,0))@@ -143,9 +144,9 @@ --   <<diagrams/src_Diagrams_TwoD_Arc_wedgeEx.svg#diagram=wedgeEx&width=400>> -- --   > wedgeEx = hcat' (with & sep .~ 0.5)---   >   [ wedge 1 (0 \@\@ turn) (1/4)---   >   , wedge 1 (7/30 \@\@ turn) (11/30)---   >   , wedge 1 (1/8 \@\@ turn) (7/8)+--   >   [ wedge 1 (0 @@ turn) (1/4 @@ turn)+--   >   , wedge 1 (7/30 @@ turn) (11/30 @@ turn)+--   >   , wedge 1 (1/8 @@ turn) (7/8 @@ turn) --   >   ] --   >   # fc blue --   >   # centerXY # pad 1.1@@ -195,9 +196,9 @@ --   <<diagrams/src_Diagrams_TwoD_Arc_annularWedgeEx.svg#diagram=annularWedgeEx&width=400>> -- --   > annularWedgeEx = hcat' (with & sep .~ 0.50)---   >   [ annularWedge 1 0.5 (0 \@\@ turn) (1/4)---   >   , annularWedge 1 0.3 (7/30 \@\@ turn) (11/30)---   >   , annularWedge 1 0.7 (1/8 \@\@ turn) (7/8)+--   >   [ annularWedge 1 0.5 (0 @@ turn) (1/4 @@ turn)+--   >   , annularWedge 1 0.3 (7/30 @@ turn) (11/30 @@ turn)+--   >   , annularWedge 1 0.7 (1/8 @@ turn) (7/8 @@ turn) --   >   ] --   >   # fc blue --   >   # centerXY # pad 1.1
src/Diagrams/TwoD/Arrow.hs view
@@ -1,8 +1,10 @@-{-# LANGUAGE FlexibleContexts      #-}-{-# LANGUAGE GADTs                 #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TemplateHaskell       #-}-{-# LANGUAGE TypeFamilies          #-}+{-# LANGUAGE DeriveDataTypeable         #-}+{-# LANGUAGE FlexibleContexts           #-}+{-# LANGUAGE GADTs                      #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses      #-}+{-# LANGUAGE TemplateHaskell            #-}+{-# LANGUAGE TypeFamilies               #-}  ----------------------------------------------------------------------------- -- |@@ -25,14 +27,14 @@ -- --   > -- Connecting two diagrams at their origins. --   >---   > sq = square 2 # showOrigin # lc darkgray # lw 0.07+--   > sq = square 2 # showOrigin # lc darkgray # lw ultraThick --   > ds = (sq # named "left") ||| strutX 3 ||| (sq # named "right") --   > --   > shaft  = cubicSpline False ( map p2 [(0, 0), (1, 0), (1, 0.2), (2, 0.2)]) --   >---   > example1 = ds # connect' (with & arrowHead .~ dart & headSize .~ 0.6---   >                                & tailSize .~ 0.5 & arrowTail .~ quill---   >                                & shaftStyle %~ lw 0.02 & arrowShaft .~ shaft)+--   > example1 = ds # connect' (with & arrowHead .~ dart & arrowTail .~ quill+--   >                                & arrowShaft .~ shaft+--   >                                & headLength .~ huge & tailLength .~ veryLarge) --   >                                "left" "right" # pad 1.1           -- ** Example 2@@ -41,12 +43,13 @@ -- --   > -- Comparing connect, connectPerim, and arrowAt. --   >---   > oct  = octagon 1 # lc darkgray # lw 0.10 # showOrigin+--   > oct  = octagon 1 # lc darkgray # lw ultraThick # showOrigin --   > dias = oct # named "first" ||| strut 3 ||| oct # named "second" --   > --   > -- Connect two diagrams and two points on their trails.---   > ex12 = dias # connect "first" "second"---   >             # connectPerim "first" "second" (15/16 \@\@ turn) (9/16 \@\@ turn)+--   > ex12 = dias # connect' (with & lengths .~ veryLarge) "first" "second"+--   >             # connectPerim' (with & lengths .~ veryLarge)+--   >        "first" "second" (15/16 @@ turn) (9/16 @@ turn) --   > --   > -- Place an arrow at (0,0) the size and direction of (0,1). --   > ex3 = arrowAt origin unit_Y@@ -76,16 +79,17 @@        , arrowHead        , arrowTail        , arrowShaft-       , headSize-       , tailSize        , headGap        , tailGap-       , gap-       , headColor+       , gaps, gap+       , headTexture        , headStyle-       , tailColor+       , headLength+       , tailTexture        , tailStyle-       , shaftColor+       , tailLength+       , lengths+       , shaftTexture        , shaftStyle        , straightShaft @@ -94,51 +98,49 @@        , module Diagrams.TwoD.Arrowheads        ) where -import           Control.Applicative              ((<*>))-import           Control.Arrow                    (first)-import           Control.Lens                     (Lens', Setter', Traversal',-                                                   generateSignatures,-                                                   lensRules, makeLensesWith,-                                                   (%~), (&), (.~), (^.))+import           Control.Applicative      ((<*>))+import           Control.Lens             (Lens', Setter', Traversal',+                                           generateSignatures, lensRules,+                                           makeLensesWith, (%~), (&), (.~),+                                           (^.)) import           Data.AffineSpace import           Data.Default.Class-import           Data.Functor                     ((<$>))-import           Data.Maybe                       (fromMaybe)-import           Data.Monoid                      (mempty, (<>))-import           Data.Monoid.Coproduct            (untangle)-import           Data.Monoid.Split-import           Data.Semigroup                   (option)+import           Data.Functor             ((<$>))+import           Data.Maybe               (fromMaybe)+import           Data.Monoid.Coproduct    (untangle)+import           Data.Semigroup import           Data.VectorSpace -import           Data.Colour                      hiding (atop)-import           Diagrams.Attributes+import           Data.Colour              hiding (atop) import           Diagrams.Core-import           Diagrams.Core.Types              (QDiaLeaf (..), mkQD')+import           Diagrams.Core.Types      (QDiaLeaf (..), mkQD') +import           Diagrams.Angle+import           Diagrams.Attributes import           Diagrams.Parametric import           Diagrams.Path-import           Diagrams.Solve                   (quadForm)-import           Diagrams.Tangent                 (tangentAtEnd, tangentAtStart)+import           Diagrams.Solve           (quadForm)+import           Diagrams.Tangent         (tangentAtEnd, tangentAtStart) import           Diagrams.Trail import           Diagrams.TwoD.Arrowheads-import           Diagrams.TwoD.Path               (strokeT)-import           Diagrams.TwoD.Transform          (rotate, translateX)-import           Diagrams.TwoD.Transform.ScaleInv (scaleInvPrim)+import           Diagrams.TwoD.Attributes+import           Diagrams.TwoD.Path       (stroke, strokeT)+import           Diagrams.TwoD.Transform  (rotate, translateX) import           Diagrams.TwoD.Types-import           Diagrams.TwoD.Vector             (direction, unitX, unit_X)-import           Diagrams.Util                    (( # ))+import           Diagrams.TwoD.Vector     (direction, unitX, unit_X)+import           Diagrams.Util            (( # ))  data ArrowOpts   = ArrowOpts     { _arrowHead  :: ArrowHT     , _arrowTail  :: ArrowHT     , _arrowShaft :: Trail R2-    , _headSize   :: Double-    , _tailSize   :: Double-    , _headGap    :: Double-    , _tailGap    :: Double+    , _headGap    :: Measure R2+    , _tailGap    :: Measure R2     , _headStyle  :: Style R2+    , _headLength :: Measure R2     , _tailStyle  :: Style R2+    , _tailLength :: Measure R2     , _shaftStyle :: Style R2     } @@ -150,15 +152,15 @@   def = ArrowOpts         { _arrowHead    = dart         , _arrowTail    = noTail-        , _arrowShaft   = trailFromOffsets [unitX]-        , _headSize     = 0.3-        , _tailSize     = 0.3-        , _headGap      = 0-        , _tailGap      = 0+        , _arrowShaft   = straightShaft+        , _headGap      = none+        , _tailGap      = none          -- See note [Default arrow style attributes]         , _headStyle    = mempty+        , _headLength     = normal         , _tailStyle    = mempty+        , _tailLength     = normal         , _shaftStyle   = mempty         } @@ -173,21 +175,22 @@ -- | The trail to use for the arrow shaft. arrowShaft :: Lens' ArrowOpts (Trail R2) --- | Radius of a circumcircle around the head.-headSize :: Lens' ArrowOpts Double---- | Radius of a circumcircle around the tail.-tailSize :: Lens' ArrowOpts Double- -- | Distance to leave between the head and the target point.-headGap :: Lens' ArrowOpts Double+headGap :: Lens' ArrowOpts (Measure R2)  -- | Distance to leave between the starting point and the tail.-tailGap :: Lens' ArrowOpts Double+tailGap :: Lens' ArrowOpts (Measure R2) -gap :: Traversal' ArrowOpts Double-gap f opts = (\h t -> opts & headGap .~ h & tailGap .~ t) <$> f (opts ^. headGap) <*> f (opts ^. tailGap)+-- | Set both the @headGap@ and @tailGap@ simultaneously.+gaps :: Traversal' ArrowOpts (Measure R2) +gaps f opts = (\h t -> opts & headGap .~ h & tailGap .~ t)+        <$> f (opts ^. headGap)+        <*> f (opts ^. tailGap) +-- | Same as gaps, provided for backward compatiiblity.+gap :: Traversal' ArrowOpts (Measure R2)+gap = gaps+ -- | Style to apply to the head. @headStyle@ is modified by using the lens --   combinator @%~@ to change the current style. For example, to change --   an opaque black arrowhead to translucent orange:@@ -200,37 +203,36 @@ -- | Style to apply to the shaft. See `headStyle`. shaftStyle :: Lens' ArrowOpts (Style R2) --- | A lens for setting or modifying the color of an arrowhead. For---   example, one may write @... (with & headColor .~ blue)@ to get an---   arrow with a blue head, or @... (with & headColor %~ blend 0.5---   white)@ to make an arrow's head a lighter color.  For more general---   control over the style of arrowheads, see 'headStyle'.------   Note that the most general type of @headColor@ would be------ @---   (Color c, Color c') => Setter ArrowOpts ArrowOpts c c'--- @------   but that can cause problems for type inference when setting the---   color.  However, using it at that more general type may---   occasionally be useful, for example, if you want to apply some---   opacity to a color, as in @... (with & headColor %~---   (\`withOpacity\` 0.5))@.  If you want the more general type, you---   can use @'headStyle' . 'styleFillColor'@ in place of @headColor@.-headColor :: Color c => Setter' ArrowOpts c-headColor = headStyle . styleFillColor+-- | The length from the start of the joint to the tip of the head.+headLength :: Lens' ArrowOpts (Measure R2) --- | A lens for setting or modifying the color of an arrow---   tail. See 'headColor'.-tailColor :: Color c => Setter' ArrowOpts c-tailColor = tailStyle . styleFillColor+-- | The length of the tail plus its joint. +tailLength :: Lens' ArrowOpts (Measure R2) --- | A lens for setting or modifying the color of an arrow---   shaft. See 'headColor'.-shaftColor :: Color c => Setter' ArrowOpts c-shaftColor = shaftStyle . styleLineColor+-- | Set both the @headLength@ and @tailLength@ simultaneously.+lengths :: Traversal' ArrowOpts (Measure R2)+lengths f opts = (\h t -> opts & headLength .~ h & tailLength .~ t) <$> f (opts ^. headLength)+             <*> f (opts ^. tailLength) +-- | A lens for setting or modifying the texture of an arrowhead. For+--   example, one may write @... (with & headTexture .~ grad)@ to get an+--   arrow with a head filled with a gradient, assuming grad has been+--   defined. Or @... (with & headTexture .~ solid blue@ to set the head+--   color to blue. For more general control over the style of arrowheads,+--   see 'headStyle'.+headTexture :: Setter' ArrowOpts Texture+headTexture = headStyle . styleFillTexture++-- | A lens for setting or modifying the texture of an arrow+--   tail.+tailTexture :: Setter' ArrowOpts Texture+tailTexture = tailStyle . styleFillTexture++-- | A lens for setting or modifying the texture of an arrow+--   shaft.+shaftTexture :: Setter' ArrowOpts Texture+shaftTexture = shaftStyle . styleLineTexture+ -- Set the default shaft style of an `ArrowOpts` record by applying the -- default style after all other styles have been applied. -- The semigroup stucture of the lw attribute will insure that the default@@ -246,6 +248,10 @@ tailSty :: ArrowOpts -> Style R2 tailSty opts = fc black (opts^.tailStyle) +fromMeasure :: Double -> Double -> Measure R2 -> Double+fromMeasure g n m = u+  where Output u = toOutput g n m+ -- | Calculate the length of the portion of the horizontal line that passes --   through the origin and is inside of p. xWidth :: (Traced t, V t ~ R2) => t -> Double@@ -255,45 +261,52 @@     b = fromMaybe 0 (magnitude <$> traceV origin unit_X p)  -- | Get the line color from the shaft to use as the fill color for the joint.-colorJoint :: Style v -> Style v+--   And set the opacity of the shaft to the current opacity.+colorJoint :: Style R2 -> Style R2 colorJoint sStyle =-    let c = fmap getLineColor . getAttr $ sStyle in-    case c of-        Nothing -> fillColor (black :: Colour Double)   -- default color for joints-                   $ mempty-        Just c' -> fillColor c' $ mempty+    let c = fmap getLineTexture . getAttr $ sStyle+        o = fmap getOpacity . getAttr $ sStyle+    in+    case (c, o) of+        (Nothing, Nothing) -> fillColor (black :: Colour Double) $ mempty+        (Just t, Nothing) -> fillTexture t $ mempty+        (Nothing, Just o') -> opacity o' . fillColor (black :: Colour Double)  $ mempty+        (Just t, Just o') -> opacity o' . fillTexture t $ mempty  -- | Get line width from a style.-widthOfJoint :: Style v -> Double-widthOfJoint sStyle =-    let w = fmap getLineWidth . getAttr $ sStyle in-    case w of-        Nothing -> 0.01 -- this case should never happen.-        Just w' -> w'+widthOfJoint :: Style v -> Double -> Double  -> Double+widthOfJoint sStyle gToO nToO =+  maybe (fromMeasure gToO nToO (Output 1)) -- Should be same as default line width+        (fromMeasure gToO nToO)+        (fmap getLineWidth . getAttr $ sStyle)  -- | Combine the head and its joint into a single scale invariant diagram --   and move the origin to the attachment point. Return the diagram --   and its width.-mkHead :: Renderable (Path R2) b => ArrowOpts -> (Diagram b R2, Double)-mkHead opts = ( (j <> h) # moveOriginBy (jWidth *^ unit_X) # lw 0+mkHead :: Renderable (Path R2) b =>+          Double -> ArrowOpts -> Double -> Double -> (Diagram b R2, Double)+mkHead size opts gToO nToO = ((j <> h) # moveOriginBy (jWidth *^ unit_X) # lwO 0               , hWidth + jWidth)   where-    (h', j') = (opts^.arrowHead) (opts^.headSize) (widthOfJoint $ shaftSty opts)+    (h', j') = (opts^.arrowHead) size+               (widthOfJoint (shaftSty opts) gToO nToO)     hWidth = xWidth h'     jWidth = xWidth j'-    h = scaleInvPrim h' unitX # applyStyle (headSty opts)-    j = scaleInvPrim j' unitX # applyStyle (colorJoint (opts^.shaftStyle))+    h = stroke h' # applyStyle (headSty opts)+    j = stroke j' # applyStyle (colorJoint (opts^.shaftStyle))  -- | Just like mkHead only the attachment point is on the right.-mkTail :: Renderable (Path R2) b => ArrowOpts -> (Diagram b R2, Double)-mkTail opts = ( (t <> j) # moveOriginBy (jWidth *^ unitX) # lw 0+mkTail :: Renderable (Path R2) b =>+          Double -> ArrowOpts -> Double -> Double -> (Diagram b R2, Double)+mkTail size opts gToO nToO = ((t <> j) # moveOriginBy (jWidth *^ unitX) # lwO 0               , tWidth + jWidth)   where-    (t', j') = (opts^.arrowTail) (opts^.tailSize) (widthOfJoint $ shaftSty opts)+    (t', j') = (opts^.arrowTail) size+               (widthOfJoint (shaftSty opts) gToO nToO)     tWidth = xWidth t'     jWidth = xWidth j'-    t = scaleInvPrim t' unitX # applyStyle (tailSty opts)-    j = scaleInvPrim j' unitX # applyStyle (colorJoint (opts^.shaftStyle))+    t = stroke t' # applyStyle (tailSty opts)+    j = stroke j' # applyStyle (colorJoint (opts^.shaftStyle))  -- | Make a trail with the same angles and offset as an arrow with tail width --   tw, head width hw and shaft of tr, such that the magnituted of the shaft@@ -337,6 +350,16 @@     hv = hw *^ (tangentAtEnd   tr # normalized)     v  = trailOffset tr +-- Calculate the approximate envelope of a horizontal arrow+-- as if the arrow were made only of a shaft.+arrowEnv :: ArrowOpts -> Double -> Envelope R2+arrowEnv opts len = getEnvelope horizShaft+  where+    horizShaft = shaft # rotate (negateV direction v) # scale (len / m)+    m = magnitude v+    v = trailOffset shaft+    shaft = opts ^. arrowShaft+ -- | @arrow len@ creates an arrow of length @len@ with default --   parameters, starting at the origin and ending at the point --   @(len,0)@.@@ -350,15 +373,13 @@ arrow' :: Renderable (Path R2) b => ArrowOpts -> Double -> Diagram b R2 arrow' opts len = mkQD' (DelayedLeaf delayedArrow) -    -- We must approximate the envelope and trace by just drawing the-    -- arrow from the origin to (len,0) and using its envelope and-    -- trace.  That may not end up being exactly right (if the arrow-    -- gets scaled, the shaft may get a bit longer or shorter, and so-    -- on) but it's close enough.-    (getEnvelope approx) (getTrace approx) mempty mempty+      -- Currently arrows have an empty envelope and trace.+      (arrowEnv opts len) mempty mempty mempty+   where -    -- Once we learn the global transformation context this arrow is+    -- Once we learn the global transformation context (da) and the two scale+    -- factors, normal to output (n) and global to output (g), this arrow is     -- drawn in, we can apply it to the origin and (len,0) to find out     -- the actual final points between which this arrow should be     -- drawn.  We need to know this to draw it correctly, since the@@ -366,22 +387,12 @@     -- between which we need to draw the shaft do not transform     -- uniformly as the transformation applied to the entire arrow.     -- See https://github.com/diagrams/diagrams-lib/issues/112.-    delayedArrow da =--      -- Note we only take the *unfrozen* transformation.  The frozen-      -- transformation *do* affect scale-invariant objects like-      -- arrowheads, and will still be higher up in the tree (so we-      -- don't need to apply it here).-      let (unfrozenTr, globalSty) = option mempty (first unsplitR . untangle) . fst $ da-      in  dArrow globalSty unfrozenTr len--    unsplitR (M    m) = m-    unsplitR (_ :| m) = m--    approx = dArrow mempty mempty len+    delayedArrow da g n =+      let (trans, globalSty) = option mempty untangle . fst $ da+      in  dArrow globalSty trans len g n      -- Build an arrow and set its endpoints to the image under tr of origin and (len,0).-    dArrow sty tr ln = (h' <> t' <> shaft)+    dArrow sty tr ln gToO nToO = (h' <> t' <> shaft)                # moveOriginBy (tWidth *^ (unit_X # rotate tAngle))                # rotate (direction (q .-. p) ^-^ dir)                # moveTo p@@ -393,15 +404,22 @@         -- Use the existing line color for head, tail, and shaft by         -- default (can be overridden by explicitly setting headStyle,         -- tailStyle, or shaftStyle).-        globalLC = getLineColor <$> getAttr sty+        globalLC = getLineTexture <$> getAttr sty         opts' = opts-          & headStyle  %~ maybe id fillColor globalLC-          & tailStyle  %~ maybe id fillColor globalLC-          & shaftStyle %~ maybe id lineColor globalLC+          & headStyle  %~ maybe id fillTexture globalLC+          & tailStyle  %~ maybe id fillTexture globalLC+          & shaftStyle %~ maybe id lineTexture globalLC +        -- The head size, tail size, head gap, and tail gap are obtained+        -- from the style and converted to output units.+        hSize = fromMeasure gToO nToO (opts ^. headLength)+        tSize = fromMeasure gToO nToO (opts ^. tailLength)+        hGap = fromMeasure gToO nToO (opts ^. headGap)+        tGap = fromMeasure gToO nToO (opts ^. tailGap)+         -- Make the head and tail and save their widths.-        (h, hWidth') = mkHead opts'-        (t, tWidth') = mkTail opts'+        (h, hWidth') = mkHead hSize opts' gToO nToO+        (t, tWidth') = mkTail tSize opts' gToO nToO          rawShaftTrail = opts^.arrowShaft         shaftTrail@@ -414,8 +432,8 @@           # transform tr          -- Adjust the head width and tail width to take gaps into account-        tWidth = tWidth' + opts^.tailGap-        hWidth = hWidth' + opts^.headGap+        tWidth = tWidth' + tGap+        hWidth = hWidth' + hGap          -- Calculate the angles that the head and tail should point.         tAngle = direction . tangentAtStart $ shaftTrail@@ -459,7 +477,8 @@ arrowAt'   :: Renderable (Path R2) b =>      ArrowOpts -> P2 -> R2 -> Diagram b R2-arrowAt' opts s v = arrow' opts len # rotate dir # moveTo s+arrowAt' opts s v = arrow' opts len+                  # rotate dir # moveTo s   where     len = magnitude v     dir = direction v
src/Diagrams/TwoD/Arrowheads.hs view
@@ -22,7 +22,7 @@        , dart        , spike        , thorn-       , missile+       , lineHead        , noHead         -- ** Configurable arrowheads@@ -33,7 +33,6 @@        , arrowheadDart        , arrowheadSpike        , arrowheadThorn-       , arrowheadMissile         -- * Arrow tails        -- ** Standard arrow tails@@ -41,7 +40,7 @@        , dart'        , spike'        , thorn'-       , missile'+       , lineTail        , noTail        , quill        , block@@ -55,19 +54,20 @@        , ArrowHT        ) where -import           Control.Lens            ((&), (.~))+import           Control.Lens            ((&), (.~), (^.)) import           Data.AffineSpace import           Data.Default.Class-import           Data.Functor            ((<$>))-import           Data.Maybe              (fromMaybe) import           Data.Monoid             (mempty, (<>)) import           Data.VectorSpace +import           Diagrams.Angle import           Diagrams.Core-import           Diagrams.CubicSpline    (cubicSpline)++import           Diagrams.Coordinates    ((^&)) import           Diagrams.Path import           Diagrams.Segment import           Diagrams.Trail+import           Diagrams.TrailLike      (fromOffsets) import           Diagrams.TwoD.Align import           Diagrams.TwoD.Arc       (arc') import           Diagrams.TwoD.Path      ()@@ -75,139 +75,115 @@ import           Diagrams.TwoD.Shapes import           Diagrams.TwoD.Transform import           Diagrams.TwoD.Types-import           Diagrams.TwoD.Vector    (e, unitX, unit_X)+import           Diagrams.TwoD.Vector    (fromDirection, direction, unit_X) import           Diagrams.Util           (( # ))  -----------------------------------------------------------------------------  type ArrowHT = Double -> Double -> (Path R2, Path R2) -htRadius :: Double-htRadius = 0.5--scaleR :: (Transformable t, Scalar (V t) ~ Double) => t -> t-scaleR = scale htRadius--unit_X2 :: R2-unit_X2 = scaleR unit_X- closedPath :: (Floating (Scalar v), Ord (Scalar v), InnerSpace v) => Trail v -> Path v closedPath = pathFromTrail . closeTrail  -- Heads ---------------------------------------------------------------------   > drawHead h = arrowAt' (with & arrowHead .~ h & shaftStyle %~ lw 0)+--   > drawHead h = arrowAt' (with & arrowHead .~ h & shaftStyle %~ lw none) --   >         origin (r2 (0.001, 0))---   >      <> square 0.5 # alignL # lw 0+--   >      <> square 0.5 # alignL # lw none  -- | Isoceles triangle style. The above example specifies an angle of `2/5 Turn`.  -- | <<diagrams/src_Diagrams_TwoD_Arrowheads_tri25Ex.svg#diagram=tri25Ex&width=120>> ---   > tri25Ex = arrowAt' (with & arrowHead .~ arrowheadTriangle (2/5 \@\@ turn) & shaftStyle %~ lw 0)+--   > tri25Ex = arrowAt' (with & arrowHead .~ arrowheadTriangle (2/5 @@ turn) & shaftStyle %~ lw none) --   >           origin (r2 (0.001, 0))---   >        <> square 0.6 # alignL # lw 0+--   >        <> square 0.6 # alignL # lw none arrowheadTriangle :: Angle -> ArrowHT arrowheadTriangle theta = aHead   where-    aHead size _ = (p, mempty)+    aHead len _ = (p, mempty)       where+        psi = pi - (theta ^. rad)+        r = len / (1 + cos psi)         p = polygon (def & polyType .~ PolyPolar [theta, (negateV 2 *^ theta)]-            (repeat (htRadius * size)) & polyOrient .~ NoOrient)  # alignL+            (repeat r) & polyOrient .~ NoOrient)  # alignL + -- | Isoceles triangle with linear concave base. Inkscape type 1 - dart like. arrowheadDart :: Angle -> ArrowHT-arrowheadDart theta = aHead+arrowheadDart theta len shaftWidth = (hd # scale size, jt)   where-    aHead size shaftWidth = (dartP # moveOriginTo (dartVertices !! 2), joint)-      where-        r = htRadius * size-        dartP = polygon-                ( def & polyType .~ PolyPolar [theta, (1/2 @@ turn) ^-^ theta, (1/2 @@ turn) ^-^ theta]-                                              [r, r, 0.1 * size, r]-                      & polyOrient .~ NoOrient-                )-        dartVertices =  (concat . pathVertices) $ dartP-        m = magnitude (dartVertices !! 1 .-. dartVertices !! 3)-        s = 1 - shaftWidth / m-        v1 = (dartVertices !! 1 .-. dartVertices !! 2) # scale s-        v2 = (dartVertices !! 3 .-. dartVertices !! 2) # scale s-        joint = (closedPath $ trailFromVertices [ dartVertices !! 2-                             , dartVertices !! 1 .-^ v1-                             , dartVertices !! 3 .-^ v2-                             , dartVertices !! 2 ]) # alignR+    hd = snugL . pathFromTrail . glueTrail $ fromOffsets [t1, t2, b2, b1]+    jt = pathFromTrail . glueTrail $ j <> reflectY j+    j = closeTrail $ fromOffsets [(-jLength ^& 0), (0 ^& shaftWidth / 2)]+    v = fromDirection theta+    (t1, t2) = (unit_X ^+^ v, (-0.5 ^& 0) ^-^ v)+    [b1, b2] = map (reflectY . negateV) [t1, t2]+    psi = pi - (direction . negateV $ t2) ^. rad+    jLength = shaftWidth / (2 * tan psi) +    -- If the shaft if too wide, set the size to a default value of 1.+    size = max 1 ((len - jLength) / (1.5))+ -- | Isoceles triangle with curved concave base. Inkscape type 2. arrowheadSpike :: Angle -> ArrowHT-arrowheadSpike theta = aHead+arrowheadSpike theta len shaftWidth  = (hd # scale r, jt # scale r)   where-    aHead size shaftWidth = (barb # moveOriginBy (m *^ unit_X) , joint)-      where-        a  = e theta # scaleR-        a' = reflectY a-        l1 = trailFromSegments [straight (unit_X2 ^+^ a)]-        l2 = trailFromSegments [reverseSegment . straight $ (unit_X2 ^+^ a')]-        c  = reflectX $ arc' htRadius theta (negateV theta)-        barb = (closedPath $ (l1 <> c <> l2)) # scale size-        m = xWidth barb --c `atParam` 0.5-        b =  asin ((shaftWidth / 2) / (htRadius  * size)) @@ rad-        c' = arc' htRadius (negateV b) b # scale size-        joint = (closedPath $ (c')) # centerY # alignR-        xWidth p = pa + pb-          where-            pa = fromMaybe 0 (magnitude <$> traceV origin unitX p)-            pb = fromMaybe 0 (magnitude <$> traceV origin unit_X p)+    hd = snugL . closedPath $ l1 <> c <> l2+    jt = alignR . centerY . pathFromTrail+                . closeTrail $ arc' 1 (negateV phi) phi+    l1 = trailFromSegments [straight $ unit_X ^+^ v]+    l2 = trailFromSegments [reverseSegment . straight $ (unit_X ^+^ (reflectY v))]+    c = reflectX $ arc' 1 theta (negateV theta)+    v = fromDirection theta +    -- The length of the head without its joint is, -2r cos theta and+    -- the length of the joint is r - sqrt (r^2 - y^2). So the total+    -- length of the arrow head is given by r(1 - 2 cos theta)-sqrt (r^2-y^2).+    -- Solving the quadratic gives two roots, we want the larger one.++    -- 1/4 turn < theta < 2/3 turn.+    a = 1 - 2 * cos (theta ^. rad)+    y = shaftWidth / 2++    -- If the shaft is too wide for the head, we default the radius r to+    -- 2/3 * len by setting d=1 and phi=pi/2.+    d = max 1 (len**2 + (1 - a**2) * y**2)+    r = (a * len + sqrt d) / (a**2 -1)+    phi = asin (min 1 (y/r)) @@ rad+ -- | Curved sides, linear concave base. Illustrator CS5 #3-arrowheadThorn :: Angle -> Double -> ArrowHT-arrowheadThorn theta r = aHead+arrowheadThorn :: Angle -> ArrowHT+arrowheadThorn theta len shaftWidth = (hd # scale size, jt)   where-    aHead size shaftWidth = (thornP # moveOriginTo (thornVertices !! 2), joint)-      where-        a  = e theta # scaleR-        c1 = curvedSide theta-        l1 = straight $ (reflectY a) ^-^ (unit_X2 # scale r)-        l2 = straight $ unit_X2 # scale r ^-^ a-        c2 = c1 # rotate (negateV theta)-        thornP = (closedPath $ trailFromSegments [c1, l1, l2, c2]) # scale size-        thornVertices =  (concat . pathVertices) $ thornP-        m = magnitude (thornVertices !! 1 .-. thornVertices !! 3)-        s = 1 - shaftWidth / m-        v1 = (thornVertices !! 1 .-. thornVertices !! 2) # scale s-        v2 = (thornVertices !! 3 .-. thornVertices !! 2) # scale s-        joint = (closedPath $ trailFromVertices [ thornVertices !! 2-                             , thornVertices !! 1 .-^ v1-                             , thornVertices !! 3 .-^ v2-                             , thornVertices !! 2 ]) # alignR+    hd = snugL . pathFromTrail . glueTrail $ hTop <> reflectY hTop+    hTop = closeTrail . trailFromSegments $ [c, l]+    jt = pathFromTrail . glueTrail $ j <> reflectY j+    j = closeTrail $ fromOffsets [(-jLength ^& 0), (0 ^& shaftWidth / 2)]+    c = curvedSide theta+    v = fromDirection theta+    l = reverseSegment . straight $ t+    t = v ^-^ (-0.5 ^& 0)+    psi = pi - (direction . negateV $ t) ^. rad+    jLength = shaftWidth / (2 * tan psi) +    -- If the shaft if too wide, set the size to a default value of 1.    +    size = max 1 ((len - jLength) / (1.5))+ -- | Make a side for the thorn head. curvedSide :: Angle -> Segment Closed R2 curvedSide theta = bezier3 ctrl1 ctrl2 end   where-    v0    = scaleR unit_X-    v1    = e theta # scaleR-    ctrl1 = v0 # scaleR-    ctrl2 = v0 ^+^ (v1 # scaleR)+    v0    = unit_X+    v1    = fromDirection theta+    ctrl1 = v0+    ctrl2 = v0 ^+^ v1     end   = v0 ^+^ v1 --- | Transform an arrowhead/tail by fitting a cubic spline to it's vertices.---   XXX Rear vertices of the arrowhead will extend outside of the unit circle.---   XXX and the joint is a rectancgle as opposed to the correct shape.-smoothArrowhead :: ArrowHT -> ArrowHT-smoothArrowhead f = aHead-  where-    aHead size shaftWidth = (h, j)-      where-        (h', _) = f size shaftWidth-        h = smooth $ pathVertices h'-        -- XXX replace square joint with actual shape-        j = square shaftWidth # scaleX 0.25 alignR-        smooth [] = mempty-        smooth (x:xs) = cubicSpline True x <> smooth xs--arrowheadMissile :: Angle -> ArrowHT-arrowheadMissile theta = smoothArrowhead $ arrowheadDart theta- -- Standard heads ---------------------------------------------------------+-- | A line the same width as the shaft.+lineHead :: ArrowHT+lineHead s w = (square 1 # scaleX s # scaleY w # alignL, mempty)+ noHead :: ArrowHT noHead _ _ = (mempty, mempty) @@ -227,7 +203,7 @@  --   > thornEx = drawHead thorn thorn :: ArrowHT-thorn = arrowheadThorn (3/8 @@ turn) 1+thorn = arrowheadThorn (3/8 @@ turn)   -- | <<diagrams/src_Diagrams_TwoD_Arrowheads_dartEx.svg#diagram=dartEx&width=100>> @@ -235,16 +211,10 @@ dart :: ArrowHT dart = arrowheadDart (2/5 @@ turn) --- | <<diagrams/src_Diagrams_TwoD_Arrowheads_missileEx.svg#diagram=missileEx&width=100>>----   > missileEx = drawHead missile-missile :: ArrowHT-missile = arrowheadMissile (2/5 @@ turn)- -- Tails ---------------------------------------------------------------------   > drawTail t = arrowAt' (with  & arrowTail .~ t & shaftStyle %~ lw 0 & arrowHead .~ noHead)+--   > drawTail t = arrowAt' (with  & arrowTail .~ t & shaftStyle %~ lw none & arrowHead .~ noHead) --   >         origin (r2 (0.001, 0))---   >      <> square 0.5 # alignL # lw 0+--   >      <> square 0.5 # alignL # lw none  -- | Utility function to convert any arrowhead to an arrowtail, i.e. --   attached at the start of the trail.@@ -260,29 +230,28 @@ arrowtailBlock :: Angle -> ArrowHT arrowtailBlock theta = aTail   where-   aTail size _ = (t, mempty)+   aTail len _ = (t, mempty)       where-        t = square 1 # scaleX x # scaleY y # scale size # alignR-        a'  = e theta # scaleR+        t = rect len (len * x) # alignR+        a'  = fromDirection theta         a = a' ^-^ (reflectY a')-        y = magnitude a-        b = a' ^-^ (reflectX a')-        x = magnitude b+        x = magnitude a  -- | The angle is where the top left corner intersects the circle. arrowtailQuill :: Angle -> ArrowHT-arrowtailQuill theta =aTail+arrowtailQuill theta = aTail   where-   aTail size shaftWidth = (t, j)+   aTail len shaftWidth = (t, j)       where         t = ( closedPath $ trailFromVertices [v0, v1, v2, v3, v4, v5, v0] )             # scale size # alignR+        size = len / 0.6         v0 = p2 (0.5, 0)-        v2 = p2 (unr2 $ e theta # scaleR)-        v1 = v2 # translateX (5/4 * htRadius)+        v2 = p2 (unr2 $ fromDirection theta # scale 0.5)+        v1 = v2 # translateX (5/8)         v3 = p2 (-0.1, 0)         v4 = v2 # reflectY-        v5 = v4 # translateX (5/4 * htRadius)+        v5 = v4 # translateX (5/8)         s = 1 - shaftWidth / magnitude (v1 .-. v5)         n1 = v0 # translateY (0.5 * shaftWidth)         n2 = v1 .-^ ((v1 .-. v0) # scale s)@@ -292,6 +261,9 @@                 [ v0, n1, n2, v0, n3, n4, v0 ])  -- Standard tails ---------------------------------------------------------+-- | A line the same width as the shaft.+lineTail :: ArrowHT+lineTail s w = (square 1 # scaleY w # scaleX s # alignR, mempty)  noTail :: ArrowHT noTail _ _ = (mempty, mempty)@@ -320,12 +292,6 @@ dart' :: ArrowHT dart' = headToTail dart --- | <<diagrams/src_Diagrams_TwoD_Arrowheads_missile'Ex.svg#diagram=missile'Ex&width=100>>----   > missile'Ex = drawTail missile'-missile' :: ArrowHT-missile' = headToTail missile- -- | <<diagrams/src_Diagrams_TwoD_Arrowheads_quillEx.svg#diagram=quillEx&width=100>>  --   > quillEx = drawTail quill@@ -336,4 +302,4 @@  --   > blockEx = drawTail block block :: ArrowHT-block = arrowtailBlock (2/5 @@ turn)+block = arrowtailBlock (7/16 @@ turn)
+ src/Diagrams/TwoD/Attributes.hs view
@@ -0,0 +1,514 @@+{-# LANGUAGE DeriveDataTypeable         #-}+{-# LANGUAGE ExistentialQuantification  #-}+{-# LANGUAGE FlexibleInstances          #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE ScopedTypeVariables        #-}+{-# LANGUAGE TemplateHaskell            #-}+{-# LANGUAGE TypeFamilies               #-}++-----------------------------------------------------------------------------+-- |+-- Module      :  Diagrams.TwoD.Attributes+-- Copyright   :  (c) 2013 diagrams-lib team (see LICENSE)+-- License     :  BSD-style (see LICENSE)+-- Maintainer  :  diagrams-discuss@googlegroups.com+--+-- Diagrams may have /attributes/ which affect the way they are+-- rendered. This module defines /Textures/ (Gradients and Colors) in two+-- dimensions. Like the attriubtes defined in the Diagrams.Attributes module,+-- all attributes defined here use the 'Last' or 'Recommend' /semigroup/ structure.+-- 'FillColor' and 'LineColor' attributes are provided so that backends that+-- don't support gradients need not be concerned with using textures. Backends+-- should only implement color attributes or textures attributes, not both.+--+-----------------------------------------------------------------------------++module Diagrams.TwoD.Attributes (+    -- ** Width+    LineWidth, getLineWidth, lineWidth, lineWidthA+  , lw, lwN, lwO, lwL, lwG+  , ultraThin, veryThin, thin, medium, thick, veryThick, ultraThick, none+  , tiny, verySmall, small, normal, large, veryLarge, huge++    -- ** Dashing+  , Dashing(..), DashingA, getDashing+  , dashing, dashingN, dashingO, dashingL, dashingG++  -- * Textures+  , Texture(..), solid, _SC, _LG, _RG, defaultLG, defaultRG+  , GradientStop(..), stopColor, stopFraction, mkStops+  , SpreadMethod(..), lineLGradient, lineRGradient++  -- ** Linear Gradients+  , LGradient(..), lGradStops, lGradTrans, lGradStart, lGradEnd+  , lGradSpreadMethod, mkLinearGradient++  -- ** Radial Gradients+  , RGradient(..), rGradStops, rGradTrans+  , rGradCenter0, rGradRadius0, rGradCenter1, rGradRadius1+  , rGradSpreadMethod, mkRadialGradient++  -- ** Line texture+  ,  LineTexture(..), getLineTexture, lineTexture, lineTextureA+  ,  mkLineTexture, styleLineTexture++  -- ** Line color+  , lineColor, lc, lcA++  -- ** Fill texture+  , FillTexture(..), getFillTexture, fillTexture+  , mkFillTexture, styleFillTexture++  -- ** Fill color+  , fillColor, fc, fcA, recommendFillColor++  -- * Compilation utilities+  , splitTextureFills++  ) where++import           Diagrams.Core+import           Diagrams.Core.Style         (setAttr)+import           Diagrams.Attributes+import           Diagrams.Attributes.Compile+import           Diagrams.TwoD.Types++import           Diagrams.Core.Types         (RTree)+import           Diagrams.Located            (unLoc)+import           Diagrams.Path               (Path, pathTrails)+import           Diagrams.Trail              (isLoop)++import           Control.Lens ( makeLensesWith, generateSignatures, lensRules+                              , makePrisms, Lens', (&), (%~), (.~), Setter', sets)++import           Data.Colour hiding (AffineSpace)+import           Data.Data+import           Data.Default.Class+import           Data.Maybe                  (fromMaybe)++import           Data.Monoid.Recommend+import           Data.Semigroup++-- | Standard 'Measures'.+none, ultraThin, veryThin, thin, medium, thick, veryThick, ultraThick,+  tiny, verySmall, small, normal, large, veryLarge, huge :: Measure R2+none       = Output 0+ultraThin  = Normalized 0.0005 `atLeast` Output 0.5+veryThin   = Normalized 0.001  `atLeast` Output 0.5+thin       = Normalized 0.002  `atLeast` Output 0.5+medium     = Normalized 0.004  `atLeast` Output 0.5+thick      = Normalized 0.0075 `atLeast` Output 0.5+veryThick  = Normalized 0.01   `atLeast` Output 0.5+ultraThick = Normalized 0.02   `atLeast` Output 0.5++tiny      = Normalized 0.01+verySmall = Normalized 0.015+small     = Normalized 0.023+normal    = Normalized 0.035+large     = Normalized 0.05+veryLarge = Normalized 0.07+huge      = Normalized 0.10++-----------------------------------------------------------------+--  Line Width  -------------------------------------------------+-----------------------------------------------------------------++-- | Line widths specified on child nodes always override line widths+--   specified at parent nodes.+newtype LineWidth = LineWidth (Last (Measure R2))+  deriving (Typeable, Data, Semigroup)+instance AttributeClass LineWidth++type instance V LineWidth = R2++instance Transformable LineWidth where+  transform t (LineWidth (Last w)) =+    LineWidth (Last (transform t w))++instance Default LineWidth where+    def = LineWidth (Last medium)++getLineWidth :: LineWidth -> Measure R2+getLineWidth (LineWidth (Last w)) = w++-- | Set the line (stroke) width.+lineWidth :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a+lineWidth = applyGTAttr . LineWidth . Last++-- | Apply a 'LineWidth' attribute.+lineWidthA ::  (HasStyle a, V a ~ R2) => LineWidth -> a -> a+lineWidthA = applyGTAttr++-- | Default for 'lineWidth'.+lw :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a+lw = lineWidth++-- | A convenient synonym for 'lineWidth (Global w)'.+lwG :: (HasStyle a, V a ~ R2) => Double -> a -> a+lwG w = lineWidth (Global w)++-- | A convenient synonym for 'lineWidth (Normalized w)'.+lwN :: (HasStyle a, V a ~ R2) => Double -> a -> a+lwN w = lineWidth (Normalized w)++-- | A convenient synonym for 'lineWidth (Output w)'.+lwO :: (HasStyle a, V a ~ R2) => Double -> a -> a+lwO w = lineWidth (Output w)++-- | A convenient sysnonym for 'lineWidth (Local w)'.+lwL :: (HasStyle a, V a ~ R2) => Double -> a -> a+lwL w = lineWidth (Local w)++-----------------------------------------------------------------+--  Dashing  ----------------------------------------------------+-----------------------------------------------------------------++-- | Create lines that are dashing... er, dashed.+data Dashing = Dashing [Measure R2] (Measure R2)+  deriving (Typeable, Data, Eq)++newtype DashingA = DashingA (Last Dashing)+  deriving (Typeable, Data, Semigroup, Eq)+instance AttributeClass DashingA++type instance V DashingA = R2++instance Transformable DashingA where+  transform t (DashingA (Last (Dashing w v))) =+    DashingA (Last (Dashing r s))+    where+      r = map (transform t) w+      s = transform t v++getDashing :: DashingA -> Dashing+getDashing (DashingA (Last d)) = d++-- | Set the line dashing style.+dashing :: (HasStyle a, V a ~ R2) =>+           [Measure R2]  -- ^ A list specifying alternate lengths of on+                         --   and off portions of the stroke.  The empty+                         --   list indicates no dashing.+        -> Measure R2    -- ^ An offset into the dash pattern at which the+                         --   stroke should start.+        -> a -> a+dashing ds offs = applyGTAttr (DashingA (Last (Dashing ds offs)))++-- | A convenient synonym for 'dashing (Global w)'.+dashingG :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a+dashingG w v = dashing (map Global w) (Global v)++-- | A convenient synonym for 'dashing (Normalized w)'.+dashingN :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a+dashingN w v = dashing (map Normalized w) (Normalized v)++-- | A convenient synonym for 'dashing (Output w)'.+dashingO :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a+dashingO w v = dashing (map Output w) (Output v)++-- | A convenient sysnonym for 'dashing (Local w)'.+dashingL :: (HasStyle a, V a ~ R2) => [Double] -> Double -> a -> a+dashingL w v = dashing (map Local w) (Local v)++-- | A gradient stop contains a color and fraction (usually between 0 and 1)+data GradientStop = GradientStop+     { _stopColor    :: SomeColor+     , _stopFraction :: Double}++makeLensesWith (lensRules & generateSignatures .~ False) ''GradientStop++-- | A color for the stop.+stopColor :: Lens' GradientStop SomeColor++-- | The fraction for stop.+stopFraction :: Lens' GradientStop Double++-- | The 'SpreadMethod' determines what happens before 'lGradStart' and after+--   'lGradEnd'. 'GradPad' fills the space before the start of the gradient+--   with the color of the first stop and the color after end of the gradient+--   with the color of the last stop. 'GradRepeat' restarts the gradient and+--   'GradReflect' restarts the gradient with the stops in reverse order.+data SpreadMethod = GradPad | GradReflect | GradRepeat++-- | Linear Gradient+data LGradient = LGradient+    { _lGradStops        :: [GradientStop]+    , _lGradStart        :: P2+    , _lGradEnd          :: P2+    , _lGradTrans        :: T2+    , _lGradSpreadMethod :: SpreadMethod }++makeLensesWith (lensRules & generateSignatures .~ False) ''LGradient++-- | A list of stops (colors and fractions).+lGradStops :: Lens' LGradient [GradientStop]++-- | A transformation to be applied to the gradient. Usually this field will+--   start as the identity transform and capture the transforms that are applied+--   to the gradient.+lGradTrans :: Lens' LGradient T2++-- | The starting point for the first gradient stop. The coordinates are in+--   'Local' units and the default is (-0.5, 0).+lGradStart :: Lens' LGradient P2++-- | The ending point for the last gradient stop.The coordinates are in+--   'Local' units and the default is (0.5, 0).+lGradEnd :: Lens' LGradient P2++-- | For setting the spread method.+lGradSpreadMethod :: Lens' LGradient SpreadMethod++-- | Radial Gradient+data RGradient = RGradient+    { _rGradStops        :: [GradientStop]+    , _rGradCenter0      :: P2+    , _rGradRadius0      :: Double+    , _rGradCenter1      :: P2+    , _rGradRadius1      :: Double+    , _rGradTrans        :: T2+    , _rGradSpreadMethod :: SpreadMethod }++makeLensesWith (lensRules & generateSignatures .~ False) ''RGradient++-- | A list of stops (colors and fractions).+rGradStops :: Lens' RGradient [GradientStop]++-- | The center point of the inner circle.+rGradCenter0 :: Lens' RGradient P2++-- | The radius of the inner cirlce in 'Local' coordinates.+rGradRadius0 :: Lens' RGradient Double++-- | The center of the outer circle.+rGradCenter1  :: Lens' RGradient P2++-- | The radius of the outer circle in 'Local' coordinates.+rGradRadius1 :: Lens' RGradient Double++-- | A transformation to be applied to the gradient. Usually this field will+--   start as the identity transform and capture the transforms that are applied+--   to the gradient.+rGradTrans :: Lens' RGradient T2++-- | For setting the spread method.+rGradSpreadMethod :: Lens' RGradient SpreadMethod++-- | A Texture is either a color 'SC', linear gradient 'LG', or radial gradient 'RG'.+--   An object can have only one texture which is determined by the 'Last'+--   semigroup structure.+data Texture = SC SomeColor | LG LGradient | RG RGradient+  deriving (Typeable)++makePrisms ''Texture++-- | Convert a solid colour into a texture.+solid :: Color a => a -> Texture+solid = SC . SomeColor++-- | A default is provided so that linear gradients can easily be created using+--   lenses. For example, @lg = defaultLG & lGradStart .~ (0.25 ^& 0.33)@. Note that+--   no default value is provided for @lGradStops@, this must be set before+--   the gradient value is used, otherwise the object will appear transparent.+defaultLG :: Texture+defaultLG = LG (LGradient+    { _lGradStops        = []+    , _lGradStart        = mkP2 (-0.5) 0+    , _lGradEnd          = mkP2 (0.5)  0+    , _lGradTrans        = mempty+    , _lGradSpreadMethod = GradPad+    })++-- | A default is provided so that radial gradients can easily be created using+--   lenses. For example, @rg = defaultRG & rGradRadius1 .~ 0.25@. Note that+--   no default value is provided for @rGradStops@, this must be set before+--   the gradient value is used, otherwise the object will appear transparent.+defaultRG :: Texture+defaultRG = RG (RGradient+    { _rGradStops        = []+    , _rGradCenter0      = mkP2 0 0+    , _rGradRadius0      = 0.0+    , _rGradCenter1      = mkP2 0 0+    , _rGradRadius1      = 0.5+    , _rGradTrans        = mempty+    , _rGradSpreadMethod = GradPad+    })++-- | A convenient function for making gradient stops from a list of triples.+--   (An opaque color, a stop fraction, an opacity).+mkStops :: [(Colour Double, Double, Double)] -> [GradientStop]+mkStops = map (\(x, y, z) -> GradientStop (SomeColor (withOpacity x z)) y)++-- | Make a linear gradient texture from a stop list, start point, end point,+--   and 'SpreadMethod'. The 'lGradTrans' field is set to the identity+--   transfrom, to change it use the 'lGradTrans' lens.+mkLinearGradient :: [GradientStop]  -> P2 -> P2 -> SpreadMethod -> Texture+mkLinearGradient stops  start end spreadMethod+  = LG (LGradient stops start end mempty spreadMethod)++-- | Make a radial gradient texture from a stop list, radius, start point,+--   end point, and 'SpreadMethod'. The 'rGradTrans' field is set to the identity+--   transfrom, to change it use the 'rGradTrans' lens.+mkRadialGradient :: [GradientStop] -> P2 -> Double+                  -> P2 -> Double -> SpreadMethod -> Texture+mkRadialGradient stops c0 r0 c1 r1 spreadMethod+  = RG (RGradient stops c0 r0 c1 r1 mempty spreadMethod)++-- | The texture with which lines are drawn.  Note that child+--   textures always override parent textures.+--   More precisely, the semigroup structure on line texture attributes+--   is that of 'Last'.+newtype LineTexture = LineTexture (Last Texture)+  deriving (Typeable, Semigroup)+instance AttributeClass LineTexture++type instance V LineTexture = R2++-- Only gradients get transformed. The transform is applied to the gradients+-- transform field. Colors are left unchanged.+instance Transformable LineTexture where+  transform t (LineTexture (Last texture)) = LineTexture (Last tx)+    where+      tx = texture & lgt . rgt+      lgt = _LG . lGradTrans %~ f+      rgt = _RG . rGradTrans %~ f+      f = transform t++instance Default LineTexture where+    def = LineTexture (Last (SC (SomeColor (black :: Colour Double))))++getLineTexture :: LineTexture -> Texture+getLineTexture (LineTexture (Last t)) = t++lineTexture :: (HasStyle a, V a ~ R2) => Texture-> a -> a+lineTexture = applyTAttr . LineTexture . Last++lineTextureA :: (HasStyle a, V a ~ R2) => LineTexture -> a -> a+lineTextureA = applyTAttr++mkLineTexture :: Texture  -> LineTexture+mkLineTexture = LineTexture . Last++styleLineTexture :: Setter' (Style v) Texture+styleLineTexture = sets modifyLineTexture+  where+    modifyLineTexture f s+      = flip setAttr s+      . mkLineTexture+      . f+      . getLineTexture+      . fromMaybe def . getAttr+      $ s++-- | Set the line (stroke) color.  This function is polymorphic in the+--   color type (so it can be used with either 'Colour' or+--   'AlphaColour'), but this can sometimes create problems for type+--   inference, so the 'lc' and 'lcA' variants are provided with more+--   concrete types.+lineColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a+lineColor = lineTexture . SC . SomeColor++-- | A synonym for 'lineColor', specialized to @'Colour' Double@+--   (i.e. opaque colors).  See comment in 'lineColor' about backends.+lc :: (HasStyle a, V a ~ R2) => Colour Double -> a -> a+lc = lineColor++-- | A synonym for 'lineColor', specialized to @'AlphaColour' Double@+--   (i.e. colors with transparency).  See comment in 'lineColor'+--   about backends.+lcA :: (HasStyle a, V a ~ R2) => AlphaColour Double -> a -> a+lcA = lineColor++-- | Apply a linear gradient.+lineLGradient :: (HasStyle a, V a ~ R2) => LGradient -> a -> a+lineLGradient g = lineTexture (LG g)++-- | Apply a radial gradient.+lineRGradient :: (HasStyle a, V a ~ R2) => RGradient -> a -> a+lineRGradient g = lineTexture (RG g)++-- | The texture with which objects are filled.+--   The semigroup structure on fill texture attributes+--   is that of 'Recommed . Last'.+newtype FillTexture = FillTexture (Recommend (Last Texture))+  deriving (Typeable, Semigroup)++instance AttributeClass FillTexture++type instance V FillTexture = R2++-- Only gradients get transformed. The transform is applied to the gradients+-- transform field. Colors are left unchanged.+instance Transformable FillTexture where+  transform _ tx@(FillTexture (Recommend _)) = tx+  transform t (FillTexture (Commit (Last texture))) = FillTexture (Commit (Last tx))+    where+      tx = texture & lgt . rgt+      lgt = _LG . lGradTrans %~ f+      rgt = _RG . rGradTrans %~ f+      f = transform t++instance Default FillTexture where+    def = FillTexture (Recommend (Last (SC+                      (SomeColor (transparent :: AlphaColour Double)))))++getFillTexture :: FillTexture -> Texture+getFillTexture (FillTexture tx) = getLast . getRecommend $ tx++fillTexture :: (HasStyle a, V a ~ R2) => Texture -> a -> a+fillTexture = applyTAttr . FillTexture . Commit . Last++mkFillTexture :: Texture  -> FillTexture+mkFillTexture = FillTexture . Commit . Last++styleFillTexture :: Setter' (Style v) Texture+styleFillTexture = sets modifyFillTexture+  where+    modifyFillTexture f s+      = flip setAttr s+      . mkFillTexture+      . f+      . getFillTexture+      . fromMaybe def . getAttr+      $ s++-- | Set the fill color.  This function is polymorphic in the color+--   type (so it can be used with either 'Colour' or 'AlphaColour'),+--   but this can sometimes create problems for type inference, so the+--   'fc' and 'fcA' variants are provided with more concrete types.+fillColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a+fillColor = fillTexture . SC . SomeColor++-- | Set a \"recommended\" fill color, to be used only if no explicit+--   calls to 'fillColor' (or 'fc', or 'fcA') are used.+--   See comment after 'fillColor' about backends.+recommendFillColor :: (Color c, HasStyle a, V a ~ R2) => c -> a -> a+recommendFillColor =+  applyTAttr . FillTexture . Recommend . Last . SC . SomeColor++-- | A synonym for 'fillColor', specialized to @'Colour' Double@+--   (i.e. opaque colors). See comment after 'fillColor' about backends.+fc :: (HasStyle a, V a ~ R2) => Colour Double -> a -> a+fc = fillColor++-- | A synonym for 'fillColor', specialized to @'AlphaColour' Double@+--   (i.e. colors with transparency). See comment after 'fillColor' about backends.+fcA :: (HasStyle a, V a ~ R2) => AlphaColour Double -> a -> a+fcA = fillColor+------------------------------------------------------------++data FillTextureLoops v = FillTextureLoops++instance Typeable v => SplitAttribute (FillTextureLoops v) where+  type AttrType (FillTextureLoops v) = FillTexture+  type PrimType (FillTextureLoops v) = Path v++  primOK _ = all (isLoop . unLoc) . pathTrails++-- | Push fill attributes down until they are at the root of subtrees+--   containing only loops. This makes life much easier for backends,+--   which typically have a semantics where fill attributes are+--   applied to lines/non-closed paths as well as loops/closed paths,+--   whereas in the semantics of diagrams, fill attributes only apply+--   to loops.+splitTextureFills :: forall b v a. Typeable v => RTree b v a -> RTree b v a+splitTextureFills = splitAttr (FillTextureLoops :: FillTextureLoops v)
src/Diagrams/TwoD/Combinators.hs view
@@ -45,7 +45,7 @@  import           Diagrams.Core -import           Diagrams.Attributes     (fc, lw)+import           Diagrams.Angle import           Diagrams.BoundingBox import           Diagrams.Combinators import           Diagrams.Coordinates@@ -53,12 +53,13 @@ import           Diagrams.Segment import           Diagrams.TrailLike import           Diagrams.TwoD.Align-import           Diagrams.TwoD.Path      ()+import           Diagrams.TwoD.Attributes (lineWidth, fc)+import           Diagrams.TwoD.Path       () import           Diagrams.TwoD.Shapes-import           Diagrams.TwoD.Transform (scaleX, scaleY)+import           Diagrams.TwoD.Transform  (scaleX, scaleY) import           Diagrams.TwoD.Types-import           Diagrams.TwoD.Vector    (fromDirection, unitX, unitY)-import           Diagrams.Util           (( # ))+import           Diagrams.TwoD.Vector     (fromDirection, unitX, unitY)+import           Diagrams.Util            (( # ))   infixl 6 ===@@ -247,4 +248,4 @@ -- | \"Set the background color\" of a diagram.  That is, place a --   diagram atop a bounding rectangle of the given color. bg :: (Renderable (Path R2) b) => Colour Double -> Diagram b R2 -> Diagram b R2-bg c d = d <> boundingRect d # lw 0 # fc c+bg c d = d <> boundingRect d # lineWidth (Output 0) # fc c
src/Diagrams/TwoD/Curvature.hs view
@@ -70,7 +70,7 @@ -- > -- > segmentA = Cubic (12 ^& 0) (8 ^& 10) (OffsetClosed (20 ^& 8)) -- >--- > curveA = lw 0.1 . stroke . fromSegments $ [segmentA]+-- > curveA = lw thick . stroke . fromSegments $ [segmentA] -- > -- > diagramA = pad 1.1 . centerXY $ curveA -- >@@ -84,11 +84,11 @@ -- >          $ curveA -- >         <> showCurvature segmentA t -- >          # withEnvelope (curveA :: D R2)--- >          # lw 0.05 # lc red+-- >          # lc red -- > -- > showCurvature bez@(Cubic b c (OffsetClosed d)) t--- >   | v == 0    = mempty--- >   | otherwise = go (radiusOfCurvature bez t)+-- >   | v == (0,0) = mempty+-- >   | otherwise  = go (radiusOfCurvature bez t) -- >   where -- >     v@(x,y) = unr2 $ firstDerivative b c d t -- >     vp = (-y) ^& x
src/Diagrams/TwoD/Ellipse.hs view
@@ -26,6 +26,7 @@  import           Diagrams.Core +import           Diagrams.Angle import           Diagrams.Located        (at) import           Diagrams.TrailLike import           Diagrams.TwoD.Arc
src/Diagrams/TwoD/Image.hs view
@@ -1,7 +1,8 @@ {-# LANGUAGE DeriveDataTypeable    #-}+{-# LANGUAGE EmptyDataDecls        #-} {-# LANGUAGE FlexibleContexts      #-}+{-# LANGUAGE GADTs                 #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TemplateHaskell       #-} {-# LANGUAGE TypeFamilies          #-} ----------------------------------------------------------------------------- -- |@@ -11,78 +12,125 @@ -- Maintainer  :  diagrams-discuss@googlegroups.com -- -- Importing external images into diagrams.---+-- Usage: To create a diagram from an embedded image with width 1 and height+--   set according to the aspect ratio: 'image img # scaleUToX 1`+--   where 'img' is a 'DImage Embedded' -----------------------------------------------------------------------------  module Diagrams.TwoD.Image     (-      Image(..), imgFile, imgSize, imgTransf+      DImage(..), ImageData(..)+    , Embedded, External     , image+    , loadImageEmb+    , loadImageExt+    , uncheckedImageRef+    , raster+    , rasterDia     ) where -import           Control.Lens         (makeLenses)-import           Data.Typeable +import           Codec.Picture+import           Codec.Picture.Types  (dynamicMap)++import           Data.Typeable        (Typeable)+import           Data.Colour          (AlphaColour)+ import           Diagrams.Core -import           Diagrams.Path-import           Diagrams.TwoD.Path-import           Diagrams.TwoD.Shapes-import           Diagrams.TwoD.Size   (SizeSpec2D (..))-import           Diagrams.TwoD.Types+import           Diagrams.Attributes  (colorToSRGBA)+import           Diagrams.Path        (Path)+import           Diagrams.TwoD.Path   (isInsideEvenOdd)+import           Diagrams.TwoD.Shapes (rect)+import           Diagrams.TwoD.Types  (R2, T2)  import           Data.AffineSpace     ((.-.))- import           Data.Semigroup --- | An external image primitive, representing an image the backend---   should import from another file when rendering.-data Image = Image { _imgFile   :: FilePath-                   , _imgSize   :: SizeSpec2D-                   , _imgTransf :: T2-                   }-  deriving Typeable+data Embedded deriving Typeable+data External deriving Typeable -makeLenses ''Image+-- | 'ImageData' is either a JuicyPixels @DynamicImage@ tagged as 'Embedded' or+--   a reference tagged as 'External'.+data ImageData :: * -> * where+  ImageRaster :: DynamicImage -> ImageData Embedded+  ImageRef :: FilePath -> ImageData External -type instance V Image = R2+-------------------------------------------------------------------------------+-- | An image primitive, the two ints are width followed by height.+--   Will typically be created by @loadImageEmb@ or @loadImageExt@ which,+--   will handle setting the width and heigh to the actual width and height+--   of the image.+data DImage :: * -> * where+  DImage :: ImageData t -> Int -> Int -> T2 -> DImage t+  deriving Typeable -instance Transformable Image where-  transform t1 (Image file sz t2) = Image file sz (t1 <> t2)+type instance V (DImage a) = R2 -instance IsPrim Image+instance Transformable (DImage a) where+  transform t1 (DImage iD w h t2) = DImage iD w h (t1 <> t2) -instance HasOrigin Image where+instance HasOrigin (DImage a) where   moveOriginTo p = translate (origin .-. p) -instance Renderable Image NullBackend where-  render _ _ = mempty+-- | Make a 'DImage' into a 'Diagram'.+image :: (Typeable a, Renderable (DImage a) b) => DImage a -> Diagram b R2+image img = mkQD (Prim (img)) (getEnvelope r) (getTrace r) mempty+                  (Query $ \p -> Any (isInsideEvenOdd p r))+  where+    r :: Path R2+    r = rect (fromIntegral w) (fromIntegral h)+    DImage _ w h _ = img --- See Note [Image size specification]+-- | Use JuicyPixels to read an image in any format and wrap it in a 'DImage'.+--   The width and height of the image are set to their actual values.+loadImageEmb :: FilePath -> IO (Either String (DImage Embedded))+loadImageEmb path = do+    dImg <- readImage path+    return $ case dImg of+      Left msg  -> Left msg+      Right img -> Right (DImage (ImageRaster img) w h mempty)+        where+          w = dynamicMap imageWidth img+          h = dynamicMap imageHeight img --- | Take an external image from the specified file and turn it into a---   diagram with the specified width and height, centered at the---   origin.  Note that the image's aspect ratio will be preserved; if---   the specified width and height have a different ratio than the---   image's aspect ratio, there will be extra space in one dimension.-image :: (Renderable Image b) => FilePath -> Double -> Double -> Diagram b R2-image file w h = mkQD (Prim (Image file (Dims w h) mempty))-                      (getEnvelope r)-                      (getTrace r)-                      mempty-                      (Query $ \p -> Any (isInsideEvenOdd p r))-  where r :: Path R2-        r = rect w h+-- | Check that a file exists, and use JuicyPixels to figure out+--   the right size, but save a reference to the image instead+--   of the raster data+loadImageExt :: FilePath -> IO (Either String (DImage External))+loadImageExt path = do+  dImg <- readImage path+  return $ case dImg of+    Left msg  -> Left msg+    Right img -> Right $ DImage (ImageRef path) w h mempty+      where+        w = dynamicMap imageWidth img+        h = dynamicMap imageHeight img -{- ~~~~ Note [Image size specification]+-- | Make an "unchecked" image reference; have to specify a+--   width and height. Unless the aspect ratio of the external+--   image is the w :: h, then the image will be distorted.+uncheckedImageRef :: FilePath -> Int -> Int -> DImage External+uncheckedImageRef path w h = DImage (ImageRef path) w h mempty -It's tempting to make 'image' take a SizeSpec2D instead of two-Doubles.  For example, if I know I want the image to be x units wide-but I don't know the original aspect ratio of the image, I'd like to-be able to just say "make it x units wide".  The problem is that-diagrams would then not know how tall the image is until rendering-time (at least, not without unsafePerformIO yuckiness).  A more-general solution will have to wait until we can specify constraints-and solve them later.+-- | Crate a diagram from raw raster data.+rasterDia :: Renderable (DImage Embedded) b+          => (Int -> Int -> AlphaColour Double) -> Int -> Int -> Diagram b R2+rasterDia f w h = image $ raster f w h --}+-- | Create an image "from scratch" by specifying the pixel data+raster :: (Int -> Int -> AlphaColour Double) -> Int -> Int -> DImage Embedded+raster f w h = DImage (ImageRaster (ImageRGBA8 img)) w h mempty+  where+    img = generateImage g w h+    g x y = fromAlphaColour $ f x y++fromAlphaColour :: AlphaColour Double -> PixelRGBA8+fromAlphaColour c = PixelRGBA8 r g b a+  where+    (r, g, b, a) = (int r', int g', int b', int a')+    (r', g', b', a') = colorToSRGBA c+    int x = round (255 * x)++instance Renderable (DImage a) NullBackend where+  render _ _ = mempty
src/Diagrams/TwoD/Model.hs view
@@ -23,7 +23,7 @@ import           Control.Lens          (makeLenses, (^.))  import           Diagrams.Core-import           Diagrams.Attributes+import           Diagrams.TwoD.Attributes import           Diagrams.Path import           Diagrams.TwoD.Ellipse import           Diagrams.TwoD.Path@@ -69,7 +69,7 @@ showOrigin' oo d = o <> d   where o     = stroke (circle sz)                 # fc (oo^.oColor)-                # lw 0+                # lineWidth (Output 0)                 # fmap (const mempty)         (w,h) = size2D d ^* oo^.oScale         sz = maximum [w, h, oo^.oMinSize]
src/Diagrams/TwoD/Offset.hs view
@@ -208,7 +208,7 @@ -- > import Diagrams.TwoD.Offset -- > -- > showExample :: Segment Closed R2 -> Diagram SVG R2--- > showExample s = pad 1.1 . centerXY $ d # lc blue # lw 0.1 <> d' # lw 0.1+-- > showExample s = pad 1.1 . centerXY $ d # lc blue # lw thick <> d' # lw thick -- >   where -- >       d  = stroke . fromSegments $ [s] -- >       d' = mconcat . zipWith lc colors . map stroke . explodeTrail@@ -298,7 +298,7 @@ -- > corner = fromVertices (map p2 [(0, 0), (10, 0), (5, 6)]) `at` origin -- > -- > offsetTrailExample :: Diagram SVG R2--- > offsetTrailExample = pad 1.1 . centerXY . lw 0.2 . hcat' (def & sep .~ 1 )+-- > offsetTrailExample = pad 1.1 . centerXY . lwO 3 . hcat' (def & sep .~ 1 ) -- >                    . map (uncurry showStyle) -- >                    $ [ (LineJoinMiter, "LineJoinMiter") -- >                      , (LineJoinRound, "LineJoinRound")@@ -310,7 +310,7 @@ -- >            === (strutY 3 <> text s # font "Helvetica" # bold) -- > -- > offsetTrailLeftExample :: Diagram SVG R2--- > offsetTrailLeftExample = pad 1.1 . centerXY . lw 0.2+-- > offsetTrailLeftExample = pad 1.1 . centerXY . lwO 3 -- >                        $ (trailLike c # lc blue) -- >                        <> (lc green . trailLike -- >                         . offsetTrail' (def & offsetJoin .~ LineJoinRound) (-2) $ c)@@ -318,7 +318,7 @@ -- >     c = reflectY corner -- > -- > offsetTrailOuterExample :: Diagram SVG R2--- > offsetTrailOuterExample = pad 1.1 . centerXY . lw 0.2+-- > offsetTrailOuterExample = pad 1.1 . centerXY . lwO 3 -- >                         $ (trailLike c # lc blue) -- >                         <> (lc green . trailLike -- >                          . offsetTrail' (def & offsetJoin .~ LineJoinRound) 2 $ c)@@ -401,17 +401,17 @@ -- >                      , (LineCapSquare, "LineCapSquare") -- >                      ] -- >  where--- >    showStyle c s = centerXY (trailLike corner # lc white # lw 0.2+-- >    showStyle c s = centerXY (trailLike corner # lc white # lw veryThick -- >                               <> stroke (expandTrail' -- >                                              (def & expandJoin .~ LineJoinRound -- >                                                   & expandCap .~ c -- >                                                   ) 2 corner)--- >                                      # lw 0 # fc green)+-- >                                      # lw none # fc green) -- >               === (strutY 3 <> text s # font "Helvetica" # bold) -- > -- > expandLoopExample :: Diagram SVG R2--- > expandLoopExample = pad 1.1 . centerXY $ ((strokeLocT t # lw 0.2 # lc white)--- >                                        <> (stroke t' # lw 0 # fc green))+-- > expandLoopExample = pad 1.1 . centerXY $ ((strokeLocT t # lw veryThick # lc white)+-- >                                        <> (stroke t' # lw none # fc green)) -- >   where -- >     t  = mapLoc glueTrail $ fromVertices (map p2 [(0, 0), (5, 0), (10, 5), (10, 10), (0, 0)]) -- >     t' = expandTrail' (def & expandJoin .~ LineJoinRound) 1 t
src/Diagrams/TwoD/Path.hs view
@@ -45,9 +45,9 @@        ) where  import           Control.Applicative   (liftA2)-import           Control.Lens          ( makeWrapped, makeLensesWith, (.~), (^.)-                                       , generateSignatures, lensRules, op-                                       , Lens, Lens', _Wrapped')+import           Control.Lens          (Lens, Lens', generateSignatures,+                                        lensRules, makeLensesWith, makeWrapped,+                                        op, (.~), (^.), _Wrapped') import qualified Data.Foldable         as F import           Data.Semigroup import           Data.Typeable
src/Diagrams/TwoD/Polygons.hs view
@@ -60,6 +60,7 @@ import           Data.Default.Class import           Data.VectorSpace +import           Diagrams.Angle import           Diagrams.Core import           Diagrams.Located import           Diagrams.Path
src/Diagrams/TwoD/Shapes.hs view
@@ -47,6 +47,7 @@  import           Diagrams.Core +import           Diagrams.Angle import           Diagrams.Located        (at) import           Diagrams.Path import           Diagrams.Segment@@ -99,7 +100,7 @@ square d = rect d d  -- > squareEx = hcat' (with & sep .~ 0.5) [square 1, square 2, square 3]--- >          # centerXY # pad 1.1 # lw 0.03+-- >          # centerXY # pad 1.1  -- | @rect w h@ is an axis-aligned rectangle of width @w@ and height --   @h@, centered at the origin.
src/Diagrams/TwoD/Size.hs view
@@ -27,7 +27,7 @@        , requiredScaleT, requiredScale           -- ** Changing the size of things-       , sized, sizedAs+       , sized, sizedAs, sizePair        ) where  import           Diagrams.Core@@ -148,3 +148,10 @@            , Enveloped b, V b ~ R2)         => b -> a -> a sizedAs other = sized (sizeSpec2D other)++-- | Make width and height of `SizeSpec2D` into a tuple.+sizePair :: SizeSpec2D -> (Double, Double)+sizePair (Width w')   = (w',w')+sizePair (Height h')  = (h',h')+sizePair (Dims w' h') = (w',h')+sizePair Absolute     = (100,100)
src/Diagrams/TwoD/Text.hs view
@@ -23,45 +23,47 @@   -- ** Font family   , Font(..), getFont, font   -- ** Font size-  , FontSize(..), getFontSize, fontSize, fontSizeA+  , FontSize(..), getFontSize, getFontSizeIsLocal, fontSizeA, fontSize+  , fontSizeN, fontSizeO, fontSizeL, fontSizeG   -- ** Font slant   , FontSlant(..), FontSlantA, getFontSlant, fontSlant, italic, oblique   -- ** Font weight   , FontWeight(..), FontWeightA, getFontWeight, fontWeight, bold   ) where -import           Diagrams.Attributes import           Diagrams.Core-import           Diagrams.Core.Envelope (pointEnvelope)+import           Diagrams.Core.Envelope   (pointEnvelope)+import           Diagrams.TwoD.Attributes (recommendFillColor) import           Diagrams.TwoD.Types -import           Data.AffineSpace       ((.-.))--import           Data.Semigroup-+import           Data.AffineSpace         ((.-.)) import           Data.Colour-+import           Data.Data import           Data.Default.Class--import           Data.Typeable+import           Data.Semigroup  ------------------------------------------------------------ -- Text diagrams ------------------------------------------------------------  -- | A text primitive consists of the string contents and alignment---   specification, along with a transformation mapping from the local---   vector space of the text to the vector space in which it is---   embedded.-data Text = Text T2 TextAlignment String+--   specification, along with two transformations: the first+--   accumulates all transformations which have been applied to the+--   text; the second accumulates normalized, "anti-scaled" versions+--   of the transformations which have had their average scaling+--   component removed.+data Text = Text T2 T2 TextAlignment String   deriving Typeable  type instance V Text = R2  instance Transformable Text where-  transform t (Text tt a s) = Text (t <> tt) a s--instance IsPrim Text+  transform t (Text tt tn a s) = Text (t <> tt) (t <> tn <> t') a s+    where+      t' = scaling (1 / avgScale t)+      -- It's important that the anti-scaling is applied *first*,+      -- followed by the old transformation tn and then the new+      -- transformation t.  That way translation is handled properly.  instance HasOrigin Text where   moveOriginTo p = translate (origin .-. p)@@ -76,7 +78,7 @@ mkText a t = recommendFillColor (black :: Colour Double)              -- See Note [recommendFillColor] -           $ mkQD (Prim (Text mempty a t))+           $ mkQD (Prim (Text mempty mempty a t))                        (pointEnvelope origin)                        mempty                        mempty@@ -166,28 +168,64 @@ -- Font size  -- | The @FontSize@ attribute specifies the size of a font's---   em-square, measured with respect to the current local vector space.---   Inner @FontSize@ attributes override outer ones.-newtype FontSize = FontSize (Last Double)-  deriving (Typeable, Semigroup, Eq)+--   em-square.  Inner @FontSize@ attributes override outer ones.+newtype FontSize = FontSize (Last (Measure R2, Bool))+  deriving (Typeable, Data, Semigroup) instance AttributeClass FontSize +-- Note, the Bool stored in the FontSize indicates whether it started+-- life as Local.  Typically, if the Bool is True, backends should use+-- the first T2 value stored in a Text object; otherwise, the second+-- (anti-scaled) T2 value should be used.++type instance V FontSize = R2+ instance Default FontSize where-    def = FontSize (Last 1)+    def = FontSize (Last (Local 1, True)) +-- FontSize has to be Transformable + also have an instance of Data,+-- so the Measure inside it will be automatically converted to Output.+-- However, we don't actually want the Transformable instance to do+-- anything.  All the scaling of text happens not by manipulating the+-- font size but by accumulating T2 values in Text objects.+instance Transformable FontSize where+  transform _ f = f+ -- | Extract the size from a @FontSize@ attribute.-getFontSize :: FontSize -> Double-getFontSize (FontSize (Last s)) = s+getFontSize :: FontSize -> Measure R2+getFontSize (FontSize (Last (s,_))) = s +-- | Determine whether a @FontSize@ attribute began its life measured+--   in 'Local' units.+getFontSizeIsLocal :: FontSize -> Bool+getFontSizeIsLocal (FontSize (Last (_,b))) = b+ -- | Set the font size, that is, the size of the font's em-square as --   measured within the current local vector space.  The default size --   is @1@.-fontSize :: HasStyle a => Double -> a -> a-fontSize = applyAttr . FontSize . Last+fontSize :: (HasStyle a, V a ~ R2) => Measure R2 -> a -> a+fontSize m@(Local {}) = applyGTAttr . FontSize . Last $ (m,True)+fontSize m            = applyGTAttr . FontSize . Last $ (m,False) +-- | A convenient synonym for 'fontSize (Global w)'.+fontSizeG :: (HasStyle a, V a ~ R2) => Double -> a -> a+fontSizeG w = fontSize (Global w)++-- | A convenient synonym for 'fontSize (Normalized w)'.+fontSizeN :: (HasStyle a, V a ~ R2) => Double -> a -> a+fontSizeN w = fontSize (Normalized w)++-- | A convenient synonym for 'fontSize (Output w)'.+fontSizeO :: (HasStyle a, V a ~ R2) => Double -> a -> a+fontSizeO w = fontSize (Output w)++-- | A convenient sysnonym for 'fontSize (Local w)'.+fontSizeL :: (HasStyle a, V a ~ R2) => Double -> a -> a+fontSizeL w = fontSize (Local w)+ -- | Apply a 'FontSize' attribute.-fontSizeA :: HasStyle a => FontSize -> a -> a-fontSizeA = applyAttr+fontSizeA :: (HasStyle a, V a ~ R2) => FontSize -> a -> a+fontSizeA = applyGTAttr  -------------------------------------------------- -- Font slant
src/Diagrams/TwoD/Transform.hs view
@@ -47,12 +47,12 @@           -- * Utilities        , onBasis-       , avgScale        ) where  import           Diagrams.Core import qualified Diagrams.Core.Transform as T +import           Diagrams.Angle import           Diagrams.Transform import           Diagrams.TwoD.Size      (height, width) import           Diagrams.TwoD.Types@@ -249,41 +249,3 @@ onBasis :: Transformation R2 -> ((R2, R2), R2) onBasis t = ((x, y), v)   where ((x:y:[]), v) = T.onBasis t---- | Compute the \"average\" amount of scaling performed by a---   transformation.  Satisfies the properties------   @---   avgScale (scaling k) == k---   avgScale (t1 <> t2)  == avgScale t1 * avgScale t2---   @------   Backends which do not support stroking in the context of an---   arbitrary transformation may instead call 'avgScale' on---   \"frozen\" transformations and multiply the line width by the---   resulting value.-avgScale :: T2 -> Double-avgScale t = sqrt (abs (x1*y2 - y1*x2))-  where ((unr2 -> (x1,y1), unr2 -> (x2,y2)), _) = onBasis t--{---avgScale is computed as the square root of the positive-determinant. Proofs for the specified properties:--1. sqrt (|det (scaling k)|) = sqrt (k^2) = k-2. sqrt (|det t1|) * sqrt (|det t2|)-   = sqrt (|det t1| * |det t2|)-   = sqrt (|det t1 * det t2|)-   = sqrt (|det (t1 * t2)|)--From wikipedia:--     A geometric interpretation can be given to the value of the-     determinant of a square matrix with real entries: the absolute-     value of the determinant gives the scale factor by which area or-     volume (or a higher dimensional analogue) is multiplied under the-     associated linear transformation, while its sign indicates whether-     the transformation preserves orientation.---}
src/Diagrams/TwoD/Transform/ScaleInv.hs view
@@ -150,24 +150,6 @@  -} --- This is how we handle freezing properly with ScaleInv wrappers.--- Normal transformations are applied ignoring scaling; "frozen"--- transformations (i.e. transformations applied after a freeze) are--- applied directly to the underlying object, scales and all.  We must--- take care to transform the reference point and direction vector--- appropriately.-instance (V t ~ R2, Transformable t) => IsPrim (ScaleInv t) where-  transformWithFreeze t1 t2 s = ScaleInv t'' d'' origin''-    where-      -- first, apply t2 normally, i.e. ignoring scaling-      s'@(ScaleInv t' _ _)      = transform t2 s--      -- now apply t1 to get the new direction and origin-      (ScaleInv _ d'' origin'') = transform t1 s'--      -- but apply t1 directly to the underlying thing, scales and all.-      t''                       = transform t1 t'- instance (Renderable t b, V t ~ R2) => Renderable (ScaleInv t) b where   render b = render b . view scaleInvObj 
src/Diagrams/TwoD/Types.hs view
@@ -25,25 +25,21 @@        , P2, p2, mkP2, unp2, p2Iso        , T2 -         -- * Angles-       , Angle-       , rad, turn, deg-       , fullTurn, fullCircle, angleRatio-       , (@@)        ) where -import           Control.Lens            (Iso', Wrapped(..), Rewrapped, iso-                                         , review , (^.), _1, _2)+import           Control.Lens           (Iso', Rewrapped, Wrapped (..), iso,+                                         lens, (^.), _1, _2) +import           Diagrams.Angle import           Diagrams.Coordinates import           Diagrams.Core  import           Data.AffineSpace.Point import           Data.Basis-import           Data.MemoTrie           (HasTrie (..))+import           Data.MemoTrie          (HasTrie (..)) import           Data.VectorSpace -import           Data.Typeable+import           Data.Data ------------------------------------------------------------ -- 2D Euclidean space @@ -77,7 +73,7 @@  data R2 = R2 {-# UNPACK #-} !Double              {-# UNPACK #-} !Double-  deriving (Eq, Ord, Typeable)+  deriving (Eq, Ord, Typeable, Data)  instance AdditiveGroup R2 where   zeroV = R2 0 0@@ -184,6 +180,13 @@ instance HasY R2 where     _y = r2Iso . _2 +instance HasTheta R2 where+    _theta = lens (\v -> atanA (v^._y / v^._x))+      (\v θ -> let r = magnitude v in R2 (r * cosA θ) (r * sinA θ))++instance HasR R2 where+    _r = lens magnitude (\v r -> let s = r/magnitude v in s *^ v)+ -- | Points in R^2.  This type is intentionally abstract. -- --   * To construct a point, use 'p2', or '^&' (see@@ -235,55 +238,9 @@  instance HasY P2 where     _y = p2Iso . _2---------------------------------------------------------------- Angles --- | Angles can be expressed in a variety of units.  Internally,--- they are represented in radians.-newtype Angle = Radians Double-              deriving (Read, Show, Eq, Ord, Enum, AdditiveGroup)--instance VectorSpace Angle where-  type Scalar Angle = Double-  s *^ Radians t = Radians (s*t)---- | The radian measure of an @Angle@ @a@ can be accessed as @a--- ^. rad@.  A new @Angle@ can be defined in radians as @pi \@\@ rad@.-rad :: Iso' Angle Double-rad = iso (\(Radians r) -> r) Radians---- | The measure of an @Angle@ @a@ in full circles can be accessed as--- @a ^. turn@.  A new @Angle@ of one-half circle can be defined in as--- @1/2 \@\@ turn@.-turn :: Iso' Angle Double-turn = iso (\(Radians r) -> r/2/pi) (Radians . (*(2*pi)))---- | The degree measure of an @Angle@ @a@ can be accessed as @a--- ^. deg@.  A new @Angle@ can be defined in degrees as @180 \@\@--- deg@.-deg :: Iso' Angle Double-deg = iso (\(Radians r) -> r/2/pi*360) (Radians . (*(2*pi/360)))---- | An angle representing one full turn.-fullTurn :: Angle-fullTurn = 1 @@ turn---- | Deprecated synonym for 'fullTurn', retained for backwards compatibility.-fullCircle :: Angle-fullCircle = fullTurn---- | Calculate ratio between two angles.-angleRatio :: Angle -> Angle -> Double-angleRatio a b = (a^.rad) / (b^.rad)----- | @30 \@\@ deg@ is an @Angle@ of the given measure and units.------ More generally, @\@\@@ reverses the @Iso\'@ on its right, and--- applies the @Iso\'@ to the value on the left.  @Angle@s are the--- motivating example where this order improves readability.-(@@) :: b -> Iso' a b -> a--- The signature above is slightly specialized, in favor of readability-a @@ i = review i a+instance HasR P2 where+    _r = _relative origin . _r -infixl 5 @@+instance HasTheta P2 where+    _theta = _relative origin . _theta
src/Diagrams/TwoD/Vector.hs view
@@ -23,8 +23,9 @@        ) where  import           Control.Lens         ((^.))-import           Data.AdditiveGroup import           Data.VectorSpace     ((<.>))++import           Diagrams.Angle import           Diagrams.TwoD.Types import           Diagrams.Coordinates @@ -49,15 +50,6 @@ --   vector is arbitrarily assigned the direction 0. direction :: R2 -> Angle direction (coords -> x :& y) = atan2 y x @@ rad---- | Compute the counterclockwise angle from the first vector to the second.-angleBetween :: R2 -> R2 -> Angle-angleBetween v1 v2-  | d2 > d1   = d2 ^-^ d1-  | otherwise = fullTurn ^+^ d2 ^-^ d1-  where-    d1 = direction v1-    d2 = direction v2  -- | Convert an angle into a unit vector pointing in that direction. fromDirection :: Angle -> R2