module Data.Geometry.PlanarSubdivision.Draw where

import           Control.Lens
import           Data.Ext
import           Data.Geometry.Ipe
import           Data.Geometry.LineSegment
import           Data.Geometry.PlanarSubdivision
import           Data.Geometry.Polygon
import           Data.Maybe (mapMaybe)
import qualified Data.Vector as V


drawColoredPlanarSubdivision  ::  IpeOut (PlanarSubdivision s v e (Maybe (IpeColor r)) r)
                                          Group r
drawColoredPlanarSubdivision :: IpeOut (PlanarSubdivision s v e (Maybe (IpeColor r)) r) Group r
drawColoredPlanarSubdivision PlanarSubdivision s v e (Maybe (IpeColor r)) r
ps = IpeOut
  (PlanarSubdivision
     s
     (Maybe (IpeAttributes IpeSymbol r))
     (Maybe (IpeAttributes Path r))
     (Maybe (IpeAttributes Path r))
     r)
  Group
  r
forall k (s :: k) r.
IpeOut
  (PlanarSubdivision
     s
     (Maybe (IpeAttributes IpeSymbol r))
     (Maybe (IpeAttributes Path r))
     (Maybe (IpeAttributes Path r))
     r)
  Group
  r
drawPlanarSubdivision
    (PlanarSubdivision s v e (Maybe (IpeColor r)) r
psPlanarSubdivision s v e (Maybe (IpeColor r)) r
-> (PlanarSubdivision s v e (Maybe (IpeColor r)) r
    -> PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         e
         (Maybe (IpeColor r))
         r)
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     (Maybe (IpeColor r))
     r
forall a b. a -> (a -> b) -> b
&(Vector v
 -> Identity
      (Vector
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))))
-> PlanarSubdivision s v e (Maybe (IpeColor r)) r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        e
        (Maybe (IpeColor r))
        r)
forall k (s :: k) v e f r v'.
Lens
  (PlanarSubdivision s v e f r)
  (PlanarSubdivision s v' e f r)
  (Vector v)
  (Vector v')
vertexData((Vector v
  -> Identity
       (Vector
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                   'Size]))))
 -> PlanarSubdivision s v e (Maybe (IpeColor r)) r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         e
         (Maybe (IpeColor r))
         r))
-> ((v
     -> Identity
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                   'Size])))
    -> Vector v
    -> Identity
         (Vector
            (Maybe
               (Attributes'
                  r
                  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                     'Size]))))
-> (v
    -> Identity
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size])))
-> PlanarSubdivision s v e (Maybe (IpeColor r)) r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        e
        (Maybe (IpeColor r))
        r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(v
 -> Identity
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size])))
-> Vector v
-> Identity
     (Vector
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size])))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse  ((v
  -> Identity
       (Maybe
          (Attributes'
             r
             '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                'Size])))
 -> PlanarSubdivision s v e (Maybe (IpeColor r)) r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         e
         (Maybe (IpeColor r))
         r))
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size])
-> PlanarSubdivision s v e (Maybe (IpeColor r)) r
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     (Maybe (IpeColor r))
     r
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
     'Size]
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size])
forall a. a -> Maybe a
Just Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
     'Size]
forall a. Monoid a => a
mempty
       PlanarSubdivision
  s
  (Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size]))
  e
  (Maybe (IpeColor r))
  r
-> (PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      e
      (Maybe (IpeColor r))
      r
    -> PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe (IpeColor r))
         r)
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe (IpeColor r))
     r
forall a b. a -> (a -> b) -> b
&(Vector (Dart s, e)
 -> Identity
      (Vector
         (Dart s,
          Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     (Maybe (IpeColor r))
     r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        (Maybe (IpeColor r))
        r)
forall k (s :: k) v e f r e'.
Lens
  (PlanarSubdivision s v e f r)
  (PlanarSubdivision s v e' f r)
  (Vector (Dart s, e))
  (Vector (Dart s, e'))
dartData((Vector (Dart s, e)
  -> Identity
       (Vector
          (Dart s,
           Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient]))))
 -> PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      e
      (Maybe (IpeColor r))
      r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe (IpeColor r))
         r))
-> ((e
     -> Identity
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient])))
    -> Vector (Dart s, e)
    -> Identity
         (Vector
            (Dart s,
             Maybe
               (Attributes'
                  r
                  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                     'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                     'Tiling, 'Gradient]))))
-> (e
    -> Identity
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient])))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     (Maybe (IpeColor r))
     r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        (Maybe (IpeColor r))
        r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.((Dart s, e)
 -> Identity
      (Dart s,
       Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient])))
