hgeometry-0.9.0.0: Geometric Algorithms, Data structures, and Data types.

Copyright(C) Frank Staals
Licensesee the LICENSE file
MaintainerFrank Staals
Safe HaskellNone
LanguageHaskell2010

Data.PlaneGraph.IO

Contents

Description

Converting from/to Adjacency Representation of the plane graph

Synopsis

Documentation

>>> import Data.PlanarGraph.Dart
>>> import Data.PlanarGraph.AdjRep(Face(..))
>>> :{
let dart i s = Dart (Arc i) (read s)
    small :: Gr (Vtx Int String Int) (Face String)
    small = Gr [ Vtx 0 (Point2 0 0) [ (2,"0->2")
                                    , (1,"0->1")
                                    , (3,"0->3")
                                    ] 0
               , Vtx 1 (Point2 2 2) [ (0,"1->0")
                                    , (2,"1->2")
                                    , (3,"1->3")
                                    ] 1
               , Vtx 2 (Point2 2 0) [ (0,"2->0")
                                    , (1,"2->1")
                                    ] 2
               , Vtx 3 (Point2 (-1) 4) [ (0,"3->0")
                                       , (1,"3->1")
                                       ] 3
               ]
               [ Face (2,1) "OuterFace"
               , Face (0,1) "A"
               , Face (1,0) "B"
               ]
    smallG = fromAdjRep (Proxy :: Proxy ()) small
:}

This represents the following graph. Note that the graph is undirected, the arrows are just to indicate what the Positive direction of the darts is.

Reading and Writing the Plane Graph

readPlaneGraph :: (FromJSON v, FromJSON e, FromJSON f, FromJSON r) => proxy s -> ByteString -> Either ParseException (PlaneGraph s v e f r) Source #

Reads a plane graph from a bytestring

writePlaneGraph :: (ToJSON v, ToJSON e, ToJSON f, ToJSON r) => PlaneGraph s v e f r -> ByteString Source #

Writes a plane graph to a bytestring

toAdjRep :: PlaneGraph s v e f r -> Gr (Vtx v e r) (Face f) Source #

Transforms the planar graph into a format taht can be easily converted into JSON format. For every vertex, the adjacent vertices are given in counter clockwise order.

See toAdjacencyLists for notes on how we handle self-loops.

running time: \(O(n)\)

fromAdjRep :: proxy s -> Gr (Vtx v e r) (Face f) -> PlaneGraph s v e f r Source #

makeCCW :: (Num r, Ord r) => Gr (Vtx v e r) f -> Gr (Vtx v e r) f Source #

Orders the adjacencylists of a plane graph (with \(n\) vertices) (in Adj repr) so that they are all counter-clockwise around the vertices.

running time: \(O(n \log n)\)

Orphan instances

(FromJSON v, FromJSON e, FromJSON f, FromJSON r) => FromJSON (PlaneGraph s v e f r) Source # 
Instance details

Methods

parseJSON :: Value -> Parser (PlaneGraph s v e f r)

parseJSONList :: Value -> Parser [PlaneGraph s v e f r]

(ToJSON v, ToJSON e, ToJSON f, ToJSON r) => ToJSON (PlaneGraph s v e f r) Source # 
Instance details

Methods

toJSON :: PlaneGraph s v e f r -> Value

toEncoding :: PlaneGraph s v e f r -> Encoding

toJSONList :: [PlaneGraph s v e f r] -> Value

toEncodingList :: [PlaneGraph s v e f r] -> Encoding