packages feed

diagrams-core 1.0.0.1 → 1.1

raw patch · 22 files changed

+583/−172 lines, 22 filesdep ~containersdep ~lensdep ~semigroups

Dependency ranges changed: containers, lens, semigroups, vector-space-points

Files

CHANGES.markdown view
@@ -1,3 +1,35 @@+1.1 (8 March 2014)+------------------++* **New features**++    - New `basis` function+	- New `determinant` function for computing the determinant of a+      `Transformation`+    - Add `Typeable` constraint on `Prim`s, making it possible to+      extract things back out of a `Prim` wrapper using `cast`+	- Raw `Trace`s now return a *sorted list* of intersections,+      instead of only the smallest.  This is used to implement a new+      family of functions `rayTraceV`, `rayTraceP`, `maxRayTraceV`,+      `maxRayTraceP`, which work similarly to the parallel versions+      without `Ray`, but return the first intersection in the+      *positive* direction from the given point, rather than the+      smallest in absolute terms.+    - New `Annotation` type and corresponding `applyAnnotation`+      function, for attaching uninterpreted annotations at specific+      points in a diagram tree.  Currently this is used for+      hyperlinks; more annotation types will be added in the future.++* **Dependency/version changes**++    - Require `lens-4.0`+	- Allow `vector-space-points-0.2`++* **Bug fixes**++    - Looking up a subdiagram by name now results in a diagram which+      still has that name (#43)+ 1.0.0.1 (27 November 2013) -------------------------- 
LICENSE view
@@ -1,6 +1,7 @@-Copyright (c) 2011-2013 diagrams-core team:+Copyright (c) 2011-2014 diagrams-core team:    Daniel Bergey <bergey@alum.mit.edu>+  Tad Doxsee <doxsee@pacbell.net>   Conal Elliott <conal@conal.net>   Sam Griffin <sam.griffin@gmail.com>   Chris Mears <chris@cmears.id.au>
diagrams-core.cabal view
@@ -1,5 +1,5 @@ Name:                diagrams-core-Version:             1.0.0.1+Version:             1.1 Synopsis:            Core libraries for diagrams EDSL Description:         The core modules underlying diagrams,                      an embedded domain-specific language@@ -13,8 +13,9 @@ Category:            Graphics Build-type:          Simple Cabal-version:       >=1.10-Extra-source-files:  CHANGES.markdown, README.markdown-Tested-with:         GHC == 7.4.2, GHC == 7.6.1+Extra-source-files:  CHANGES.markdown, README.markdown, diagrams/*.svg+extra-doc-files:     diagrams/*.svg+Tested-with:         GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.1 Source-repository head   type:     git   location: git://github.com/diagrams/diagrams-core.git@@ -35,15 +36,15 @@                        Diagrams.Core.Query    Build-depends:       base >= 4.2 && < 4.8,-                       containers >= 0.3 && < 0.6,-                       semigroups >= 0.3.4 && < 0.13,+                       containers >= 0.4.2 && < 0.6,+                       semigroups >= 0.8.4 && < 0.13,                        vector-space >= 0.8.4 && < 0.9,-                       vector-space-points >= 0.1 && < 0.2,+                       vector-space-points >= 0.1 && < 0.3,                        MemoTrie >= 0.4.7 && < 0.7,                        newtype >= 0.2 && < 0.3,                        monoid-extras >= 0.3 && < 0.4,                        dual-tree >= 0.2 && < 0.3,-                       lens >= 3.8 && < 4+                       lens >= 4.0 && < 4.1    hs-source-dirs:      src 
+ diagrams/src_Diagrams_Core_Trace_maxRayTracePEx.svg view
@@ -0,0 +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="251.1919698870766" font-size="1" viewBox="0 0 600 251"><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(50.188205771643666,0.0,0.0,50.188205771643666,84.19071518193223,125.59598494353831)"><g><g><path d="M 7.127500000000001,1.9206044693365778 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.677500000000002,-1.5793955306634222 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 9.627500000000001,-1.5793955306634222 l 0.20472536320389398,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.927500000000002,-2.079395530663422 l -6.400648041348231e-2,0.2780448438866492 l -2.8602755563472637e-2,-0.12369611725839137 l -0.12260375314021488,3.2972212036178644e-2 l 0.21521298911716982,-0.18732093866443647 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.834890764023047,-1.9250468040351643 l 1.6220638094109115e-3,7.01481347572395e-3 l -8.574929257125418e-3,-5.144957554275266e-3 l 6.952865447714507e-3,-1.8698559214486844e-3 v 4.336808689942018e-19 Z" /></g></g></g></g></g></g><g><g><path d="M 2.8275000000000006,1.525 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 1.08,-1.8 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.8775000000000004,0.32499999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 0.20472536320389326,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.1275,-0.17499999999999996 l -6.400648041348188e-2,0.2780448438866493 l -2.8602755563472824e-2,-0.12369611725839133 l -0.12260375314021484,3.297221203617883e-2 l 0.21521298911716952,-0.1873209386644368 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.034890764023046,-2.0651273371741996e-2 l 1.6220638094109228e-3,7.014813475723947e-3 l -8.574929257125427e-3,-5.144957554275253e-3 l 6.952865447714504e-3,-1.8698559214486944e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 4.9575000000000005,-1.475 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><path d="M -1.525,0.7249999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 2.0,-3.3333333333333335 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.4749999999999999,2.2249999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.22499999999999998,1.7249999999999996 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.31760923597695473,1.8793487266282576 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 1.5250000000000001,-1.1083333333333336 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
+ diagrams/src_Diagrams_Core_Trace_maxRayTraceVEx.svg view
@@ -0,0 +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="251.1919698870766" font-size="1" viewBox="0 0 600 251"><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(50.188205771643666,0.0,0.0,50.188205771643666,84.19071518193223,125.59598494353831)"><g><g><path d="M 7.127500000000001,1.9206044693365778 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.677500000000002,-1.5793955306634222 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 9.627500000000001,-1.5793955306634222 l 0.20472536320389398,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.927500000000002,-2.079395530663422 l -6.400648041348231e-2,0.2780448438866492 l -2.8602755563472637e-2,-0.12369611725839137 l -0.12260375314021488,3.2972212036178644e-2 l 0.21521298911716982,-0.18732093866443647 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.834890764023047,-1.9250468040351643 l 1.6220638094109115e-3,7.01481347572395e-3 l -8.574929257125418e-3,-5.144957554275266e-3 l 6.952865447714507e-3,-1.8698559214486844e-3 v 4.336808689942018e-19 Z" /></g></g></g></g></g></g><g><g><path d="M 2.8275000000000006,1.525 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 1.08,-1.8 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.8775000000000004,0.32499999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 0.20472536320389326,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.1275,-0.17499999999999996 l -6.400648041348188e-2,0.2780448438866493 l -2.8602755563472824e-2,-0.12369611725839133 l -0.12260375314021484,3.297221203617883e-2 l 0.21521298911716952,-0.1873209386644368 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.034890764023046,-2.0651273371741996e-2 l 1.6220638094109228e-3,7.014813475723947e-3 l -8.574929257125427e-3,-5.144957554275253e-3 l 6.952865447714504e-3,-1.8698559214486944e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 0.9847253632038933,-1.6412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 4.907500000000001,-1.4749999999999999 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 4.814890764023046,-1.320651273371742 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 4.9575000000000005,-1.475 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><path d="M -1.525,0.7249999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 2.0,-3.3333333333333335 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.4749999999999999,2.2249999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.22499999999999998,1.7249999999999996 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.31760923597695473,1.8793487266282576 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 1.9047253632038939,-3.17454227200649 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 1.4750000000000005,-1.1083333333333345 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 1.3823907640230457,-0.9539846067050766 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 1.5250000000000001,-1.1083333333333336 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
+ diagrams/src_Diagrams_Core_Trace_maxTracePEx.svg view
@@ -0,0 +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="251.1919698870766" font-size="1" viewBox="0 0 600 251"><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(50.188205771643666,0.0,0.0,50.188205771643666,84.19071518193223,125.59598494353831)"><g><g><path d="M 7.127500000000001,1.9206044693365778 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 9.627500000000001,-1.5793955306634222 l -0.2999999999999998,0.5 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.677500000000002,-1.5793955306634222 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 9.627500000000001,-1.5793955306634222 l 0.20472536320389398,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.927500000000002,-2.079395530663422 l -6.400648041348231e-2,0.2780448438866492 l -2.8602755563472637e-2,-0.12369611725839137 l -0.12260375314021488,3.2972212036178644e-2 l 0.21521298911716982,-0.18732093866443647 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.834890764023047,-1.9250468040351643 l 1.6220638094109115e-3,7.01481347572395e-3 l -8.574929257125418e-3,-5.144957554275266e-3 l 6.952865447714507e-3,-1.8698559214486844e-3 v 4.336808689942018e-19 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.377500000000001,-1.0793955306634222 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><g><path d="M 2.8275000000000006,1.525 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 1.08,-1.8 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.8775000000000004,0.32499999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 0.20472536320389326,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.1275,-0.17499999999999996 l -6.400648041348188e-2,0.2780448438866493 l -2.8602755563472824e-2,-0.12369611725839133 l -0.12260375314021484,3.297221203617883e-2 l 0.21521298911716952,-0.1873209386644368 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.034890764023046,-2.0651273371741996e-2 l 1.6220638094109228e-3,7.014813475723947e-3 l -8.574929257125427e-3,-5.144957554275253e-3 l 6.952865447714504e-3,-1.8698559214486944e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 4.9575000000000005,-1.475 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><path d="M -1.525,0.7249999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 2.0,-3.3333333333333335 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.4749999999999999,2.2249999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.22499999999999998,1.7249999999999996 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.31760923597695473,1.8793487266282576 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 1.5250000000000001,-1.1083333333333336 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
+ diagrams/src_Diagrams_Core_Trace_maxTraceVEx.svg view
@@ -0,0 +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="251.1919698870766" font-size="1" viewBox="0 0 600 251"><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(50.188205771643666,0.0,0.0,50.188205771643666,84.19071518193223,125.59598494353831)"><g><g><path d="M 7.127500000000001,1.9206044693365778 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 9.627500000000001,-1.5793955306634222 l -0.2999999999999998,0.5 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.677500000000002,-1.5793955306634222 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 9.627500000000001,-1.5793955306634222 l 0.20472536320389398,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.927500000000002,-2.079395530663422 l -6.400648041348231e-2,0.2780448438866492 l -2.8602755563472637e-2,-0.12369611725839137 l -0.12260375314021488,3.2972212036178644e-2 l 0.21521298911716982,-0.18732093866443647 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.834890764023047,-1.9250468040351643 l 1.6220638094109115e-3,7.01481347572395e-3 l -8.574929257125418e-3,-5.144957554275266e-3 l 6.952865447714507e-3,-1.8698559214486844e-3 v 4.336808689942018e-19 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M 9.627500000000001,-1.5793955306634222 l -0.20472536320389395,0.34120893867315594 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 9.3275,-1.079395530663422 l 6.400648041348217e-2,-0.2780448438866492 l 2.8602755563472707e-2,0.12369611725839134 l 0.12260375314021486,-3.2972212036178714e-2 l -0.21521298911716974,0.18732093866443655 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 9.420109235976955,-1.23374425729168 l -1.6220638094109154e-3,-7.014813475723949e-3 l 8.574929257125422e-3,5.1449575542752615e-3 l -6.952865447714507e-3,1.8698559214486874e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.377500000000001,-1.0793955306634222 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><g><path d="M 2.8275000000000006,1.525 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 1.08,-1.8 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.8775000000000004,0.32499999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 0.20472536320389326,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.1275,-0.17499999999999996 l -6.400648041348188e-2,0.2780448438866493 l -2.8602755563472824e-2,-0.12369611725839133 l -0.12260375314021484,3.297221203617883e-2 l 0.21521298911716952,-0.1873209386644368 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.034890764023046,-2.0651273371741996e-2 l 1.6220638094109228e-3,7.014813475723947e-3 l -8.574929257125427e-3,-5.144957554275253e-3 l 6.952865447714504e-3,-1.8698559214486944e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8275000000000006,0.32499999999999996 l 0.9847253632038933,-1.6412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 4.907500000000001,-1.4749999999999999 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 4.814890764023046,-1.320651273371742 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 4.9575000000000005,-1.475 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><path d="M -1.525,0.7249999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 2.0,-3.3333333333333335 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.4749999999999999,2.2249999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.22499999999999998,1.7249999999999996 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.31760923597695473,1.8793487266282576 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5249999999999999,2.2249999999999996 l 1.9047253632038939,-3.17454227200649 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 1.4750000000000005,-1.1083333333333345 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 1.3823907640230457,-0.9539846067050766 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 1.5250000000000001,-1.1083333333333336 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
+ diagrams/src_Diagrams_Core_Trace_rayTracePEx.svg view
@@ -0,0 +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="252.3529411764706" font-size="1" viewBox="0 0 600 252"><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(50.42016806722689,0.0,0.0,50.42016806722689,83.19327731092437,126.17647058823532)"><g><g><path d="M 7.100000000000001,1.9206044693365778 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.650000000000002,-1.5793955306634222 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 9.600000000000001,-1.5793955306634222 l 0.20472536320389398,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.900000000000002,-2.079395530663422 l -6.400648041348231e-2,0.2780448438866492 l -2.8602755563472637e-2,-0.12369611725839137 l -0.12260375314021488,3.2972212036178644e-2 l 0.21521298911716982,-0.18732093866443647 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.807390764023047,-1.9250468040351643 l 1.6220638094109115e-3,7.01481347572395e-3 l -8.574929257125418e-3,-5.144957554275266e-3 l 6.952865447714507e-3,-1.8698559214486844e-3 v 4.336808689942018e-19 Z" /></g></g></g></g></g></g><g><g><path d="M 2.8000000000000007,1.5 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 3.8000000000000007,0.30000000000000004 l 0.48,-0.8 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.8500000000000005,0.30000000000000004 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8000000000000007,0.30000000000000004 l 0.20472536320389326,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.1000000000000005,-0.19999999999999987 l -6.400648041348188e-2,0.2780448438866493 l -2.8602755563472824e-2,-0.12369611725839133 l -0.12260375314021484,3.297221203617883e-2 l 0.21521298911716952,-0.1873209386644368 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.007390764023046,-4.565127337174191e-2 l 1.6220638094109228e-3,7.014813475723947e-3 l -8.574929257125427e-3,-5.144957554275253e-3 l 6.952865447714504e-3,-1.8698559214486944e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 4.330000000000001,-0.5 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><path d="M -1.5,0.7249999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5,2.2249999999999996 l 0.8999999999999999,-1.5 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.45,2.2249999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5,2.2249999999999996 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.20000000000000007,1.7249999999999996 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.2926092359769548,1.8793487266282576 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 0.4499999999999999,0.7249999999999999 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
+ diagrams/src_Diagrams_Core_Trace_rayTraceVEx.svg view
@@ -0,0 +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="252.3529411764706" font-size="1" viewBox="0 0 600 252"><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(50.42016806722689,0.0,0.0,50.42016806722689,83.19327731092437,126.17647058823532)"><g><g><path d="M 7.100000000000001,1.9206044693365778 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.650000000000002,-1.5793955306634222 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 9.600000000000001,-1.5793955306634222 l 0.20472536320389398,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.900000000000002,-2.079395530663422 l -6.400648041348231e-2,0.2780448438866492 l -2.8602755563472637e-2,-0.12369611725839137 l -0.12260375314021488,3.2972212036178644e-2 l 0.21521298911716982,-0.18732093866443647 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.807390764023047,-1.9250468040351643 l 1.6220638094109115e-3,7.01481347572395e-3 l -8.574929257125418e-3,-5.144957554275266e-3 l 6.952865447714507e-3,-1.8698559214486844e-3 v 4.336808689942018e-19 Z" /></g></g></g></g></g></g><g><g><path d="M 2.8000000000000007,1.5 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 3.8000000000000007,0.30000000000000004 l 0.48,-0.8 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.8500000000000005,0.30000000000000004 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8000000000000007,0.30000000000000004 l 0.20472536320389326,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.1000000000000005,-0.19999999999999987 l -6.400648041348188e-2,0.2780448438866493 l -2.8602755563472824e-2,-0.12369611725839133 l -0.12260375314021484,3.297221203617883e-2 l 0.21521298911716952,-0.1873209386644368 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.007390764023046,-4.565127337174191e-2 l 1.6220638094109228e-3,7.014813475723947e-3 l -8.574929257125427e-3,-5.144957554275253e-3 l 6.952865447714504e-3,-1.8698559214486944e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8000000000000007,0.30000000000000004 l 0.38472536320389383,-0.6412089386731558 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 4.280000000000001,-0.5 l -6.40064804134821e-2,0.27804484388664924 l -2.8602755563472734e-2,-0.12369611725839136 l -0.12260375314021485,3.297221203617875e-2 l 0.21521298911716968,-0.18732093866443664 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 4.187390764023046,-0.34565127337174206 l 1.6220638094109176e-3,7.014813475723949e-3 l -8.574929257125424e-3,-5.14495755427526e-3 l 6.952865447714506e-3,-1.8698559214486892e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 4.330000000000001,-0.5 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><path d="M -1.5,0.7249999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5,2.2249999999999996 l 0.8999999999999999,-1.5 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.45,2.2249999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5,2.2249999999999996 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.20000000000000007,1.7249999999999996 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.2926092359769548,1.8793487266282576 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5,2.2249999999999996 l 0.8047253632038933,-1.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 0.39999999999999986,0.7249999999999999 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 0.3073907640230451,0.8793487266282578 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 0.4499999999999999,0.7249999999999999 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
+ diagrams/src_Diagrams_Core_Trace_traceEx.svg view
@@ -0,0 +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="206.66666666666666" font-size="1" viewBox="0 0 200 207"><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(60.6060606060606,0.0,0.0,60.6060606060606,100.0,103.33333333333333)"><g><path d="M -1.5,1.4999999999999998 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5,0.2999999999999998 l -0.72,1.2 " /></g><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5,0.2999999999999998 l 1.08,-1.8 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.45,0.2999999999999998 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5,0.2999999999999998 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.20000000000000007,-0.20000000000000015 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.2926092359769548,-4.5651273371742185e-2 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 0.6300000000000001,-1.5000000000000002 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 2.9999999999999985e-2,-0.5000000000000002 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.57,0.4999999999999998 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M -1.17,1.4999999999999998 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
+ diagrams/src_Diagrams_Core_Trace_tracePEx.svg view
@@ -0,0 +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="252.3529411764706" font-size="1" viewBox="0 0 600 252"><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(50.42016806722689,0.0,0.0,50.42016806722689,83.19327731092437,126.17647058823532)"><g><g><path d="M 7.100000000000001,1.8956044693365777 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 9.600000000000001,-1.6043955306634223 l -2.1,3.5 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.650000000000002,-1.6043955306634223 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 9.600000000000001,-1.6043955306634223 l 0.20472536320389406,-0.3412089386731558 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.900000000000002,-2.1043955306634223 l -6.400648041348227e-2,0.27804484388664924 l -2.8602755563472658e-2,-0.12369611725839136 l -0.12260375314021488,3.297221203617867e-2 l 0.2152129891171698,-0.18732093866443655 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.807390764023047,-1.9500468040351646 l 1.6220638094109128e-3,7.01481347572395e-3 l -8.57492925712542e-3,-5.144957554275265e-3 l 6.952865447714507e-3,-1.8698559214486848e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 7.550000000000002,1.8956044693365777 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><g><path d="M 2.8000000000000007,1.4749999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 3.8000000000000007,0.2749999999999999 l -0.72,1.2 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.8500000000000005,0.2749999999999999 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8000000000000007,0.2749999999999999 l 0.20472536320389326,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.1000000000000005,-0.225 l -6.400648041348188e-2,0.2780448438866493 l -2.8602755563472824e-2,-0.12369611725839133 l -0.12260375314021484,3.297221203617883e-2 l 0.21521298911716952,-0.1873209386644368 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.007390764023046,-7.065127337174204e-2 l 1.6220638094109228e-3,7.014813475723947e-3 l -8.574929257125427e-3,-5.144957554275253e-3 l 6.952865447714504e-3,-1.8698559214486944e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.130000000000001,1.4749999999999999 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><path d="M -1.5,0.7249999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5,2.2249999999999996 l 0.8999999999999999,-1.5 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.45,2.2249999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5,2.2249999999999996 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.20000000000000007,1.7249999999999996 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.2926092359769548,1.8793487266282576 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 0.4499999999999999,0.7249999999999999 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
+ diagrams/src_Diagrams_Core_Trace_traceVEx.svg view
@@ -0,0 +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="252.3529411764706" font-size="1" viewBox="0 0 600 252"><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(50.42016806722689,0.0,0.0,50.42016806722689,83.19327731092437,126.17647058823532)"><g><g><path d="M 7.100000000000001,1.8956044693365777 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 9.600000000000001,-1.6043955306634223 l -2.1,3.5 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 9.650000000000002,-1.6043955306634223 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 9.600000000000001,-1.6043955306634223 l 0.20472536320389406,-0.3412089386731558 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.900000000000002,-2.1043955306634223 l -6.400648041348227e-2,0.27804484388664924 l -2.8602755563472658e-2,-0.12369611725839136 l -0.12260375314021488,3.297221203617867e-2 l 0.2152129891171698,-0.18732093866443655 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 9.807390764023047,-1.9500468040351646 l 1.6220638094109128e-3,7.01481347572395e-3 l -8.57492925712542e-3,-5.144957554275265e-3 l 6.952865447714507e-3,-1.8698559214486848e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M 9.600000000000001,-1.6043955306634223 l -2.0047253632038924,3.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 7.500000000000002,1.8956044693365774 l 6.40064804134819e-2,-0.2780448438866493 l 2.8602755563472818e-2,0.12369611725839133 l 0.12260375314021485,-3.2972212036178825e-2 l -0.21521298911716957,0.18732093866443678 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 7.592609235976957,1.7412557427083195 l -1.6220638094109224e-3,-7.014813475723948e-3 l 8.574929257125427e-3,5.144957554275254e-3 l -6.952865447714505e-3,1.869855921448694e-3 v 4.336808689942018e-19 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 7.550000000000002,1.8956044693365777 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><g><path d="M 2.8000000000000007,1.4749999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M 3.8000000000000007,0.2749999999999999 l -0.72,1.2 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.8500000000000005,0.2749999999999999 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8000000000000007,0.2749999999999999 l 0.20472536320389326,-0.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.1000000000000005,-0.225 l -6.400648041348188e-2,0.2780448438866493 l -2.8602755563472824e-2,-0.12369611725839133 l -0.12260375314021484,3.297221203617883e-2 l 0.21521298911716952,-0.1873209386644368 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M 4.007390764023046,-7.065127337174204e-2 l 1.6220638094109228e-3,7.014813475723947e-3 l -8.574929257125427e-3,-5.144957554275253e-3 l 6.952865447714504e-3,-1.8698559214486944e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M 3.8000000000000007,0.2749999999999999 l -0.6247253632038933,1.041208938673156 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 3.080000000000001,1.475 l 6.40064804134819e-2,-0.2780448438866493 l 2.8602755563472818e-2,0.12369611725839133 l 0.12260375314021485,-3.2972212036178825e-2 l -0.21521298911716957,0.18732093866443678 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 3.1726092359769558,1.3206512733717422 l -1.6220638094109224e-3,-7.014813475723948e-3 l 8.574929257125427e-3,5.144957554275254e-3 l -6.952865447714505e-3,1.869855921448694e-3 v 4.336808689942018e-19 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 3.130000000000001,1.4749999999999999 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g><g><path d="M -1.5,0.7249999999999999 h 3.0 v -3.0 h -2.0 v 1.0 h 1.0 v 1.0 h -2.0 v 1.0 " /><g fill-opacity="0.0" stroke-dasharray="0.1,0.1" stroke-dashoffset="0.0"><path d="M -0.5,2.2249999999999996 l 0.8999999999999999,-1.5 " /></g><g fill="rgb(0,0,255)" fill-opacity="1.0" stroke-width="0.0"><path d="M -0.45,2.2249999999999996 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g><g stroke="rgb(0,0,255)" stroke-opacity="1.0" stroke-width="2.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5,2.2249999999999996 l 0.2047253632038934,-0.34120893867315566 " /></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.20000000000000007,1.7249999999999996 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,0,255)" fill-opacity="1.0"><path d="M -0.2926092359769548,1.8793487266282576 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g stroke="rgb(0,128,0)" stroke-opacity="1.0" stroke-width="3.0e-2"><g><g fill-opacity="0.0"><path d="M -0.5,2.2249999999999996 l 0.8047253632038933,-1.3412089386731556 " /></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="" /></g></g><g stroke-width="0.0"><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 0.39999999999999986,0.7249999999999999 l -6.400648041348193e-2,0.2780448438866493 l -2.8602755563472804e-2,-0.12369611725839133 l -0.12260375314021485,3.297221203617881e-2 l 0.21521298911716957,-0.18732093866443678 Z" /></g><g fill="rgb(0,128,0)" fill-opacity="1.0"><path d="M 0.3073907640230451,0.8793487266282578 l 1.6220638094109206e-3,7.014813475723948e-3 l -8.574929257125425e-3,-5.1449575542752545e-3 l 6.952865447714505e-3,-1.8698559214486935e-3 h -0.0 Z" /></g></g></g></g><g fill="rgb(255,0,0)" fill-opacity="1.0" stroke-width="0.0"><path d="M 0.4499999999999999,0.7249999999999999 c 0.0,-2.7614237491539673e-2 -2.2385762508460322e-2,-5.0e-2 -4.999999999999999e-2 -5.0e-2c -2.7614237491539673e-2,-1.6908843777454448e-18 -5.0e-2,2.238576250846032e-2 -5.0e-2 4.999999999999999e-2c -3.3817687554908897e-18,2.7614237491539673e-2 2.238576250846032e-2,5.0e-2 4.999999999999998e-2 5.0e-2c 2.7614237491539673e-2,5.072653133236335e-18 5.0e-2,-2.2385762508460316e-2 5.000000000000001e-2 -4.999999999999999e-2Z" /></g></g></g></g></g></svg>
src/Diagrams/Core.hs view
@@ -9,7 +9,7 @@ -- domain-specific language for describing and rendering diagrams. -- Normal users of the diagrams library should almost never need to -- import anything from this package directly; instead, import modules--- (especially "Diagrams.Prelude") from the diagrams-lib package,+-- (especially @Diagrams.Prelude@) from the diagrams-lib package, -- which re-exports most things of value to users. -- -- For most library code needing access to core internals, it should@@ -32,6 +32,10 @@           -- * Transformations +         -- ** Utilities+       , basis+       , determinant+          -- ** Invertible linear transformations        , (:-:), (<->), linv, lapp @@ -88,10 +92,13 @@          -- * Traces         , Trace(Trace)+       , SortedList, mkSortedList, getSortedList        , appTrace, mkTrace        , Traced(..)        , traceV, traceP        , maxTraceV, maxTraceP+       , rayTraceV, rayTraceP+       , maxRayTraceV, maxRayTraceP           -- * Things with local origins @@ -121,6 +128,8 @@        , withNameAll        , withNames        , localize++       , href         , freeze, setEnvelope, setTrace 
src/Diagrams/Core/Compile.hs view
@@ -39,7 +39,7 @@ emptyDTree = Node DEmpty []  -- | Convert a @QDiagram@ into a raw tree.-toDTree :: HasLinearMap v => QDiagram b v m -> Maybe (DTree b v ())+toDTree :: HasLinearMap v => QDiagram b v m -> Maybe (DTree b v Annotation) toDTree (QD qd)   = foldDUAL @@ -90,10 +90,10 @@ --   in the @RTree@ the frozen part of the transform is put in a node of type --   @RFrozenTr (Transformation v)@ and the unfrozen part is pushed down until --   it is either frozen or reaches a primitive node.-fromDTree :: HasLinearMap v => DTree b v () -> RTree b v ()+fromDTree :: HasLinearMap v => DTree b v Annotation -> RTree b v Annotation fromDTree = fromDTree' mempty   where-    fromDTree' :: HasLinearMap v => Transformation v -> DTree b v () -> RTree b v ()+    fromDTree' :: HasLinearMap v => Transformation v -> DTree b v Annotation -> RTree b v Annotation     -- We put the accumulated unfrozen transformation (accTr) and the prim     -- into an RPrim node.     fromDTree' accTr (Node (DPrim p) _)@@ -113,18 +113,20 @@     fromDTree' accTr (Node (DTransform (tr1 :| tr2)) ts)       = Node (RFrozenTr (accTr <> tr1)) (fmap (fromDTree' tr2) ts) +    fromDTree' accTr (Node (DAnnot a) ts)+      = Node (RAnnot a) (fmap (fromDTree' accTr) ts)+     -- Drop accumulated transformations upon encountering a DDelay     -- node --- the tree unfolded beneath it already took into account     -- any non-frozen transformation at this point.     fromDTree' _ (Node DDelay ts)       = Node REmpty (fmap (fromDTree' mempty) ts) -    -- DAnnot and DEmpty nodes become REmpties, in the future my want to-    -- handle DAnnots separately if they are used, again accTr flows through.+    -- DEmpty nodes become REmpties, again accTr flows through.     fromDTree' accTr (Node _ ts)       = Node REmpty (fmap (fromDTree' accTr) ts)  -- | Compile a @QDiagram@ into an 'RTree'.  Suitable for use by --   backends when implementing 'renderData'.-toRTree :: HasLinearMap v => QDiagram b v m -> RTree b v ()+toRTree :: HasLinearMap v => QDiagram b v m -> RTree b v Annotation toRTree = fromDTree . fromMaybe (Node DEmpty []) . toDTree
src/Diagrams/Core/Envelope.hs view
@@ -43,7 +43,8 @@        ) where  import           Control.Applicative     ((<$>))-import           Control.Lens (Wrapped(..), iso, view, over, mapped, unwrapped)+import           Control.Lens (Wrapped(..), Rewrapped, iso, over, mapped+                              , _Wrapping', op) import qualified Data.Map                as M import           Data.Maybe              (fromMaybe) import           Data.Semigroup@@ -96,18 +97,17 @@ --   <http://byorgey.wordpress.com/2009/10/28/collecting-attributes/#comment-2030>.  See also Brent Yorgey, /Monoids: Theme and Variations/, published in the 2012 Haskell Symposium: <http://www.cis.upenn.edu/~byorgey/pub/monoid-pearl.pdf>; video: <http://www.youtube.com/watch?v=X-8NCkD2vOw>. newtype Envelope v = Envelope (Option (v -> Max (Scalar v))) -instance (Scalar v ~ s, Scalar v' ~ s', s ~ s')-                                        => Wrapped-                                        (Option (v -> Max s))-                                        (Option (v' -> Max s'))-                                        (Envelope v) (Envelope v')-         where wrapped = iso Envelope (\(Envelope e) -> e)+instance Wrapped (Envelope v) where+    type Unwrapped (Envelope v) = Option (v -> Max (Scalar v))+    _Wrapped' = iso (\(Envelope e) -> e) Envelope +instance Rewrapped (Envelope v) (Envelope v')+ appEnvelope :: Envelope v -> Maybe (v -> Scalar v) appEnvelope (Envelope (Option e)) = (getMax .) <$> e  onEnvelope :: ((v -> Scalar v) -> (v -> Scalar v)) -> Envelope v -> Envelope v-onEnvelope t = over (unwrapped . mapped) ((Max .) . t . (getMax .))+onEnvelope t = over (_Wrapping' Envelope . mapped) ((Max .) . t . (getMax .))  mkEnvelope :: (v -> Scalar v) -> Envelope v mkEnvelope = Envelope . Option . Just . (Max .)@@ -188,7 +188,7 @@   getEnvelope p = moveTo p . mkEnvelope $ const zeroV  instance Enveloped t => Enveloped (TransInv t) where-  getEnvelope = getEnvelope . view unwrapped+  getEnvelope = getEnvelope . op TransInv  instance (Enveloped a, Enveloped b, V a ~ V b) => Enveloped (a,b) where   getEnvelope (x,y) = getEnvelope x <> getEnvelope y
src/Diagrams/Core/HasOrigin.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE FlexibleInstances-           , FlexibleContexts-           , TypeFamilies-           , UndecidableInstances-  #-}+{-# LANGUAGE FlexibleContexts     #-}+{-# LANGUAGE FlexibleInstances    #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE UndecidableInstances #-}  -- The UndecidableInstances flag is needed under 6.12.3 for the -- HasOrigin (a,b) instance.@@ -23,10 +22,10 @@        ( HasOrigin(..), moveOriginBy, moveTo, place        ) where -import qualified Data.Map as M-import qualified Data.Set as S+import qualified Data.Map             as M+import qualified Data.Set             as S -import           Data.AffineSpace ((.-^), (.-.))+import           Data.AffineSpace     ((.-.), (.-^)) import           Data.VectorSpace  import           Diagrams.Core.Points@@ -40,7 +39,9 @@ --   having a separate class for 'HasOrigin'; indeed, for types which --   are instances of both we should have the identity -----   > moveOriginTo (origin .^+ v) === translate (negateV v)+--   @+--   moveOriginTo (origin .^+ v) === translate (negateV v)+--   @ -- --   The reason is that some things (e.g. vectors, 'Trail's) are --   transformable but are translationally invariant, i.e. have no@@ -63,12 +64,16 @@ --   the given point. Note that this is dual to 'moveOriginTo', i.e. we --   should have -----   > moveTo (origin .^+ v) === moveOriginTo (origin .^- v)+--   @+--   moveTo (origin .^+ v) === moveOriginTo (origin .^- v)+--   @ -- --   For types which are also 'Transformable', this is essentially the --   same as 'translate', i.e. -----   > moveTo (origin .^+ v) === translate v+--   @+--   moveTo (origin .^+ v) === translate v+--   @ moveTo :: HasOrigin t => Point (V t) -> t -> t moveTo = moveOriginBy . (origin .-.) 
src/Diagrams/Core/Names.hs view
@@ -5,6 +5,7 @@ {-# LANGUAGE MultiParamTypeClasses      #-} {-# LANGUAGE OverlappingInstances       #-} {-# LANGUAGE TemplateHaskell            #-}+{-# LANGUAGE TypeFamilies               #-} {-# LANGUAGE TypeSynonymInstances       #-} ----------------------------------------------------------------------------- -- |@@ -31,7 +32,7 @@         ) where -import           Control.Lens            (over, unwrapped, Wrapped(..), iso)+import           Control.Lens            (over, Wrapped(..), Rewrapped, iso, _Unwrapping') import           Data.List               (intercalate) import qualified Data.Map                as M import           Data.Semigroup@@ -92,9 +93,12 @@ newtype Name = Name [AName]   deriving (Eq, Ord, Semigroup, Monoid, Typeable) -instance Wrapped [AName] [AName] Name Name-  where wrapped = iso Name (\(Name ans) -> ans)+instance Wrapped Name where+    type Unwrapped Name = [AName]+    _Wrapped' = iso (\(Name ans) -> ans) Name +instance Rewrapped Name Name+ instance Show Name where   show (Name ns) = intercalate " .> " $ map show ns @@ -118,7 +122,7 @@   (|>) = (.>)  instance Qualifiable a => Qualifiable (TransInv a) where-  (|>) n = over unwrapped (n |>)+  (|>) n = over (_Unwrapping' TransInv) (n |>)  instance (Qualifiable a, Qualifiable b) => Qualifiable (a,b) where   n |> (a,b) = (n |> a, n |> b)
src/Diagrams/Core/Query.hs view
@@ -21,7 +21,7 @@        ) where  import Control.Applicative-import Control.Lens (Wrapped(..), iso)+import Control.Lens (Wrapped(..), Rewrapped, iso) import Data.Semigroup  import Data.AffineSpace@@ -45,8 +45,11 @@ newtype Query v m = Query { runQuery :: Point v -> m }   deriving (Functor, Applicative, Semigroup, Monoid) -instance Wrapped (Point v -> m) (Point v' -> m') (Query v m) (Query v' m')-    where wrapped = iso Query runQuery+instance Wrapped (Query v m) where+    type Unwrapped (Query v m) = (Point v -> m)+    _Wrapped' = iso runQuery Query++instance Rewrapped (Query v m) (Query v' m')  type instance V (Query v m) = v 
src/Diagrams/Core/Style.hs view
@@ -44,7 +44,7 @@        ) where  import           Control.Arrow ((***))-import           Control.Lens (Wrapped(..), iso)+import           Control.Lens (Wrapped(..), Rewrapped, iso) import qualified Data.Map as M import           Data.Semigroup import qualified Data.Set as S@@ -140,12 +140,11 @@   -- The String keys are serialized TypeRep values, corresponding to   -- the type of the stored attribute. -instance Wrapped-         (M.Map String (Attribute v))-         (M.Map String (Attribute v'))-         (Style v)-         (Style v')-     where wrapped = iso Style (\(Style m) -> m)+instance Wrapped (Style v) where+    type Unwrapped (Style v) = M.Map String (Attribute v)+    _Wrapped' = iso (\(Style m) -> m) Style++instance Rewrapped (Style v) (Style v')  type instance V (Style v) = v 
src/Diagrams/Core/Trace.hs view
@@ -25,9 +25,13 @@ -----------------------------------------------------------------------------  module Diagrams.Core.Trace-       ( -- * Traces-         Trace(Trace)+       ( -- * SortedList+         SortedList+       , mkSortedList, getSortedList, onSortedList, unsafeOnSortedList +         -- * Traces+       , Trace(Trace)+        , appTrace        , mkTrace @@ -39,17 +43,20 @@         , traceV, traceP        , maxTraceV, maxTraceP+       , getRayTrace+       , rayTraceV, rayTraceP+       , maxRayTraceV, maxRayTraceP         ) where  import           Control.Applicative import           Control.Lens+import           Data.List               (sort) import qualified Data.Map                as M import           Data.Semigroup import qualified Data.Set                as S  import           Data.AffineSpace-import           Data.Monoid.Inf import           Data.VectorSpace  import           Diagrams.Core.HasOrigin@@ -58,52 +65,104 @@ import           Diagrams.Core.V  ------------------------------------------------------------+--  SortedList  --------------------------------------------+------------------------------------------------------------++-- Traces return sorted lists of intersections, so we define a newtype+-- wrapper to represent sorted lists.++-- | A newtype wrapper around a list which maintains the invariant+--   that the list is sorted.  The constructor is not exported; use+--   the smart constructor 'mkSortedList' (which sorts the given list)+--   instead.+newtype SortedList a = SortedList [a]++-- | A smart constructor for the 'SortedList' type, which sorts the+--   input to ensure the 'SortedList' invariant.+mkSortedList :: Ord a => [a] -> SortedList a+mkSortedList = SortedList . sort++-- | Project the (guaranteed sorted) list out of a 'SortedList'+--   wrapper.+getSortedList :: SortedList a -> [a]+getSortedList (SortedList as) = as++-- | Apply a list function to a 'SortedList'.  The function need not+--   result in a sorted list; the result will be sorted before being+--   rewrapped as a 'SortedList'.+onSortedList :: Ord b => ([a] -> [b]) -> (SortedList a -> SortedList b)+onSortedList f = unsafeOnSortedList (sort . f)++-- | Apply an /order-preserving/ list function to a 'SortedList'.  No+--   sorts or checks are done.+unsafeOnSortedList :: ([a] -> [b]) -> (SortedList a -> SortedList b)+unsafeOnSortedList f (SortedList as) = SortedList (f as)++-- | Merge two sorted lists.  The result is the sorted list containing+--   all the elements of both input lists (with duplicates).+merge :: Ord a => SortedList a -> SortedList a -> SortedList a+merge (SortedList as) (SortedList bs) = SortedList (merge' as bs)+  where+    merge' xs []         = xs+    merge' [] ys         = ys+    merge' (x:xs) (y:ys) =+      if x <= y+        then x : merge' xs (y:ys)+        else y : merge' (x:xs) ys++-- | 'SortedList' forms a semigroup with 'merge' as composition.+instance Ord a => Semigroup (SortedList a) where+  (<>) = merge++-- | 'SortedList' forms a monoid with 'merge' and the empty list.+instance Ord a => Monoid (SortedList a) where+  mappend = (<>)+  mempty = SortedList []++------------------------------------------------------------ --  Trace  ------------------------------------------------- ------------------------------------------------------------ +-- > traceEx = mkTraceDia def+ -- | Every diagram comes equipped with a /trace/.  Intuitively, the --   trace for a diagram is like a raytracer: given a line---   (represented as a base point and a direction), the trace computes---   the distance from the base point along the line to the first---   intersection with the diagram.  The distance can be negative if---   the intersection is in the opposite direction from the base---   point, or infinite if the ray never intersects the diagram.---   Note: to obtain the distance to the /furthest/ intersection---   instead of the /closest/, just negate the direction vector and---   then negate the result.+--   (represented as a base point and a direction vector), the trace+--   computes a sorted list of signed distances from the base point to+--   all intersections of the line with the boundary of the+--   diagram. -----   Note that the output should actually be interpreted not as an---   absolute distance, but as a multiplier relative to the input---   vector.  That is, if the input vector is @v@ and the returned---   scalar is @s@, the distance from the base point to the---   intersection is given by @s * magnitude v@.+--   Note that the outputs are not absolute distances, but multipliers+--   relative to the input vector.  That is, if the base point is @p@+--   and direction vector is @v@, and one of the output scalars is+--   @s@, then there is an intersection at the point @p .+^ (s *^ v)@.+--+--   <<diagrams/src_Diagrams_Core_Trace_traceEx.svg#diagram=traceEx&width=200>> -newtype Trace v = Trace { appTrace :: Point v -> v -> PosInf (Scalar v) }+newtype Trace v = Trace { appTrace :: Point v -> v -> SortedList (Scalar v) } -instance (Scalar v ~ s, Scalar v' ~ s', s ~ s') =>-         Wrapped-         (Point v -> v -> PosInf s)-         (Point v' -> v' -> PosInf s')-         (Trace v) (Trace v')-         where wrapped = iso Trace appTrace+instance Wrapped (Trace v) where+    type Unwrapped (Trace v) = Point v -> v -> SortedList (Scalar v)+    _Wrapped' = iso appTrace Trace -mkTrace :: (Point v -> v -> PosInf (Scalar v)) -> Trace v+instance Rewrapped (Trace v) (Trace v')++mkTrace :: (Point v -> v -> SortedList (Scalar v)) -> Trace v mkTrace = Trace  -- | Traces form a semigroup with pointwise minimum as composition. --   Hence, if @t1@ is the trace for diagram @d1@, and --   @e2@ is the trace for @d2@, then @e1 \`mappend\` e2@ --   is the trace for @d1 \`atop\` d2@.-deriving instance Ord (Scalar v) => Semigroup (Trace v) --- | The identity for the 'Monoid' instance is the constantly infinite---   trace.-deriving instance Ord (Scalar v) => Monoid (Trace v)+deriving instance (Ord (Scalar v)) => Semigroup (Trace v) +deriving instance (Ord (Scalar v)) => Monoid (Trace v)+ type instance V (Trace v) = v  instance (VectorSpace v) => HasOrigin (Trace v) where-  moveOriginTo (P u) = unwrapping Trace %~ \f p -> f (p .+^ u)+  moveOriginTo (P u) = (_Wrapping' Trace) %~ \f p -> f (p .+^ u)  instance Show (Trace v) where   show _ = "<trace>"@@ -113,7 +172,7 @@ ------------------------------------------------------------  instance HasLinearMap v => Transformable (Trace v) where-  transform t = unwrapped %~ \f p v -> f (papply (inv t) p) (apply (inv t) v)+  transform t = _Wrapped' %~ \f p v -> f (papply (inv t) p) (apply (inv t) v)  ------------------------------------------------------------ --  Traced class  ------------------------------------------@@ -129,17 +188,16 @@   getTrace = id  -- | The trace of a single point is the empty trace, /i.e./ the one---   which returns positive infinity for every query.  Arguably it---   should return a finite distance for vectors aimed directly at the---   given point and infinity for everything else, but due to---   floating-point inaccuracy this is problematic.  Note that the---   envelope for a single point is /not/ the empty envelope (see---   "Diagrams.Core.Envelope").+--   which returns no intersection points for every query.  Arguably+--   it should return a single finite distance for vectors aimed+--   directly at the given point, but due to floating-point inaccuracy+--   this is problematic.  Note that the envelope for a single point+--   is /not/ the empty envelope (see "Diagrams.Core.Envelope"). instance (Ord (Scalar v), VectorSpace v) => Traced (Point v) where   getTrace = const mempty  instance Traced t => Traced (TransInv t) where-  getTrace = getTrace . view unwrapped+  getTrace = getTrace . op TransInv  instance (Traced a, Traced b, V a ~ V b) => Traced (a,b) where   getTrace (x,y) = getTrace x <> getTrace y@@ -157,26 +215,211 @@ --  Computing with traces  --------------------------------- ------------------------------------------------------------ --- | Compute the vector from the given point to the boundary of the---   given object in the given direction, or @Nothing@ if there is no---   intersection.+-- | Compute the vector from the given point @p@ to the \"smallest\"+--   boundary intersection along the given vector @v@.  The+--   \"smallest\" boundary intersection is defined as the one given by+--   @p .+^ (s *^ v)@ for the smallest (most negative) value of+--   @s@. Return @Nothing@ if there is no intersection.  See also+--   'traceP'.+--+--   See also 'rayTraceV' which uses the smallest /positive/+--   intersection, which is often more intuitive behavior.+--+--   <<diagrams/src_Diagrams_Core_Trace_traceVEx.svg#diagram=traceVEx&width=600>> traceV :: Traced a => Point (V a) -> V a -> a -> Maybe (V a)-traceV p v a = case ((getTrace a)^.unwrapping Trace) p v of-                 Finite s -> Just (s *^ v)-                 Infinity -> Nothing+traceV p v a = case getSortedList $ op Trace (getTrace a) p v of+                 (s:_) -> Just (s *^ v)+                 []    -> Nothing --- | Given a base point and direction, compute the closest point on---   the boundary of the given object, or @Nothing@ if there is no---   intersection in the given direction.+-- > traceVEx = mkTraceDiasABC def { drawV = True, sFilter = take 1 }+++-- | Compute the \"smallest\" boundary point along the line determined+--   by the given point @p@ and vector @v@.  The \"smallest\" boundary+--   point is defined as the one given by @p .+^ (s *^ v)@ for+--   the smallest (most negative) value of @s@. Return @Nothing@ if+--   there is no such boundary point.  See also 'traceV'.+--+--   See also 'rayTraceP' which uses the smallest /positive/+--   intersection, which is often more intuitive behavior.+--+--   <<diagrams/src_Diagrams_Core_Trace_tracePEx.svg#diagram=tracePEx&width=600>> traceP :: Traced a => Point (V a) -> V a -> a -> Maybe (Point (V a)) traceP p v a = (p .+^) <$> traceV p v a --- | Like 'traceV', but computes a vector to the *furthest* point on---   the boundary instead of the closest.+-- > tracePEx = mkTraceDiasABC def { sFilter = take 1 }+++-- | Like 'traceV', but computes a vector to the \"largest\" boundary+--   point instead of the smallest. (Note, however, the \"largest\"+--   boundary point may still be in the opposite direction from the+--   given vector, if all the boundary points are, as in the third+--   example shown below.)+--+--   <<diagrams/src_Diagrams_Core_Trace_maxTraceVEx.svg#diagram=maxTraceVEx&width=600>> maxTraceV :: Traced a => Point (V a) -> V a -> a -> Maybe (V a) maxTraceV p = traceV p . negateV --- | Like 'traceP', but computes the *furthest* point on the boundary---   instead of the closest.+-- > maxTraceVEx = mkTraceDiasABC def { drawV = True, sFilter = dropAllBut1 }+++-- | Like 'traceP', but computes the \"largest\" boundary point+--   instead of the smallest. (Note, however, the \"largest\" boundary+--   point may still be in the opposite direction from the given+--   vector, if all the boundary points are.)+--+--   <<diagrams/src_Diagrams_Core_Trace_maxTracePEx.svg#diagram=maxTracePEx&width=600>> maxTraceP :: Traced a => Point (V a) -> V a -> a -> Maybe (Point (V a)) maxTraceP p v a = (p .+^) <$> maxTraceV p v a++-- > maxTracePEx = mkTraceDiasABC def { sFilter = dropAllBut1 }+++-- | Get a modified 'Trace' for an object which only returns positive+--   boundary points, /i.e./ those boundary points given by a positive+--   scalar multiple of the direction vector.  Note, this property+--   will be destroyed if the resulting 'Trace' is translated at all.+getRayTrace :: (Traced a, Num (Scalar (V a))) => a -> Trace (V a)+getRayTrace a = Trace $ \p v -> unsafeOnSortedList (dropWhile (<0)) $ appTrace (getTrace a) p v++-- | Compute the vector from the given point to the closest boundary+--   point of the given object in the given direction, or @Nothing@ if+--   there is no such boundary point (as in the third example+--   below). Note that unlike 'traceV', only /positive/ boundary+--   points are considered, /i.e./ boundary points corresponding to a+--   positive scalar multiple of the direction vector.  This is+--   intuitively the \"usual\" behavior of a raytracer, which only+--   considers intersections \"in front of\" the camera.  Compare the+--   second example diagram below with the second example shown for+--   'traceV'.+--+--   <<diagrams/src_Diagrams_Core_Trace_rayTraceVEx.svg#diagram=rayTraceVEx&width=600>>+rayTraceV :: (Traced a, Num (Scalar (V a)))+           => Point (V a) -> V a -> a -> Maybe (V a)+rayTraceV p v a = case getSortedList $ op Trace (getRayTrace a) p v of+                 (s:_) -> Just (s *^ v)+                 []    -> Nothing++-- > rayTraceVEx = mkTraceDiasABC def { drawV = True, sFilter = take 1 . filter (>0) }+++-- | Compute the boundary point on an object which is closest to the+--   given base point in the given direction, or @Nothing@ if there is+--   no such boundary point. Note that unlike 'traceP', only /positive/+--   boundary points are considered, /i.e./ boundary points+--   corresponding to a positive scalar multiple of the direction+--   vector.  This is intuitively the \"usual\" behavior of a raytracer,+--   which only considers intersection points \"in front of\" the+--   camera.+--+--   <<diagrams/src_Diagrams_Core_Trace_rayTracePEx.svg#diagram=rayTracePEx&width=600>>+rayTraceP :: (Traced a, Num (Scalar (V a)))+           => Point (V a) -> V a -> a -> Maybe (Point (V a))+rayTraceP p v a = (p .+^) <$> rayTraceV p v a++-- > rayTracePEx = mkTraceDiasABC def { sFilter = take 1 . filter (>0) }+++-- | Like 'rayTraceV', but computes a vector to the \"largest\"+--   boundary point instead of the smallest.  Considers only+--   /positive/ boundary points.+--+--   <<diagrams/src_Diagrams_Core_Trace_maxRayTraceVEx.svg#diagram=maxRayTraceVEx&width=600>>+maxRayTraceV :: (Traced a, Num (Scalar (V a)))+              => Point (V a) -> V a -> a -> Maybe (V a)+maxRayTraceV p v a =+  case getSortedList $ op Trace (getRayTrace a) p v of+    [] -> Nothing+    xs -> Just ((last xs) *^ v)++-- > maxRayTraceVEx = mkTraceDiasABC def { drawV = True, sFilter = dropAllBut1 . filter (>0) }+++-- | Like 'rayTraceP', but computes the \"largest\" boundary point+--   instead of the smallest.  Considers only /positive/ boundary+--   points.+--+--   <<diagrams/src_Diagrams_Core_Trace_maxRayTracePEx.svg#diagram=maxRayTracePEx&width=600>>+maxRayTraceP :: (Traced a, Num (Scalar (V a)))+              => Point (V a) -> V a -> a -> Maybe (Point (V a))+maxRayTraceP p v a = (p .+^) <$> maxRayTraceV p v a++-- > maxRayTracePEx = mkTraceDiasABC def { sFilter = dropAllBut1 . filter (>0) }+++------------------------------------------------------------+-- Drawing trace diagrams+------------------------------------------------------------++-- > import Data.Default.Class+-- > import Control.Lens ((^.))+-- > import Data.Maybe (fromMaybe)+-- >+-- > thingyT :: Trail R2+-- > thingyT =+-- >   fromOffsets+-- >     [ 3 *^ unitX, 3 *^ unitY, 2 *^ unit_X, 1 *^ unit_Y+-- >     , 1 *^ unitX, 1 *^ unit_Y, 2 *^ unit_X, 1 *^ unit_Y ]+-- >+-- > thingy = strokeTrail thingyT+-- >+-- > data TraceDiaOpts+-- >   = TDO { traceShape :: Diagram B R2+-- >         , basePt     :: P2+-- >         , dirV       :: R2+-- >         , sFilter    :: [Double] -> [Double]+-- >         , drawV      :: Bool+-- >         }+-- >+-- > instance Default TraceDiaOpts where+-- >   def = TDO { traceShape = thingy+-- >             , basePt     = pointB+-- >             , dirV       = 0.3 ^& 0.5+-- >             , sFilter    = id+-- >             , drawV      = False+-- >             }+-- >+-- > pointA = 1 ^& (-1.5)+-- > pointB = 1 ^& 1.2+-- > pointC = 2.5 ^& 3.5+-- >+-- > dot = circle 0.05 # lw 0+-- >+-- > mkTraceDia :: TraceDiaOpts -> Diagram B R2+-- > mkTraceDia tdo = mconcat+-- >   [ mconcat $ map (place (dot # fc red)) pts+-- >   , if drawV tdo then resultArrow else mempty+-- >   , arrowAt (basePt tdo) (dirV tdo) # lw 0.02 # lc blue+-- >   , dot # fc blue # moveTo (basePt tdo)+-- >   , traceLine (basePt tdo) maxPosPt+-- >   , traceLine (basePt tdo) minNegPt+-- >   , traceShape tdo+-- >   ]+-- >   # centerXY # pad 1.1+-- >   where+-- >     ss  = sFilter tdo . getSortedList+-- >         $ appTrace (traceShape tdo ^. trace) (basePt tdo) (dirV tdo)+-- >     pts = map mkPt ss+-- >     mkPt s = basePt tdo .+^ (s *^ dirV tdo)+-- >     maxPosPt = (mkPt <$>) . safeLast $ filter (>0) ss+-- >     minNegPt = (mkPt <$>) . safeHead $ filter (<0) ss+-- >     minPt = (mkPt <$>) . safeHead $ ss+-- >     resultArrow = fromMaybe mempty (arrowBetween (basePt tdo) <$> minPt)+-- >       # lw 0.03 # lc green+-- >+-- > safeLast [] = Nothing+-- > safeLast xs = Just $ last xs+-- > safeHead [] = Nothing+-- > safeHead (x:_) = Just x+-- > dropAllBut1 [] = []+-- > dropAllBut1 xs = [last xs]+-- >+-- > traceLine _ Nothing = mempty+-- > traceLine p (Just q) = (p ~~ q) # dashing [0.1,0.1] 0+-- >+-- > mkTraceDias :: [TraceDiaOpts] -> Diagram B R2+-- > mkTraceDias = hcat' (with & sep .~ 1) . map mkTraceDia+-- >+-- > mkTraceDiasABC :: TraceDiaOpts -> Diagram B R2+-- > mkTraceDiasABC tdo = mkTraceDias (map (\p -> tdo { basePt = p }) [pointA, pointB, pointC])+
src/Diagrams/Core/Transform.hs view
@@ -6,6 +6,7 @@            , MultiParamTypeClasses            , GeneralizedNewtypeDeriving            , TemplateHaskell+           , TypeFamilies            , TypeSynonymInstances            , ScopedTypeVariables   #-}@@ -39,7 +40,10 @@        , apply        , papply        , fromLinear+       , basis        , onBasis+       , matrixRep+       , determinant           -- * The Transformable class @@ -60,7 +64,7 @@         ) where -import           Control.Lens                 (Wrapped(..), iso)+import           Control.Lens                 (Wrapped(..), Rewrapped, iso) import qualified Data.Map as M import           Data.Semigroup import qualified Data.Set as S@@ -133,6 +137,9 @@ --   inverse transpose.  This is exactly what we need when --   transforming bounding functions, which are defined in terms of --   /perpendicular/ (i.e. normal) hyperplanes.+--+--   For more general, non-invertable transformations, see+--   @Diagrams.Deform@ (in @diagrams-lib@).  data Transformation v = Transformation (v :-: v) (v :-: v) v @@ -183,20 +190,49 @@ fromLinear :: AdditiveGroup v => (v :-: v) -> (v :-: v) -> Transformation v fromLinear l1 l2 = Transformation l1 l2 zeroV +-- | Get the matrix equivalent of the basis of the vector space v as+--   a list of columns.+basis :: forall v. HasLinearMap v => [v]+basis = map basisValue b+  where b = map fst (decompose (zeroV :: v)) -- | Get the matrix equivalent of the linear transform, --   (as a list of columns) and the translation vector.  This --   is mostly useful for implementing backends. onBasis :: forall v. HasLinearMap v => Transformation v -> ([v], v) onBasis t = (vmat, tr)-  where tr :: v-        tr    = transl t-        basis :: [Basis v]-        basis = map fst (decompose tr)-        es :: [v]-        es    = map basisValue basis-        vmat :: [v]-        vmat = map (apply t) es+  where+      tr    = transl t+      vmat = map (apply t) basis +-- Remove the nth element from a list+remove :: Int -> [a] -> [a]+remove n xs = ys ++ (tail zs)+  where+    (ys, zs) = splitAt n xs++-- Minor matrix of cofactore C(i,j)+minor :: Int -> Int -> [[a]] -> [[a]]+minor i j xs = remove j $ map (remove i) xs++-- The determinant of a square matrix represented as a list of lists+-- representing column vectors, that is [column].+det :: Num a => [[a]] -> a+det (a:[]) = head a+det m = sum [(-1)^i * (c1 !! i) * det (minor i 0 m) | i <- [0 .. (n-1)]]+  where+    c1 = head m+    n = length m++-- | Convert a `Transformation v` to a matrix representation as a list of+--   column vectors which are also lists.+matrixRep :: HasLinearMap v => Transformation v -> [[Scalar v]]+matrixRep t = map listRep (fst . onBasis $ t)+  where listRep v = map snd (decompose v)++-- | The determinant of a `Transformation`.+determinant :: (HasLinearMap v, Num (Scalar v)) => Transformation v -> Scalar v+determinant t = det . matrixRep $ t+ ------------------------------------------------------------ --  The Transformable class  ------------------------------- ------------------------------------------------------------@@ -275,8 +311,11 @@ newtype TransInv t = TransInv t   deriving (Eq, Ord, Show, Semigroup, Monoid) -instance Wrapped t t' (TransInv t) (TransInv t')-         where wrapped = iso TransInv (\(TransInv t) -> t)+instance Wrapped (TransInv t) where+    type Unwrapped (TransInv t) = t+    _Wrapped' = iso (\(TransInv t) -> t) TransInv++instance Rewrapped (TransInv t) (TransInv t')  type instance V (TransInv t) = V t 
src/Diagrams/Core/Types.hs view
@@ -45,7 +45,14 @@          -- * Diagrams           -- ** Annotations-         UpAnnots, DownAnnots, transfToAnnot, transfFromAnnot++         -- *** Static annotations+         Annotation(Href)+       , applyAnnotation, href++         -- *** Dynamic (monoidal) annotations+       , UpAnnots, DownAnnots, transfToAnnot, transfFromAnnot+          -- ** Basic type definitions        , QDiaLeaf(..), withQDiaLeaf        , QDiagram(..), Diagram@@ -118,8 +125,9 @@        ) where  import           Control.Arrow             (first, second, (***))-import           Control.Lens              (Lens', Wrapped (..), iso, lens,-                                            over, unwrapped, view, (^.))+import           Control.Lens              (Lens', Rewrapped, Wrapped (..), iso,+                                            lens, over, view, (^.), _Wrapped,+                                            _Wrapping) import           Control.Monad             (mplus) import           Data.AffineSpace          ((.-.)) import           Data.List                 (isSuffixOf)@@ -230,21 +238,39 @@ withQDiaLeaf f _ (PrimLeaf p)    = f p withQDiaLeaf _ g (DelayedLeaf d) = g d +-- | Static annotations which can be placed at a particular node of a+--   diagram tree.+data Annotation+  = Href String    -- ^ Hyperlink+  deriving Show++-- | Apply a static annotation at the root of a diagram.+applyAnnotation+  :: (HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Semigroup m)+  => Annotation -> QDiagram b v m -> QDiagram b v m+applyAnnotation an (QD dt) = QD (D.annot an dt)++-- | Make a diagram into a hyperlink.  Note that only some backends+--   will honor hyperlink annotations.+href :: (HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Semigroup m) => String -> QDiagram b v m -> QDiagram b v m+href = applyAnnotation . Href+ -- | The fundamental diagram type is represented by trees of --   primitives with various monoidal annotations.  The @Q@ in --   @QDiagram@ stands for \"Queriable\", as distinguished from --   'Diagram', a synonym for @QDiagram@ with the query type --   specialized to 'Any'. newtype QDiagram b v m-  = QD (D.DUALTree (DownAnnots v) (UpAnnots b v m) () (QDiaLeaf b v m))+  = QD (D.DUALTree (DownAnnots v) (UpAnnots b v m) Annotation (QDiaLeaf b v m))   deriving (Typeable) -instance Wrapped-         (D.DUALTree (DownAnnots v) (UpAnnots b v m) () (QDiaLeaf b v m))-         (D.DUALTree (DownAnnots v') (UpAnnots b' v' m') () (QDiaLeaf b' v' m'))-         (QDiagram b v m) (QDiagram b' v' m')-         where wrapped = iso QD (\(QD d) -> d)+instance Wrapped (QDiagram b v m) where+    type Unwrapped (QDiagram b v m) =+        D.DUALTree (DownAnnots v) (UpAnnots b v m) Annotation (QDiaLeaf b v m)+    _Wrapped' = iso (\(QD d) -> d) QD +instance Rewrapped (QDiagram b v m) (QDiagram b' v' m')+ type instance V (QDiagram b v m) = v  -- | The default sort of diagram is one where querying at a point@@ -266,7 +292,7 @@       => QDiagram b v m -> [(Prim b v, (Split (Transformation v), Style v))] prims = concatMap processLeaf       . D.flatten-      . view unwrapped+      . view _Wrapped'   where     processLeaf (PrimLeaf p, (trSty,_)) = [(p, untangle . option mempty id $ trSty)]     processLeaf (DelayedLeaf k, d)      = prims (k d)@@ -280,14 +306,14 @@ envelope :: forall b v m. (OrderedField (Scalar v), InnerSpace v                           , HasLinearMap v, Monoid' m)          => Lens' (QDiagram b v m) (Envelope v)-envelope = lens (unDelete . getU' . view unwrapped) (flip setEnvelope)+envelope = lens (unDelete . getU' . view _Wrapped') (flip setEnvelope)  -- | Replace the envelope of a diagram. setEnvelope :: forall b v m. (OrderedField (Scalar v), InnerSpace v                              , HasLinearMap v, Monoid' m)           => Envelope v -> QDiagram b v m -> QDiagram b v m setEnvelope e =-    over unwrapped ( D.applyUpre (inj . toDeletable $ e)+    over _Wrapped' ( D.applyUpre (inj . toDeletable $ e)                 . D.applyUpre (inj (deleteL :: Deletable (Envelope v)))                 . D.applyUpost (inj (deleteR :: Deletable (Envelope v)))               )@@ -295,13 +321,13 @@ -- | Get the trace of a diagram. trace :: (InnerSpace v, HasLinearMap v, OrderedField (Scalar v), Semigroup m) =>          Lens' (QDiagram b v m) (Trace v)-trace = lens (unDelete . getU' . view unwrapped) (flip setTrace)+trace = lens (unDelete . getU' . view _Wrapped') (flip setTrace)  -- | Replace the trace of a diagram. setTrace :: forall b v m. (OrderedField (Scalar v), InnerSpace v                           , HasLinearMap v, Semigroup m)          => Trace v -> QDiagram b v m -> QDiagram b v m-setTrace t = over unwrapped ( D.applyUpre (inj . toDeletable $ t)+setTrace t = over _Wrapped' ( D.applyUpre (inj . toDeletable $ t)                          . D.applyUpre (inj (deleteL :: Deletable (Trace v)))                          . D.applyUpost (inj (deleteR :: Deletable (Trace v)))                        )@@ -310,22 +336,26 @@ --   subdiagrams) of a diagram. subMap :: (HasLinearMap v, InnerSpace v, Semigroup m, OrderedField (Scalar v)) =>           Lens' (QDiagram b v m) (SubMap b v m)-subMap = lens (unDelete . getU' . view unwrapped) (flip setMap) where+subMap = lens (unDelete . getU' . view _Wrapped') (flip setMap) where   setMap :: (HasLinearMap v, InnerSpace v, Semigroup m, OrderedField (Scalar v)) =>             SubMap b v m -> QDiagram b v m -> QDiagram b v m-  setMap m = over unwrapped ( D.applyUpre . inj . toDeletable $ m)+  setMap m = over _Wrapped' ( D.applyUpre . inj . toDeletable $ m)  -- | Get a list of names of subdiagrams and their locations. names :: (HasLinearMap v, InnerSpace v, Semigroup m, OrderedField (Scalar v))          => QDiagram b v m -> [(Name, [Point v])]-names = (map . second . map) location . M.assocs . view (subMap . unwrapped)+names = (map . second . map) location . M.assocs . view (subMap . _Wrapped')  -- | Attach an atomic name to a certain subdiagram, computed from the---   given diagram.+--   given diagram /with the mapping from name to subdiagram+--   included/.  The upshot of this knot-tying is that if @d' = d #+--   named x@, then @lookupName x d' == Just d'@ (instead of @Just+--   d@). nameSub :: ( IsName n            , HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Semigroup m)         => (QDiagram b v m -> Subdiagram b v m) -> n -> QDiagram b v m -> QDiagram b v m-nameSub s n d = over unwrapped (D.applyUpre . inj . toDeletable $ fromNames [(n,s d)]) d+nameSub s n d = d'+  where d' = over _Wrapped' (D.applyUpre . inj . toDeletable $ fromNames [(n,s d')]) d  -- | Lookup the most recent diagram associated with (some --   qualification of) the given name.@@ -374,14 +404,14 @@                           , OrderedField (Scalar v), Semigroup m                           )          => QDiagram b v m -> QDiagram b v m-localize = over unwrapped ( D.applyUpre  (inj (deleteL :: Deletable (SubMap b v m)))+localize = over _Wrapped' ( D.applyUpre  (inj (deleteL :: Deletable (SubMap b v m)))                    . D.applyUpost (inj (deleteR :: Deletable (SubMap b v m)))                    )   -- | Get the query function associated with a diagram. query :: Monoid m => QDiagram b v m -> Query v m-query = getU' . view unwrapped+query = getU' . view _Wrapped'  -- | Sample a diagram's query function at a given point. sample :: Monoid m => QDiagram b v m -> Point v -> m@@ -460,7 +490,7 @@ ---- Functor  instance Functor (QDiagram b v) where-  fmap f = over unwrapped+  fmap f = over (_Wrapping QD)            ( (D.mapU . second . second)              ( (first . fmap . fmap . fmap)   f              . (second . first . fmap . fmap) f@@ -489,7 +519,7 @@  instance (HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Semigroup m)       => HasStyle (QDiagram b v m) where-  applyStyle = over unwrapped . D.applyD . inj+  applyStyle = over _Wrapped' . D.applyD . inj              . (inR :: Style v -> Split (Transformation v) :+: Style v)  -- | By default, diagram attributes are not affected by@@ -511,7 +541,7 @@ freeze :: forall v b m. (HasLinearMap v, InnerSpace v                         , OrderedField (Scalar v), Semigroup m)        => QDiagram b v m -> QDiagram b v m-freeze = over unwrapped . D.applyD . inj+freeze = over _Wrapped' . D.applyD . inj        . (inL :: Split (Transformation v) -> Split (Transformation v) :+: Style v)        $ split @@ -549,7 +579,7 @@ --   components appropriately. instance (HasLinearMap v, OrderedField (Scalar v), InnerSpace v, Semigroup m)       => Transformable (QDiagram b v m) where-  transform = over unwrapped . D.applyD . transfToAnnot+  transform = over _Wrapped' . D.applyD . transfToAnnot  ---- Qualifiable @@ -557,7 +587,7 @@ --   now be referred to using the qualification prefix. instance (HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Semigroup m)       => Qualifiable (QDiagram b v m) where-  (|>) = over unwrapped . D.applyD . inj . toName+  (|>) = over _Wrapped' . D.applyD . inj . toName   ------------------------------------------------------------@@ -626,7 +656,7 @@           , Semigroup m           )        => Subdiagram b v m -> QDiagram b v m-getSub (Subdiagram d a) = over unwrapped (D.applyD a) d+getSub (Subdiagram d a) = over _Wrapped' (D.applyD a) d  -- | Extract the \"raw\" content of a subdiagram, by throwing away the --   context.@@ -642,12 +672,12 @@ newtype SubMap b v m = SubMap (M.Map Name [Subdiagram b v m])   -- See Note [SubMap Set vs list] -instance Wrapped-         (M.Map Name [Subdiagram b v m])-         (M.Map Name [Subdiagram b v m'])-         (SubMap b v m) (SubMap b v m')-         where wrapped = iso SubMap (\(SubMap m) -> m)+instance Wrapped (SubMap b v m) where+    type Unwrapped (SubMap b v m) = M.Map Name [Subdiagram b v m]+    _Wrapped' = iso (\(SubMap m) -> m) SubMap +instance Rewrapped (SubMap b v m) (SubMap b' v' m')+ -- ~~~~ [SubMap Set vs list] -- In some sense it would be nicer to use -- Sets instead of a list, but then we would have to put Ord@@ -656,7 +686,7 @@ type instance V (SubMap b v m) = v  instance Functor (SubMap b v) where-  fmap = over unwrapped . fmap . map . fmap+  fmap = over _Wrapped . fmap . map . fmap  instance Semigroup (SubMap b v m) where   SubMap s1 <> SubMap s2 = SubMap $ M.unionWith (++) s1 s2@@ -672,11 +702,11 @@  instance (OrderedField (Scalar v), InnerSpace v, HasLinearMap v)       => HasOrigin (SubMap b v m) where-  moveOriginTo = over unwrapped . moveOriginTo+  moveOriginTo = over _Wrapped' . moveOriginTo  instance (InnerSpace v, Floating (Scalar v), HasLinearMap v)   => Transformable (SubMap b v m) where-  transform = over unwrapped . transform+  transform = over _Wrapped' . transform  -- | 'SubMap's are qualifiable: if @ns@ is a 'SubMap', then @a |> --   ns@ is the same 'SubMap' except with every name qualified by@@ -691,7 +721,7 @@  -- | Add a name/diagram association to a submap. rememberAs :: IsName a => a -> QDiagram b v m -> SubMap b v m -> SubMap b v m-rememberAs n b = over unwrapped $ M.insertWith (++) (toName n) [mkSubdiagram b]+rememberAs n b = over _Wrapped' $ M.insertWith (++) (toName n) [mkSubdiagram b]  -- | A name acts on a name map by qualifying every name in it. instance Action Name (SubMap b v m) where@@ -742,7 +772,7 @@ -- | A value of type @Prim b v@ is an opaque (existentially quantified) --   primitive which backend @b@ knows how to render in vector space @v@. data Prim b v where-  Prim :: (IsPrim p, Renderable p b) => p -> Prim b (V p)+  Prim :: (IsPrim p, Typeable p, Renderable p b) => p -> Prim b (V p)  type instance V (Prim b v) = v @@ -761,6 +791,7 @@  -- | The null primitive. data NullPrim v = NullPrim+  deriving Typeable  type instance (V (NullPrim v)) = v @@ -774,7 +805,7 @@  -- | The null primitive, which every backend can render by doing --   nothing.-nullPrim :: (HasLinearMap v, Monoid (Render b v)) => Prim b v+nullPrim :: (HasLinearMap v, Typeable v, Monoid (Render b v)) => Prim b v nullPrim = Prim NullPrim  ------------------------------------------------------------@@ -814,7 +845,7 @@                     --   in the context of an arbitrary                     --   transformation; such backends can instead use                     --   the 'avgScale' function from-                    --   "Diagrams.TwoD.Transform" (from the+                    --   @Diagrams.TwoD.Transform@ (from the                     --   @diagrams-lib@ package).                   | RAnnot a                   | RPrim (Transformation v) (Prim b v)@@ -864,7 +895,7 @@                     --   support stroking in the context of an                     --   arbitrary transformation; such backends can                     --   instead use the 'avgScale' function from-                    --   "Diagrams.TwoD.Transform" (from the+                    --   @Diagrams.TwoD.Transform@ (from the                     --   @diagrams-lib@ package).                  -> Render b v -- ^ Rendering operation to run                  -> Render b v -- ^ Rendering operation using the style locally@@ -922,18 +953,19 @@ --   For example, here is the error we get if we try to compute the --   width of an image (this example requires @diagrams-lib@): -----   > ghci> width (image "foo.png" 200 200)---   >---   > <interactive>:8:8:---   >     No instance for (Renderable Diagrams.TwoD.Image.Image b0)---   >       arising from a use of `image'---   >     Possible fix:---   >       add an instance declaration for---   >       (Renderable Diagrams.TwoD.Image.Image b0)---   >     In the first argument of `width', namely---   >       `(image "foo.png" 200 200)'---   >     In the expression: width (image "foo.png" 200 200)---   >     In an equation for `it': it = width (image "foo.png" 200 200)+--   @+--   ghci> width (image \"foo.png\" 200 200)+--   \<interactive\>:8:8:+--       No instance for (Renderable Diagrams.TwoD.Image.Image b0)+--         arising from a use of `image'+--       Possible fix:+--         add an instance declaration for+--         (Renderable Diagrams.TwoD.Image.Image b0)+--       In the first argument of `width', namely+--         `(image \"foo.png\" 200 200)'+--       In the expression: width (image \"foo.png\" 200 200)+--       In an equation for `it': it = width (image \"foo.png\" 200 200)+--   @ -- --   GHC complains that there is no instance for @Renderable Image --   b0@; what is really going on is that it does not have enough@@ -946,20 +978,23 @@ --   The solution is to annotate the call to 'image' with the type --   @'D' 'R2'@, like so: -----   > ghci> width (image "foo.png" 200 200 :: D R2)---   > 200.00000000000006+--   @+--   ghci> width (image \"foo.png\" 200 200 :: D R2)+--   200.00000000000006+--   @ -- --   (It turns out the width wasn't 200 after all...) -- --   As another example, here is the error we get if we try to compute --   the width of a radius-1 circle: -----   > ghci> width (circle 1)---   >---   > <interactive>:4:1:---   >     Couldn't match type `V a0' with `R2'---   >     In the expression: width (circle 1)---   >     In an equation for `it': it = width (circle 1)+--   @+--   ghci> width (circle 1)+--   \<interactive\>:4:1:+--       Couldn't match type `V a0' with `R2'+--       In the expression: width (circle 1)+--       In an equation for `it': it = width (circle 1)+--   @ -- --   There's even more ambiguity here.  Whereas 'image' always returns --   a 'Diagram', the 'circle' function can produce any 'PathLike'@@ -967,8 +1002,10 @@ --   so GHC has no idea what type to pick to go in the middle. --   However, the solution is the same: -----  > ghci> width (circle 1 :: D R2)---  > 1.9999999999999998+--   @+--   ghci> width (circle 1 :: D R2)+--   1.9999999999999998+--   @  type D v = Diagram NullBackend v