About

Metadata

  • Last updated , by FrankStaals
  • License BSD-3-Clause
  • Categories Mathematics
  • Maintained by: frank@fstaals.net

  • Lottery factor: 0

Links

Installation

Tested Compilers

  1. 9.12.2
  2. 9.12.1
  3. 9.10.3
  4. 9.10.2
  5. 9.10.1
  6. 9.8.4
  7. 9.8.3
  8. 9.8.2
  9. 9.8.1
  10. 9.6.7
  11. 9.6.6
  12. 9.6.5
  13. 9.6.4
  14. 9.6.3
  15. 9.6.2
  16. 9.6.1
  17. 9.4.8
  18. 9.4.7
  19. 9.4.6
  20. 9.4.5
  21. 9.4.4
  22. 9.4.3
  23. 9.4.2
  24. 9.4.1
  25. 9.2.8
  26. 9.2.7
  27. 9.2.6
  28. 9.2.5
  29. 9.2.4
  30. 9.2.3
  31. 9.2.2
  32. 9.2.1
  33. 9.0.2
  34. 9.0.1
  35. 8.10.7
  36. 8.10.6
  37. 8.10.5
  38. 8.10.4
  39. 8.10.3
  40. 8.10.2
  41. 8.10.1
  42. 8.8.4
  43. 8.8.3
  44. 8.8.2
  45. 8.8.1
  46. 8.6.5
  47. 8.6.4
  48. 8.6.3
  49. 8.6.2
  50. 8.6.1
  51. 8.4.4
  52. 8.4.3
  53. 8.4.2
  54. 8.4.1
  55. 8.2.2

Readme

HGeometry-ipe

This package provides an API for reading and writing Ipe (http://ipe.otfried.org) files. This is all very work in progress. Hence, the API is experimental and may change at any time!

Here is an example showing reading a set of points from an Ipe file, computing the DelaunayTriangulation and the Euclidean Minimimum Spanning tree, and writing the result again to an output file. Refer to hgeometry-examples for the full code.

mainWith                          :: Options -> IO ()
mainWith (Options inFile outFile) = do
  pts <- readAllFrom @(Point 2 R) inFile
  let pts' = NonEmpty.fromList pts
      dt   = toPlanarSubdivision (Proxy @DTWorld) . delaunayTriangulation $ pts'
      emst = euclideanMST pts'
      out  = [ iO $ drawPlanarSubdivisionWith drawVtx drawEdge (drawInternalFace dt) drawOuterFace dt
                  ! attr SLayer "delaunayTriangulation"
             , iO $ drawTree' emst ! attr SLayer "emst"
             ]
      outputFile = singlePageFromContent out
  outputFile' <- addStyleSheetFrom "../hgeometry-ipe/resources/opacities.isy" outputFile
  writeIpeFile outFile outputFile'

-- | The world in which the delaunay triangulation "lives"
data DTWorld

-- | Draw vertices using their default representation; disk marks. For
-- the rest we keep their original attributes.
drawVtx                         :: IpeOut' Maybe (VertexId' s, VertexData r (IpeAttributes IpeSymbol r)) IpeSymbol r
drawVtx (_vi, VertexData p ats) = Just $ defIO p ! ats

-- | Draw edges using normal line segments
drawEdge              :: IpeOut' Maybe (Dart s,      LineSegment 2 v r :+ e)  Path r
drawEdge (_d, s :+ _) = Just $ defIO s

-- | Internal faces are filled polygons.
drawInternalFace                 :: PlanarSubdivision s v e f r
                                 -> IpeOut' Maybe (FaceId' s,   SomePolygon v r :+ f)    Path r
drawInternalFace s (fi, pg :+ _) = Just $ defIO pg ! attr SFill lightcyan

--
drawOuterFace :: (Ord r, Num r) => IpeOut' Maybe (FaceId' s,   MultiPolygon (Maybe v) r :+ f) Path r
drawOuterFace (_, pg :+ _) = Just $ defIO pg ! attr SOpacity "10%"
                                             ! attr SFill lightgray

See the hgeometry-examples package for more examples.