-> Vector (Dart s, e)
-> Identity
     (Vector
        (Dart s,
         Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient])))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse(((Dart s, e)
  -> Identity
       (Dart s,
        Maybe
          (Attributes'
             r
             '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                'Tiling, 'Gradient])))
 -> Vector (Dart s, e)
 -> Identity
      (Vector
         (Dart s,
          Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))))
-> ((e
     -> Identity
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient])))
    -> (Dart s, e)
    -> Identity
         (Dart s,
          Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient])))
-> (e
    -> Identity
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient])))
-> Vector (Dart s, e)
-> Identity
     (Vector
        (Dart s,
         Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient])))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(e
 -> Identity
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient])))
-> (Dart s, e)
-> Identity
     (Dart s,
      Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
forall s t a b. Field2 s t a b => Lens s t a b
_2 ((e
  -> Identity
       (Maybe
          (Attributes'
             r
             '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                'Tiling, 'Gradient])))
 -> PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      e
      (Maybe (IpeColor r))
      r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe (IpeColor r))
         r))
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient])
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     (Maybe (IpeColor r))
     r
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe (IpeColor r))
     r
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
     'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
     'Tiling, 'Gradient]
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient])
forall a. a -> Maybe a
Just Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
     'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
     'Tiling, 'Gradient]
forall a. Monoid a => a
mempty
       PlanarSubdivision
  s
  (Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size]))
  (Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient]))
  (Maybe (IpeColor r))
  r
-> (PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient]))
      (Maybe (IpeColor r))
      r
    -> PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         r)
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     r
forall a b. a -> (a -> b) -> b
&(Vector (Maybe (IpeColor r))
 -> Identity
      (Vector
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe (IpeColor r))
     r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        r)
forall k (s :: k) v e f r f'.
Lens
  (PlanarSubdivision s v e f r)
  (PlanarSubdivision s v e f' r)
  (Vector f)
  (Vector f')
faceData((Vector (Maybe (IpeColor r))
  -> Identity
       (Vector
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient]))))
 -> PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient]))
      (Maybe (IpeColor r))
      r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         r))
-> ((Maybe (IpeColor r)
     -> Identity
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient])))
    -> Vector (Maybe (IpeColor r))
    -> Identity
         (Vector
            (Maybe
               (Attributes'
                  r
                  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                     'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                     'Tiling, 'Gradient]))))
-> (Maybe (IpeColor r)
    -> Identity
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient])))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe (IpeColor r))
     r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Maybe (IpeColor r)
 -> Identity
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient])))
-> Vector (Maybe (IpeColor r))
-> Identity
     (Vector
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient])))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse    ((Maybe (IpeColor r)
  -> Identity
       (Maybe
          (Attributes'
             r
             '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                'Tiling, 'Gradient])))
 -> PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient]))
      (Maybe (IpeColor r))
      r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         r))
-> (Maybe (IpeColor r)
    -> Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient]))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe (IpeColor r))
     r
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     r
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (IpeColor r
 -> Attributes'
      r
      '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
         'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
         'Tiling, 'Gradient])
-> Maybe (IpeColor r)
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (SAttributeUniverse 'Fill
-> Apply (AttrMapSym1 r) 'Fill
-> Attributes'
     r
     '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
        'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
        'Tiling, 'Gradient]
forall u (at :: u) (ats :: [u]) (proxy :: u -> *) (f :: u ~> *).
(at ∈ ats, RecApplicative ats) =>
proxy at -> Apply f at -> Attributes f ats
attr SAttributeUniverse 'Fill
SFill)
    )

-- | Draws only the values for which we have a Just attribute
drawPlanarSubdivision :: forall s r.
                         IpeOut (PlanarSubdivision s (Maybe (IpeAttributes IpeSymbol r))
                                                     (Maybe (IpeAttributes Path      r))
                                                     (Maybe (IpeAttributes Path      r))
                                r) Group r
