Copyright | (C) Frank Staals |
---|---|
License | see the LICENSE file |
Maintainer | Frank Staals |
Safe Haskell | None |
Language | Haskell2010 |
Data.PlaneGraph.IO
Description
Converting from/to Adjacency Representation of the plane graph
Synopsis
- readPlaneGraph :: (FromJSON v, FromJSON e, FromJSON f, FromJSON r) => proxy s -> ByteString -> Either ParseException (PlaneGraph s v e f r)
- writePlaneGraph :: (ToJSON v, ToJSON e, ToJSON f, ToJSON r) => PlaneGraph s v e f r -> ByteString
- toAdjRep :: PlaneGraph s v e f r -> Gr (Vtx v e r) (Face f)
- fromAdjRep :: proxy s -> Gr (Vtx v e r) (Face f) -> PlaneGraph s v e f r
- makeCCW :: (Num r, Ord r) => Gr (Vtx v e r) f -> Gr (Vtx v e r) f
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 # | |
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 # | |
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 |