polylabel 1.0.2

A Rust implementation of the Polylabel algorithm
Documentation
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "from matplotlib.collections import PatchCollection\n",
    "from shapely.geometry import LineString, Polygon, Point, box, shape\n",
    "# from shapely.algorithms.polylabel import polylabel\n",
    "from descartes import PolygonPatch\n",
    "\n",
    "from ipywidgets import interact, interactive, fixed\n",
    "import ipywidgets as widgets\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "initial_polygon = Polygon([\n",
    "    (0.0, 0.0),\n",
    "    (4.0, 0.0),\n",
    "    (4.0, 1.0),\n",
    "    (1.0, 1.0),\n",
    "    (1.0, 4.0),\n",
    "    (0.0, 4.0),\n",
    "    (0.0, 0.0)\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# generated by 'visualise' branch\n",
    "quad_polygons = [\n",
    "    box(0, 0, 4, 4),\n",
    "    box(0, 0, 2, 2),\n",
    "    box(2, 0, 4, 2),\n",
    "    box(0, 2, 2, 4),\n",
    "    box(2, 2, 4, 4),\n",
    "    box(0, 2, 1, 3),\n",
    "    box(1, 2, 2, 3),\n",
    "    box(0, 3, 1, 4),\n",
    "    box(1, 3, 2, 4),\n",
    "    box(1, 2, 1.5, 2.5),\n",
    "    box(1.5, 2, 2, 2.5),\n",
    "    box(1, 2.5, 1.5, 3),\n",
    "    box(1.5, 2.5, 2, 3),\n",
    "    box(1, 2, 1.25, 2.25),\n",
    "    box(1.25, 2, 1.5, 2.25),\n",
    "    box(1, 2.25, 1.25, 2.5),\n",
    "    box(1.25, 2.25, 1.5, 2.5),\n",
    "    box(1, 2.5, 1.25, 2.75),\n",
    "    box(1.25, 2.5, 1.5, 2.75),\n",
    "    box(1, 2.75, 1.25, 3),\n",
    "    box(1.25, 2.75, 1.5, 3),\n",
    "    box(1, 3, 1.5, 3.5),\n",
    "    box(1.5, 3, 2, 3.5),\n",
    "    box(1, 3.5, 1.5, 4),\n",
    "    box(1.5, 3.5, 2, 4),\n",
    "    box(1, 3, 1.25, 3.25),\n",
    "    box(1.25, 3, 1.5, 3.25),\n",
    "    box(1, 3.25, 1.25, 3.5),\n",
    "    box(1.25, 3.25, 1.5, 3.5),\n",
    "    box(1, 3.5, 1.25, 3.75),\n",
    "    box(1.25, 3.5, 1.5, 3.75),\n",
    "    box(1, 3.75, 1.25, 4),\n",
    "    box(1.25, 3.75, 1.5, 4),\n",
    "    box(0, 2, 0.5, 2.5),\n",
    "    box(0.5, 2, 1, 2.5),\n",
    "    box(0, 2.5, 0.5, 3),\n",
    "    box(0.5, 2.5, 1, 3),\n",
    "    box(0, 2, 0.25, 2.25),\n",
    "    box(0.25, 2, 0.5, 2.25),\n",
    "    box(0, 2.25, 0.25, 2.5),\n",
    "    box(0.25, 2.25, 0.5, 2.5),\n",
    "    box(0, 2.5, 0.25, 2.75),\n",
    "    box(0.25, 2.5, 0.5, 2.75),\n",
    "    box(0, 2.75, 0.25, 3),\n",
    "    box(0.25, 2.75, 0.5, 3),\n",
    "    box(0.5, 2.5, 0.75, 2.75),\n",
    "    box(0.75, 2.5, 1, 2.75),\n",
    "    box(0.5, 2.75, 0.75, 3),\n",
    "    box(0.75, 2.75, 1, 3),\n",
    "    box(0.5, 2, 0.75, 2.25),\n",
    "    box(0.75, 2, 1, 2.25),\n",
    "    box(0.5, 2.25, 0.75, 2.5),\n",
    "    box(0.75, 2.25, 1, 2.5),\n",
    "    box(0, 3, 0.5, 3.5),\n",
    "    box(0.5, 3, 1, 3.5),\n",
    "    box(0, 3.5, 0.5, 4),\n",
    "    box(0.5, 3.5, 1, 4),\n",
    "    box(0, 3, 0.25, 3.25),\n",
    "    box(0.25, 3, 0.5, 3.25),\n",
    "    box(0, 3.25, 0.25, 3.5),\n",
    "    box(0.25, 3.25, 0.5, 3.5),\n",
    "    box(0.5, 3.5, 0.75, 3.75),\n",
    "    box(0.75, 3.5, 1, 3.75),\n",
    "    box(0.5, 3.75, 0.75, 4),\n",
    "    box(0.75, 3.75, 1, 4),\n",
    "    box(0.5, 3, 0.75, 3.25),\n",
    "    box(0.75, 3, 1, 3.25),\n",
    "    box(0.5, 3.25, 0.75, 3.5),\n",
    "    box(0.75, 3.25, 1, 3.5),\n",
    "    box(0, 3.5, 0.25, 3.75),\n",
    "    box(0.25, 3.5, 0.5, 3.75),\n",
    "    box(0, 3.75, 0.25, 4),\n",
    "    box(0.25, 3.75, 0.5, 4),\n",
    "    box(2, 0, 3, 1),\n",
    "    box(3, 0, 4, 1),\n",
    "    box(2, 1, 3, 2),\n",
    "    box(3, 1, 4, 2),\n",
    "    box(3, 0, 3.5, 0.5),\n",
    "    box(3.5, 0, 4, 0.5),\n",
    "    box(3, 0.5, 3.5, 1),\n",
    "    box(3.5, 0.5, 4, 1),\n",
    "    box(3, 0, 3.25, 0.25),\n",
    "    box(3.25, 0, 3.5, 0.25),\n",
    "    box(3, 0.25, 3.25, 0.5),\n",
    "    box(3.25, 0.25, 3.5, 0.5),\n",
    "    box(3.5, 0.5, 3.75, 0.75),\n",
    "    box(3.75, 0.5, 4, 0.75),\n",
    "    box(3.5, 0.75, 3.75, 1),\n",
    "    box(3.75, 0.75, 4, 1),\n",
    "    box(3.5, 0, 3.75, 0.25),\n",
    "    box(3.75, 0, 4, 0.25),\n",
    "    box(3.5, 0.25, 3.75, 0.5),\n",
    "    box(3.75, 0.25, 4, 0.5),\n",
    "    box(3, 0.5, 3.25, 0.75),\n",
    "    box(3.25, 0.5, 3.5, 0.75),\n",
    "    box(3, 0.75, 3.25, 1),\n",
    "    box(3.25, 0.75, 3.5, 1),\n",
    "    box(2, 0, 2.5, 0.5),\n",
    "    box(2.5, 0, 3, 0.5),\n",
    "    box(2, 0.5, 2.5, 1),\n",
    "    box(2.5, 0.5, 3, 1),\n",
    "    box(2, 0, 2.25, 0.25),\n",
    "    box(2.25, 0, 2.5, 0.25),\n",
    "    box(2, 0.25, 2.25, 0.5),\n",
    "    box(2.25, 0.25, 2.5, 0.5),\n",
    "    box(2.5, 0.5, 2.75, 0.75),\n",
    "    box(2.75, 0.5, 3, 0.75),\n",
    "    box(2.5, 0.75, 2.75, 1),\n",
    "    box(2.75, 0.75, 3, 1),\n",
    "    box(2.5, 0, 2.75, 0.25),\n",
    "    box(2.75, 0, 3, 0.25),\n",
    "    box(2.5, 0.25, 2.75, 0.5),\n",
    "    box(2.75, 0.25, 3, 0.5),\n",
    "    box(2, 0.5, 2.25, 0.75),\n",
    "    box(2.25, 0.5, 2.5, 0.75),\n",
    "    box(2, 0.75, 2.25, 1),\n",
    "    box(2.25, 0.75, 2.5, 1),\n",
    "    box(0, 0, 1, 1),\n",
    "    box(1, 0, 2, 1),\n",
    "    box(0, 1, 1, 2),\n",
    "    box(1, 1, 2, 2),\n",
    "    box(0, 1, 0.5, 1.5),\n",
    "    box(0.5, 1, 1, 1.5),\n",
    "    box(0, 1.5, 0.5, 2),\n",
    "    box(0.5, 1.5, 1, 2),\n",
    "    box(0, 1, 0.25, 1.25),\n",
    "    box(0.25, 1, 0.5, 1.25),\n",
    "    box(0, 1.25, 0.25, 1.5),\n",
    "    box(0.25, 1.25, 0.5, 1.5),\n",
    "    box(0.5, 1.5, 0.75, 1.75),\n",
    "    box(0.75, 1.5, 1, 1.75),\n",
    "    box(0.5, 1.75, 0.75, 2),\n",
    "    box(0.75, 1.75, 1, 2),\n",
    "    box(0.5, 1, 0.75, 1.25),\n",
    "    box(0.75, 1, 1, 1.25),\n",
    "    box(0.5, 1.25, 0.75, 1.5),\n",
    "    box(0.75, 1.25, 1, 1.5),\n",
    "    box(0, 1.5, 0.25, 1.75),\n",
    "    box(0.25, 1.5, 0.5, 1.75),\n",
    "    box(0, 1.75, 0.25, 2),\n",
    "    box(0.25, 1.75, 0.5, 2),\n",
    "    box(0, 0, 0.5, 0.5),\n",
    "    box(0.5, 0, 1, 0.5),\n",
    "    box(0, 0.5, 0.5, 1),\n",
    "    box(0.5, 0.5, 1, 1),\n",
    "    box(0, 0, 0.25, 0.25),\n",
    "    box(0.25, 0, 0.5, 0.25),\n",
    "    box(0, 0.25, 0.25, 0.5),\n",
    "    box(0.25, 0.25, 0.5, 0.5),\n",
    "    box(0, 0.5, 0.25, 0.75),\n",
    "    box(0.25, 0.5, 0.5, 0.75),\n",
    "    box(0, 0.75, 0.25, 1),\n",
    "    box(0.25, 0.75, 0.5, 1),\n",
    "    box(0.5, 0, 0.75, 0.25),\n",
    "    box(0.75, 0, 1, 0.25),\n",
    "    box(0.5, 0.25, 0.75, 0.5),\n",
    "    box(0.75, 0.25, 1, 0.5),\n",
    "    box(0.5, 0.5, 0.75, 0.75),\n",
    "    box(0.75, 0.5, 1, 0.75),\n",
    "    box(0.5, 0.75, 0.75, 1),\n",
    "    box(0.75, 0.75, 1, 1),\n",
    "    box(0.5, 0.5, 0.625, 0.625),\n",
    "    box(0.625, 0.5, 0.75, 0.625),\n",
    "    box(0.5, 0.625, 0.625, 0.75),\n",
    "    box(0.625, 0.625, 0.75, 0.75),\n",
    "    box(1, 0, 1.5, 0.5),\n",
    "    box(1.5, 0, 2, 0.5),\n",
    "    box(1, 0.5, 1.5, 1),\n",
    "    box(1.5, 0.5, 2, 1),\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "ppatches = [PolygonPatch(poly, fc='None', ec='#ff0000', alpha=1.0, zorder=3, lw=0.25) for poly in quad_polygons]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAJMCAYAAAAIZPnDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAuIwAALiMBeKU/dgAACeNJREFUeJzt1rERwCAQwLCQ/Xd+JuBcQiFN4NJrZj4AAM7+2wEAAK8z\nTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTAB\nAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQ\nDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBM\nAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEA\nBMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAM\nEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwA\nAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAE\nwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwT\nAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAA\nwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATD\nBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMA\nQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADB\nMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMME\nABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBA\nMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEw\nAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQA\nEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAw\nTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTAB\nAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQ\nDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBM\nAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEA\nBMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAM\nEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwA\nAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAE\nwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwT\nAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAA\nwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATD\nBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMA\nQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADB\nMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMME\nABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBA\nMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEw\nAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQA\nEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAw\nTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTAB\nAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQ\nDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBM\nAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEA\nBMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAM\nEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwA\nAMEwAQAEwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAE\nwwQAEAwTAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwT\nAEAwTAAAwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQAEwwQAEAwTAEAwTAAA\nwTABAATDBAAQDBMAQDBMAADBMAEABMMEABAMEwBAMEwAAMEwAQCEDYG/B5Ub1seJAAAAAElFTkSu\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x105de6510>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(1, figsize=(5., 5.), dpi=300)\n",
    "ax = fig.add_subplot(121)\n",
    "ax.set_aspect('equal')\n",
    "ax.get_xaxis().set_visible(False)\n",
    "ax.get_yaxis().set_visible(False)\n",
    "ax.axis('off')\n",
    "ax.set_xlim(-0.15, 4.15)\n",
    "ax.set_ylim(-0.15, 4.15)\n",
    "col = ax.add_collection(PatchCollection(ppatches, match_original=True))\n",
    "col.set_visible(not col.get_visible())\n",
    "# save final plot\n",
    "# plt.savefig(\"data/polylabel_full.png\", format=\"png\", bbox_inches='tight', pad_inches=0, alpha=True, transparent=True, dpi=300)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "ax.collections[0].get_array()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%%bash\n",
    "convert -background white -alpha remove -layers OptimizePlus -set delay 20 -colors 512 -loop 0 -scale 100% data/*.png output.gif"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}