drawPlanarSubdivision :: IpeOut
  (PlanarSubdivision
     s
     (Maybe (IpeAttributes IpeSymbol r))
     (Maybe (IpeAttributes Path r))
     (Maybe (IpeAttributes Path r))
     r)
  Group
  r
drawPlanarSubdivision = MIO
  (VertexId' s,
   VertexData
     r
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size])))
  IpeSymbol
  r
-> MIO
     (Dart s,
      LineSegment
        2
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        r
      :+ Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
     Path
     r
-> MIO
     (FaceId' s,
      SomePolygon
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        r
      :+ Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
     Path
     r
-> IpeOut
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        r)
     Group
     r
forall k (vi :: * -> *) (ei :: * -> *) (fi :: * -> *) (s :: k) r v
       e f.
(ToObject vi, ToObject ei, ToObject fi) =>
MIO (VertexId' s, VertexData r v) vi r
-> MIO (Dart s, LineSegment 2 v r :+ e) ei r
-> MIO (FaceId' s, SomePolygon v r :+ f) fi r
-> IpeOut (PlanarSubdivision s v e f r) Group r
drawPlanarSubdivisionWith MIO
  (VertexId' s,
   VertexData
     r
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size])))
  IpeSymbol
  r
(VertexId' s, VertexData r (Maybe (IpeAttributes IpeSymbol r)))
-> Maybe (IpeObject' IpeSymbol r)
fv MIO
  (Dart s,
   LineSegment
     2
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     r
   :+ Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
  Path
  r
forall (f :: * -> *) g a.
(Functor f, HasDefaultIpeOut g) =>
(a,
 g :+ f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))))
-> f (DefaultIpeOut g (NumType g)
      :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
fe MIO
  (FaceId' s,
   SomePolygon
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     r
   :+ Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
  Path
  r
forall (f :: * -> *) g a.
(Functor f, HasDefaultIpeOut g) =>
(a,
 g :+ f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))))
