{"id":19503906,"url":"https://github.com/timschneider42/ghsim","last_synced_at":"2026-06-11T02:31:35.338Z","repository":{"id":77928342,"uuid":"304709784","full_name":"TimSchneider42/ghsim","owner":"TimSchneider42","description":"Bullet simulation for Rhino Grasshopper","archived":false,"fork":false,"pushed_at":"2022-04-12T14:23:54.000Z","size":273,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-20T06:41:29.451Z","etag":null,"topics":["grasshopper","pybullet","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TimSchneider42.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-16T18:34:50.000Z","updated_at":"2024-02-27T17:15:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"603449c3-44a8-490c-9287-23915aa417dc","html_url":"https://github.com/TimSchneider42/ghsim","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TimSchneider42/ghsim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimSchneider42%2Fghsim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimSchneider42%2Fghsim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimSchneider42%2Fghsim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimSchneider42%2Fghsim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TimSchneider42","download_url":"https://codeload.github.com/TimSchneider42/ghsim/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimSchneider42%2Fghsim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34180147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["grasshopper","pybullet","python"],"created_at":"2024-11-10T22:23:29.304Z","updated_at":"2026-06-11T02:31:35.321Z","avatar_url":"https://github.com/TimSchneider42.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ghsim\nBullet simulation for Rhino Grasshopper.\n\n## Installation\n1. Install `python 3.6` or higher on your system.\nThe newest version of python can be obtained from \u003chttps://www.python.org/downloads/\u003e.\n\n2. Install dependencies for the simulation server.\u003cbr\u003e\n```pip install numpy scipy```\n\n3. Install the `PyBullet` simulator.\nThis can be achieved by opening the terminal and typing\u003cbr\u003e\n```pip install pybullet```\u003cbr\u003e\nHowever, this will install the upstream version of `PyBullet` which currently limits the number of meshes of a single physical object to 16.\nIf this is not sufficient for you, you can install our fork instead, which increases the limit to 32:\n    1. Download the sources from \u003chttps://github.com/TimSchneider42/bullet3/archive/d3c152d77f30ffc837be36710563d6dede01fb56.zip\u003e\n    2. Unpack the sources.\n    3. Run `pip install /path/to/unpacked/sources`\n    \n4. Install the `ghsim` Grasshopper plugin.\n    1. Open Grasshopper and click on File \u003e Special Folders \u003e Components Folder\n    2. Copy the `ghsim` folder (the directory containing `ghsim.py`, not the entire repository) into the directory that just opened.\n    In the components folder of Grasshopper should afterwards be a directory `ghsim` containing only a single file `ghsim.py`.\n    3. Again in Grasshopper, click File \u003e Special Folders \u003e User Objects\n    4. Copy the content (!) of the `user_components` directory into the directory that just opened.\n    \n    You should now see a category `ghsim` as soon as you restart Rhino/Grasshopper.\n    \n## Usage\nBefore the simulation can begin, the simulation server needs to be started.\nThis can be achieved by opening a terminal, navigating to the source root of this repository and typing\n\n```python simulation_server.py```\n\nFor a list of options, type \n\n```python simulation_server.py -h```\n\nAs soon as the server outputs `Listening on port 8000...`, it is ready to process simulation requests.\n\n`ghsim` comes with 6 types of Grasshopper components, that are briefly explained here:\n\n- **PhysicalObjectType**: Creates a type of physical object that can appear multiple times at different locations in the scene. \nEach type consists of a one or more convex geometric shapes that remain in static formation during simulation, and dynamic properties, like the mass or friction coefficients.\n- **PhysicalObject**: Creates an instance of a physical object type. \nEach physical object consists of the respective object type and a transformation specifying its location.\n- **ExternalSimulator**: Specifies hostname and port of the simulation server.\n- **Simulation**: Executes the simulation given a list of physical objects and some simulation parameters.\nFor further information on the simulation parameters, please refer to the documentation of this component.\nOutputs a simulation result object for each time step of the simulation.\n- **SimulationStateAt**: Extracts the transformation of each physical object at a specific time from the simulator output.\n- **UnpackPhysicalObject**: Unpacks a physical object into its convex geometries and its transformation.\n\nFor usage examples, please refer to `boxes.gh` and `wasp.gh`.\n\n### Simulation Advice\n\nEnsure that any objects in the scene are not too close together at the beginning of the simulation.\nOtherwise they might start to overlap which makes the simulation unstable.\nInstead, always leave 1-2mm distance between objects and rather let them settle during the simulation. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimschneider42%2Fghsim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimschneider42%2Fghsim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimschneider42%2Fghsim/lists"}