![](https://github.com/hasii2011/code-ally-basic/blob/master/developer/agpl-license-web-badge-version-2-256x48.png "AGPL")
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)
[![CircleCI](https://dl.circleci.com/status-badge/img/gh/hasii2011/py-force-directed-layout/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/hasii2011/py-force-directed-layout/tree/master)
[![PyPI version](https://badge.fury.io/py/pyforcedirectedlayout.svg)](https://badge.fury.io/py/pyforcedirectedlayout)
# Introduction
This project is the Python implementation of Brad Smith's article on [A Forced-Directed Diagram Layout Algorithm](https://www.brad-smith.info/blog/archives/129). There were a few
bumps on the road to get Brad's code manually converted from a Microsoft graphics platform to a pseudo-platform independent platform like [wxPython](https://wxpython.org)
running on Mac OS. I will not go into detail on what those bumps were. But I want to make sure and document those [here](https://hsanchezii.wordpress.com).
# Details
## Install in your virtual environment
```bash
pip install pyforcedirectedlayout
```
## Configuration details
### These drive the algorithm
| Parameter | Default Value | Description |
|-----------------|---------------|-------------------------------------------------------------------------------------------------|
| damping | 0.1 | Value between 0 and 1 that slows the motion of the nodes during layout. |
| springLength | 100 | Value in pixels representing the length of the imaginary springs that run along the connectors. |
| maxIterations | 500 | Maximum number of iterations before the algorithm terminates |
| attractionForce | 0.1 | The spring value |
| repulsionForce | 10000 | The repulsion value |
### Randomize the layout
| Parameter | Default Value | Description |
|-----------|:------------------|-------------|
| minPoint | Point(x=10, y=10) | |
| maxPoint | Point(x=60, y=60) | |
### Early Termination
| Parameter | Default Value | Description |
|--------------------------|---------------|---------------------------------------------------------------------------------------------------------------------------|
| minimumTotalDisplacement | 10 | |
| stopCount | 15 | Stop execution after this many number of iterations where the `totalDisplacement` is less that `minimumTotalDisplacement` |
## Developer Notes
This project uses [buildlackey](https://github.com/hasii2011/buildlackey) for day-to-day development builds
___
# Note
For all kinds of problems, requests, enhancements, bug reports, etc., drop me an e-mail.
Written by <a href="mailto:email@humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto">Humberto A. Sanchez II</a> (C) 2024
![Humberto's Modified Logo](https://raw.githubusercontent.com/wiki/hasii2011/gittodoistclone/images/SillyGitHub.png)
I am concerned about GitHub's Copilot project.
I urge you to read about the
[Give up GitHub](https://GiveUpGitHub.org) campaign from
[the Software Freedom Conservancy](https://sfconservancy.org).
While I do not advocate for all the issues listed there, I do not like that
a company like Microsoft may profit from open source projects.
I continue to use GitHub because it offers the services I need for free. But I continue
to monitor their terms of service.
Any use of this project's code by GitHub Copilot, past or present, is done
without my permission. I do not consent to GitHub's use of this project's
code in Copilot.
Raw data
{
"_id": null,
"home_page": null,
"name": "pyforcedirectedlayout",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": "\"Humberto A. Sanchez II\" <Humbert.A.Sanchez.II@gmail.com>",
"keywords": "layout, diagram, python",
"author": null,
"author_email": "\"Humberto A. Sanchez II\" <Humbert.A.Sanchez.II@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/ae/06/39a2acbf3fe63baa5567f887f281a64e9d687856f6f7822f984071f299ac/pyforcedirectedlayout-0.80.5.tar.gz",
"platform": null,
"description": "![](https://github.com/hasii2011/code-ally-basic/blob/master/developer/agpl-license-web-badge-version-2-256x48.png \"AGPL\")\n\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/hasii2011/py-force-directed-layout/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/hasii2011/py-force-directed-layout/tree/master)\n[![PyPI version](https://badge.fury.io/py/pyforcedirectedlayout.svg)](https://badge.fury.io/py/pyforcedirectedlayout)\n\n\n# Introduction\nThis project is the Python implementation of Brad Smith's article on [A Forced-Directed Diagram Layout Algorithm](https://www.brad-smith.info/blog/archives/129). There were a few \nbumps on the road to get Brad's code manually converted from a Microsoft graphics platform to a pseudo-platform independent platform like [wxPython](https://wxpython.org) \nrunning on Mac OS. I will not go into detail on what those bumps were. But I want to make sure and document those [here](https://hsanchezii.wordpress.com).\n\n\n\n# Details\n\n## Install in your virtual environment\n\n```bash\npip install pyforcedirectedlayout\n```\n\n## Configuration details\n\n### These drive the algorithm\n\n| Parameter | Default Value | Description |\n|-----------------|---------------|-------------------------------------------------------------------------------------------------|\n| damping | 0.1 | Value between 0 and 1 that slows the motion of the nodes during layout. |\n| springLength | 100 | Value in pixels representing the length of the imaginary springs that run along the connectors. |\n| maxIterations | 500 | Maximum number of iterations before the algorithm terminates |\n| attractionForce | 0.1 | The spring value |\n| repulsionForce | 10000 | The repulsion value |\n\n### Randomize the layout\n\n| Parameter | Default Value | Description |\n|-----------|:------------------|-------------|\n| minPoint | Point(x=10, y=10) | |\n| maxPoint | Point(x=60, y=60) | |\n\n### Early Termination\n\n\n| Parameter | Default Value | Description |\n|--------------------------|---------------|---------------------------------------------------------------------------------------------------------------------------|\n| minimumTotalDisplacement | 10 | |\n| stopCount | 15 | Stop execution after this many number of iterations where the `totalDisplacement` is less that `minimumTotalDisplacement` |\n\n## Developer Notes\n\nThis project uses [buildlackey](https://github.com/hasii2011/buildlackey) for day-to-day development builds\n\n___\n\n# Note\nFor all kinds of problems, requests, enhancements, bug reports, etc., drop me an e-mail.\nWritten by <a href=\"mailto:email@humberto.a.sanchez.ii@gmail.com?subject=Hello Humberto\">Humberto A. Sanchez II</a> (C) 2024\n\n\n\n![Humberto's Modified Logo](https://raw.githubusercontent.com/wiki/hasii2011/gittodoistclone/images/SillyGitHub.png)\n\nI am concerned about GitHub's Copilot project.\n\n\nI urge you to read about the\n[Give up GitHub](https://GiveUpGitHub.org) campaign from\n[the Software Freedom Conservancy](https://sfconservancy.org).\n\nWhile I do not advocate for all the issues listed there, I do not like that\na company like Microsoft may profit from open source projects.\n\nI continue to use GitHub because it offers the services I need for free. But I continue\nto monitor their terms of service.\n\nAny use of this project's code by GitHub Copilot, past or present, is done\nwithout my permission. I do not consent to GitHub's use of this project's\ncode in Copilot.\n",
"bugtrack_url": null,
"license": "GNU AFFERO GENERAL PUBLIC LICENSE",
"summary": "Python Implementation of a Force Directed Layout Algorithm",
"version": "0.80.5",
"project_urls": {
"Repository": "https://github.com/py-force-directed-layout"
},
"split_keywords": [
"layout",
" diagram",
" python"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "89438cba378c17572cbd921c9778be0ccb5ca337b8fd3389f8b0029e9be1ac19",
"md5": "09a47d6aff3f2e9cdc598e15ecae426c",
"sha256": "958c88730f18460a4a179ecf7b7d3b12913a3bfc96a168b46bddf6d8d297e4a5"
},
"downloads": -1,
"filename": "pyforcedirectedlayout-0.80.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "09a47d6aff3f2e9cdc598e15ecae426c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 26495,
"upload_time": "2024-10-29T01:09:47",
"upload_time_iso_8601": "2024-10-29T01:09:47.385117Z",
"url": "https://files.pythonhosted.org/packages/89/43/8cba378c17572cbd921c9778be0ccb5ca337b8fd3389f8b0029e9be1ac19/pyforcedirectedlayout-0.80.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ae0639a2acbf3fe63baa5567f887f281a64e9d687856f6f7822f984071f299ac",
"md5": "9353db8811cae402a73e9efcb1fa7157",
"sha256": "dd59dbe3dbf120765666e1ed4ac26f78fd93fb2e7fc86174ac2ad5451793d1b3"
},
"downloads": -1,
"filename": "pyforcedirectedlayout-0.80.5.tar.gz",
"has_sig": false,
"md5_digest": "9353db8811cae402a73e9efcb1fa7157",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24969,
"upload_time": "2024-10-29T01:09:48",
"upload_time_iso_8601": "2024-10-29T01:09:48.432196Z",
"url": "https://files.pythonhosted.org/packages/ae/06/39a2acbf3fe63baa5567f887f281a64e9d687856f6f7822f984071f299ac/pyforcedirectedlayout-0.80.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-29 01:09:48",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pyforcedirectedlayout"
}