-> f (DefaultIpeOut g (NumType g)
      :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
ff
  where
    fv                     :: (VertexId' s, VertexData r (Maybe (IpeAttributes IpeSymbol r)))
                           -> Maybe (IpeObject' IpeSymbol r)
    fv :: (VertexId' s, VertexData r (Maybe (IpeAttributes IpeSymbol r)))
-> Maybe (IpeObject' IpeSymbol r)
fv (VertexId' s
_,VertexData Point 2 r
p Maybe (IpeAttributes IpeSymbol r)
ma) = (\Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
     'Size]
a -> IpeOut
  (Point 2 r) (DefaultIpeOut (Point 2 r)) (NumType (Point 2 r))
forall g.
HasDefaultIpeOut g =>
IpeOut g (DefaultIpeOut g) (NumType g)
defIO Point 2 r
p IpeObject' IpeSymbol r
-> IpeAttributes IpeSymbol r -> IpeObject' IpeSymbol r
forall (i :: * -> *) r.
IpeObject' i r -> IpeAttributes i r -> IpeObject' i r
! Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
     'Size]
IpeAttributes IpeSymbol r
a) (Attributes'
   r
   '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
      'Size]
 -> IpeSymbol r
    :+ Attributes'
         r
         '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
            'Size])
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size])
-> Maybe
     (IpeSymbol r
      :+ Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe
  (Attributes'
     r
     '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
        'Size])
Maybe (IpeAttributes IpeSymbol r)
ma -- draws a point
    fe :: (a,
 g :+ f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))))
-> f (DefaultIpeOut g (NumType g)
      :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
fe (a
_,g
s :+ f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
ma)         = (\Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
a -> IpeOut g (DefaultIpeOut g) (NumType g)
forall g.
HasDefaultIpeOut g =>
IpeOut g (DefaultIpeOut g) (NumType g)
defIO g
s (DefaultIpeOut g (NumType g)
 :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
-> Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
-> DefaultIpeOut g (NumType g)
   :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
forall (i :: * -> *) r.
IpeObject' i r -> IpeAttributes i r -> IpeObject' i r
! Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
a) (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
 -> DefaultIpeOut g (NumType g)
    :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
-> f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
-> f (DefaultIpeOut g (NumType g)
      :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
ma -- draw segment
    ff :: (a,
 g :+ f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))))
-> f (DefaultIpeOut g (NumType g)
      :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
ff (a
_,g
f :+ f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
ma)         = (\Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
a -> IpeOut g (DefaultIpeOut g) (NumType g)
forall g.
HasDefaultIpeOut g =>
IpeOut g (DefaultIpeOut g) (NumType g)
defIO g
f (DefaultIpeOut g (NumType g)
 :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
-> Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
-> DefaultIpeOut g (NumType g)
   :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
forall (i :: * -> *) r.
IpeObject' i r -> IpeAttributes i r -> IpeObject' i r
! Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
a) (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g))
 -> DefaultIpeOut g (NumType g)
    :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
-> f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
-> f (DefaultIpeOut g (NumType g)
      :+ Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (Attributes' (NumType g) (AttributesOf (DefaultIpeOut g)))
ma -- draw a face


-- | Draw everything using the defaults
drawPlanarSubdivision'    :: forall s v e f r. IpeOut (PlanarSubdivision s v e f r) Group r
drawPlanarSubdivision' :: IpeOut (PlanarSubdivision s v e f r) Group r
drawPlanarSubdivision' PlanarSubdivision s v e f r
ps = IpeOut
  (PlanarSubdivision
     s
     (Maybe (IpeAttributes IpeSymbol r))
     (Maybe (IpeAttributes Path r))
     (Maybe (IpeAttributes Path r))
     r)
  Group
  r
forall k (s :: k) r.
IpeOut
  (PlanarSubdivision
     s
     (Maybe (IpeAttributes IpeSymbol r))
     (Maybe (IpeAttributes Path r))
     (Maybe (IpeAttributes Path r))
     r)
  Group
  r
drawPlanarSubdivision
  (PlanarSubdivision s v e f r
psPlanarSubdivision s v e f r
-> (PlanarSubdivision s v e f r
    -> PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         e
         f
         r)
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     f
     r
forall a b. a -> (a -> b) -> b
&(Vector v
 -> Identity
      (Vector
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))))
-> PlanarSubdivision s v e f r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        e
        f
        r)
forall k (s :: k) v e f r v'.
Lens
  (PlanarSubdivision s v e f r)
  (PlanarSubdivision s v' e f r)
  (Vector v)
  (Vector v')
vertexData((Vector v
  -> Identity
       (Vector
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                   'Size]))))
 -> PlanarSubdivision s v e f r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         e
         f
         r))
-> ((v
     -> Identity
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                   'Size])))
    -> Vector v
    -> Identity
         (Vector
            (Maybe
               (Attributes'
                  r
                  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                     'Size]))))
-> (v
    -> Identity
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size])))
-> PlanarSubdivision s v e f r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        e
        f
        r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(v
 -> Identity
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size])))
-> Vector v
-> Identity
     (Vector
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size])))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse   ((v
  -> Identity
       (Maybe
          (Attributes'
             r
             '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                'Size])))
 -> PlanarSubdivision s v e f r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         e
         f
         r))
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size])
-> PlanarSubdivision s v e f r
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     f
     r
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
     'Size]
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size])
forall a. a -> Maybe a
Just (IpeAttributes IpeSymbol r
forall a. Monoid a => a
mempty :: IpeAttributes IpeSymbol r)
     PlanarSubdivision
  s
  (Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size]))
  e
  f
  r
-> (PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      e
      f
      r
    -> PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         f
         r)
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     f
     r
forall a b. a -> (a -> b) -> b
&(Vector (Dart s, e)
 -> Identity
      (Vector
         (Dart s,
          Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     f
     r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        f
        r)
forall k (s :: k) v e f r e'.
Lens
  (PlanarSubdivision s v e f r)
  (PlanarSubdivision s v e' f r)
  (Vector (Dart s, e))
  (Vector (Dart s, e'))
dartData((Vector (Dart s, e)
  -> Identity
       (Vector
          (Dart s,
           Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient]))))
 -> PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      e
      f
      r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         f
         r))
-> ((e
     -> Identity
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient])))
    -> Vector (Dart s, e)
    -> Identity
         (Vector
            (Dart s,
             Maybe
               (Attributes'
                  r
                  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                     'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                     'Tiling, 'Gradient]))))
-> (e
    -> Identity
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient])))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     f
     r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        f
        r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.((Dart s, e)
 -> Identity
      (Dart s,
       Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient])))
-> Vector (Dart s, e)
-> Identity
     (Vector
        (Dart s,
         Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient])))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse(((Dart s, e)
  -> Identity
       (Dart s,
        Maybe
          (Attributes'
             r
             '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                'Tiling, 'Gradient])))
 -> Vector (Dart s, e)
 -> Identity
      (Vector
         (Dart s,
          Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))))
-> ((e
     -> Identity
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient])))
    -> (Dart s, e)
    -> Identity
         (Dart s,
          Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient])))
-> (e
    -> Identity
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient])))
-> Vector (Dart s, e)
-> Identity
     (Vector
        (Dart s,
         Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient])))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(e
 -> Identity
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient])))
-> (Dart s, e)
-> Identity
     (Dart s,
      Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
forall s t a b. Field2 s t a b => Lens s t a b
_2  ((e
  -> Identity
       (Maybe
          (Attributes'
             r
             '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                'Tiling, 'Gradient])))
 -> PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      e
      f
      r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         f
         r))
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient])
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     e
     f
     r
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     f
     r
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
     'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
     'Tiling, 'Gradient]
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient])
forall a. a -> Maybe a
Just (IpeAttributes Path r
forall a. Monoid a => a
mempty :: IpeAttributes Path      r)
     PlanarSubdivision
  s
  (Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
           'Size]))
  (Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient]))
  f
  r
-> (PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient]))
      f
      r
    -> PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         r)
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     r
forall a b. a -> (a -> b) -> b
&(Vector f
 -> Identity
      (Vector
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     f
     r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        r)
forall k (s :: k) v e f r f'.
Lens
  (PlanarSubdivision s v e f r)
  (PlanarSubdivision s v e f' r)
  (Vector f)
  (Vector f')
faceData((Vector f
  -> Identity
       (Vector
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient]))))
 -> PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient]))
      f
      r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         r))
-> ((f
     -> Identity
          (Maybe
             (Attributes'
                r
                '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                   'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                   'Tiling, 'Gradient])))
    -> Vector f
    -> Identity
         (Vector
            (Maybe
               (Attributes'
                  r
                  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                     'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                     'Tiling, 'Gradient]))))
-> (f
    -> Identity
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient])))
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     f
     r
-> Identity
     (PlanarSubdivision
        s
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                 'Size]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient]))
        r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(f
 -> Identity
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient])))
-> Vector f
-> Identity
     (Vector
        (Maybe
           (Attributes'
              r
              '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                 'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                 'Tiling, 'Gradient])))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse     ((f
  -> Identity
       (Maybe
          (Attributes'
             r
             '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                'Tiling, 'Gradient])))
 -> PlanarSubdivision
      s
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
               'Size]))
      (Maybe
         (Attributes'
            r
            '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
               'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
               'Tiling, 'Gradient]))
      f
      r
 -> Identity
      (PlanarSubdivision
         s
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
                  'Size]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         (Maybe
            (Attributes'
               r
               '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
                  'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
                  'Tiling, 'Gradient]))
         r))
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient])
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     f
     r
-> PlanarSubdivision
     s
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Pen,
              'Size]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     (Maybe
        (Attributes'
           r
           '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
              'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
              'Tiling, 'Gradient]))
     r
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Attributes'
  r
  '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
     'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
     'Tiling, 'Gradient]
-> Maybe
     (Attributes'
        r
        '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Stroke, 'Fill, 'Dash,
           'Pen, 'LineCap, 'LineJoin, 'FillRule, 'Arrow, 'RArrow, 'Opacity,
           'Tiling, 'Gradient])
forall a. a -> Maybe a
Just (IpeAttributes Path r
forall a. Monoid a => a
mempty :: IpeAttributes Path      r))

type MIO g i r = g -> Maybe (IpeObject' i r)

drawPlanarSubdivisionWith            :: (ToObject vi, ToObject ei, ToObject fi)
                                     => MIO (VertexId' s, VertexData r v)          vi r
                                     -> MIO (Dart s,      LineSegment 2 v r :+ e)  ei r
                                     -> MIO (FaceId' s,   SomePolygon v r :+ f)    fi r
                                     -> IpeOut (PlanarSubdivision s v e f r) Group r
drawPlanarSubdivisionWith :: MIO (VertexId' s, VertexData r v) vi r
-> MIO (Dart s, LineSegment 2 v r :+ e) ei r
-> MIO (FaceId' s, SomePolygon v r :+ f) fi r
-> IpeOut (PlanarSubdivision s v e f r) Group r
drawPlanarSubdivisionWith MIO (VertexId' s, VertexData r v) vi r
fv MIO (Dart s, LineSegment 2 v r :+ e) ei r
fe MIO (FaceId' s, SomePolygon v r :+ f) fi r
ff PlanarSubdivision s v e f r
g = [IpeObject r]
-> Group r
   :+ Attributes
        (AttrMapSym1 r) '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Clip]
forall (f :: * -> *) r.
Foldable f =>
IpeOut (f (IpeObject r)) Group r
ipeGroup ([IpeObject r]
 -> Group r
    :+ Attributes
         (AttrMapSym1 r) '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Clip])
-> ([[IpeObject r]] -> [IpeObject r])
-> [[IpeObject r]]
-> Group r
   :+ Attributes
        (AttrMapSym1 r) '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Clip]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [[IpeObject r]] -> [IpeObject r]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[IpeObject r]]
 -> Group r
    :+ Attributes
         (AttrMapSym1 r) '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Clip])
-> [[IpeObject r]]
-> Group r
   :+ Attributes
        (AttrMapSym1 r) '[ 'Layer, 'Matrix, 'Pin, 'Transformations, 'Clip]
forall a b. (a -> b) -> a -> b
$ [[IpeObject r]
vs, [IpeObject r]
es, [IpeObject r]
fs]
  where
    vs :: [IpeObject r]
vs = ((VertexId' s, VertexData r v) -> Maybe (IpeObject r))
-> [(VertexId' s, VertexData r v)] -> [IpeObject r]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe (((vi r :+ Attributes' r (AttributesOf vi)) -> IpeObject r)
-> Maybe (vi r :+ Attributes' r (AttributesOf vi))
-> Maybe (IpeObject r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (vi r :+ Attributes' r (AttributesOf vi)) -> IpeObject r
forall (i :: * -> *) r. ToObject i => IpeObject' i r -> IpeObject r
iO (Maybe (vi r :+ Attributes' r (AttributesOf vi))
 -> Maybe (IpeObject r))
-> MIO (VertexId' s, VertexData r v) vi r
-> (VertexId' s, VertexData r v)
-> Maybe (IpeObject r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MIO (VertexId' s, VertexData r v) vi r
fv) ([(VertexId' s, VertexData r v)] -> [IpeObject r])
-> (PlanarSubdivision s v e f r -> [(VertexId' s, VertexData r v)])
-> PlanarSubdivision s v e f r
-> [IpeObject r]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector (VertexId' s, VertexData r v)
-> [(VertexId' s, VertexData r v)]
forall a. Vector a -> [a]
V.toList (Vector (VertexId' s, VertexData r v)
 -> [(VertexId' s, VertexData r v)])
-> (PlanarSubdivision s v e f r
    -> Vector (VertexId' s, VertexData r v))
-> PlanarSubdivision s v e f r
-> [(VertexId' s, VertexData r v)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PlanarSubdivision s v e f r -> Vector (VertexId' s, VertexData r v)
forall k (s :: k) v e f r.
PlanarSubdivision s v e f r -> Vector (VertexId' s, VertexData r v)
vertices        (PlanarSubdivision s v e f r -> [IpeObject r])
-> PlanarSubdivision s v e f r -> [IpeObject r]
forall a b. (a -> b) -> a -> b
$ PlanarSubdivision s v e f r
g
    es :: [IpeObject r]
es = ((Dart s, LineSegment 2 v r :+ e) -> Maybe (IpeObject r))
-> [(Dart s, LineSegment 2 v r :+ e)] -> [IpeObject r]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe (((ei r :+ Attributes' r (AttributesOf ei)) -> IpeObject r)
-> Maybe (ei r :+ Attributes' r (AttributesOf ei))
-> Maybe (IpeObject r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (ei r :+ Attributes' r (AttributesOf ei)) -> IpeObject r
forall (i :: * -> *) r. ToObject i => IpeObject' i r -> IpeObject r
iO (Maybe (ei r :+ Attributes' r (AttributesOf ei))
 -> Maybe (IpeObject r))
-> MIO (Dart s, LineSegment 2 v r :+ e) ei r
-> (Dart s, LineSegment 2 v r :+ e)
-> Maybe (IpeObject r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MIO (Dart s, LineSegment 2 v r :+ e) ei r
fe) ([(Dart s, LineSegment 2 v r :+ e)] -> [IpeObject r])
-> (PlanarSubdivision s v e f r
    -> [(Dart s, LineSegment 2 v r :+ e)])
-> PlanarSubdivision s v e f r
-> [IpeObject r]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector (Dart s, LineSegment 2 v r :+ e)
-> [(Dart s, LineSegment 2 v r :+ e)]
forall a. Vector a -> [a]
V.toList (Vector (Dart s, LineSegment 2 v r :+ e)
 -> [(Dart s, LineSegment 2 v r :+ e)])
-> (PlanarSubdivision s v e f r
    -> Vector (Dart s, LineSegment 2 v r :+ e))
-> PlanarSubdivision s v e f r
-> [(Dart s, LineSegment 2 v r :+ e)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PlanarSubdivision s v e f r
-> Vector (Dart s, LineSegment 2 v r :+ e)
forall k (s :: k) v e f r.
PlanarSubdivision s v e f r
-> Vector (Dart s, LineSegment 2 v r :+ e)
edgeSegments    (PlanarSubdivision s v e f r -> [IpeObject r])
-> PlanarSubdivision s v e f r -> [IpeObject r]
forall a b. (a -> b) -> a -> b
$ PlanarSubdivision s v e f r
g
    fs :: [IpeObject r]
fs = ((FaceId' s, SomePolygon v r :+ f) -> Maybe (IpeObject r))
-> [(FaceId' s, SomePolygon v r :+ f)] -> [IpeObject r]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe (((fi r :+ Attributes' r (AttributesOf fi)) -> IpeObject r)
-> Maybe (fi r :+ Attributes' r (AttributesOf fi))
-> Maybe (IpeObject r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (fi r :+ Attributes' r (AttributesOf fi)) -> IpeObject r
forall (i :: * -> *) r. ToObject i => IpeObject' i r -> IpeObject r
iO (Maybe (fi r :+ Attributes' r (AttributesOf fi))
 -> Maybe (IpeObject r))
-> MIO (FaceId' s, SomePolygon v r :+ f) fi r
-> (FaceId' s, SomePolygon v r :+ f)
-> Maybe (IpeObject r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MIO (FaceId' s, SomePolygon v r :+ f) fi r
ff) ([(FaceId' s, SomePolygon v r :+ f)] -> [IpeObject r])
-> (PlanarSubdivision s v e f r
    -> [(FaceId' s, SomePolygon v r :+ f)])
-> PlanarSubdivision s v e f r
-> [IpeObject r]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector (FaceId' s, SomePolygon v r :+ f)
-> [(FaceId' s, SomePolygon v r :+ f)]
forall a. Vector a -> [a]
V.toList (Vector (FaceId' s, SomePolygon v r :+ f)
 -> [(FaceId' s, SomePolygon v r :+ f)])
-> (PlanarSubdivision s v e f r
    -> Vector (FaceId' s, SomePolygon v r :+ f))
-> PlanarSubdivision s v e f r
-> [(FaceId' s, SomePolygon v r :+ f)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PlanarSubdivision s v e f r
-> Vector (FaceId' s, SomePolygon v r :+ f)
forall k (s :: k) v e f r.
PlanarSubdivision s v e f r
-> Vector (FaceId' s, SomePolygon v r :+ f)
rawFacePolygons (PlanarSubdivision s v e f r -> [IpeObject r])
-> PlanarSubdivision s v e f r -> [IpeObject r]
forall a b. (a -> b) -> a -> b
$ PlanarSubdivision s v e f r
g