# PartCAD <!-- omit in toc -->
[![License](https://github.com/openvmp/partcad/blob/main/apache20.svg?raw=true)](./LICENSE.txt)
[![CI on Linux, MacOS and Windows](https://github.com/openvmp/partcad/actions/workflows/python-test.yml/badge.svg)](https://github.com/openvmp/partcad/actions/workflows/python-test.yml)
[![CD on Linux, MacOS and Windows](https://github.com/openvmp/partcad/actions/workflows/python-build.yml/badge.svg)](https://github.com/openvmp/partcad/actions/workflows/python-build.yml)
[![Deployment to PyPI](https://github.com/openvmp/partcad/actions/workflows/python-deploy.yml/badge.svg)](https://github.com/openvmp/partcad/actions/workflows/python-deploy.yml)
[![Documentation Status](https://readthedocs.org/projects/partcad/badge/?version=latest)](https://partcad.readthedocs.io/en/latest/?badge=latest)
<a href="https://discord.gg/AXbP47zYw5"><img alt="Discord" src="https://img.shields.io/discord/1091497262733074534?logo=discord&logoColor=white&label=Discord&labelColor=353c43&color=31c151"></a>
PartCAD is the first package manager for CAD models
and a framework for managing assemblies.
It aims to complement Git with everything necessary to substitute
commercial Product Lifecycle Management (PLM) tools.
PartCAD maintains information about mechanical parts and
how they come together to form larger assemblies.
The same parts can be reused in multiple assemblies and multiple projects.
And all of that is supercharged by the ultimate versioning and collaboration features of Git.
PartCAD features include:
- 3D part models using [CadQuery](https://cadquery.readthedocs.io/), [build123d](https://build123d.readthedocs.io/) and [OpenSCAD](https://openscad.org/) scripting languages
- 3D part models using legacy STEP, STL and 3MF files
- Generate 3D models using LLM/GenAI: Google AI (Gemini), OpenAI (ChatGPT) or any model published to [Ollama](https://ollama.com/) (Llama 3.1, DeepSeek-Coder-V2, CodeGemma, Code Llama etc)
- 2D blueprints using [build123d](https://build123d.readthedocs.io/), or legacy DXF and SVG files
- Fully featured object-oriented approach to maintaining part interfaces and mating information (with multiple class inheritance etc)
- Live preview of 3D models while coding in VS Code
- Render models to SVG, PNG and export to STEP, STL, 3MF, ThreeJS and OBJ
- Render Markdown documentation files
Find [more documentation here](https://partcad.readthedocs.io/en/latest/?badge=latest) and visit [our website](https://partcad.org/).
## Installation
### Extension for Visual Studio Code
This extension can be installed by searching for `PartCAD` in VS Code extension search form, or by browsing [its VS Code marketplace page](https://marketplace.visualstudio.com/items?itemName=OpenVMP.partcad).
[![PartCAD Visual Studio Code extension](./docs/source/images/vscode1.png)](https://marketplace.visualstudio.com/items?itemName=OpenVMP.partcad)
### Command-Line Interface
The recommended method to install PartCAD CLI tools for most users is:
```shell
pip install -U partcad-cli
```
For contributors:
```shell
git clone https://github.com/openvmp/partcad.git
cd partcad
python3 -m pip install -U -e ./partcad
python3 -m pip install -U -e ./partcad-cli
```
PartCAD works best when [conda](https://docs.conda.io/) is installed.
If that doesn't help (e.g. MacOS+arm64) then try ``mamba``.
On Windows, PartCAD requires at least a `conda` environment.
On Ubuntu, try `apt install libcairo2-dev` if `pip install` fails to install `cairo`.
## Architecture
![Architecture](https://github.com/openvmp/partcad/blob/main/docs/source/images/architecture.png?raw=true)
## Tools for Mechanical Engineering
Here is an overview of open source tools to maintain
mechanical projects. It demonstrates where PartCAD fits
in the modern mechanical development workflows.
```mermaid
flowchart TB
subgraph repo["Your project's GIT repository"]
subgraph custom_repo["Custom parts"]
direction TB
custom_part_internet["A STEP file\ndownloaded from Internet\nor the vendor site"]
custom_part_cad["A part exported as a solid\nfrom a CAD tool not\nsuitable for collaboration"]
custom_part_cq["An individual reusable part\nmaintained as a script\nunder a version control system"]
custom_part_os["Another reusable part\nmaintained as a script\nunder a version control system"]
end
model["Your project's model defined\nas ASSY or Python code\nfor version control\nand collaboration"]
subgraph scenes["Scenes"]
test1["Capability 1\ntest scene"]
test2["Capability 2\ntest scene"]
end
end
subgraph external_repos["Third-party GIT repositories,\nCDN-hosted files or OCCI servers"]
subgraph external_repo["Repository of standard\nor popular parts"]
end
end
subgraph external_tools["External tools"]
freecad["FreeCAD"]
cadquery["CadQuery / build123d"]
openscad["OpenSCAD"]
gazebo["Gazebo"]
partcad["PartCAD library"]
style partcad fill:#c00
end
custom_part_cad <--- |Individual\ncontributor|freecad
custom_part_cq <--- |Part design\nworkflow| cadquery
custom_part_os <--- |Part design\nworkflow| openscad
external_repo ---> |Import| model
custom_repo ---> |Import| model
model -.-> |Import| test1
model -.-> |Import| test2
custom_repo <-. Maintained\nusing\nPartCAD\nconvention .- partcad
external_repo <-. Maintained\nusing\nPartCAD\nconvention .- partcad
model <--- partcad
test1 <--- partcad
test2 <--- partcad
test1 -.-> |Export| gazebo
test2 -.-> |Export| gazebo
```
[CadQuery]: https://github.com/CadQuery/cadquery
[build123d]: https://github.com/gumyr/build123d
[STEP]: https://en.wikipedia.org/wiki/ISO_10303
[OpenCASCADE]: https://www.opencascade.com/
Raw data
{
"_id": null,
"home_page": null,
"name": "partcad-cli",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "Roman Kuzmenko <openvmp@proton.me>",
"keywords": "cadquery, build123d, cad, design, openscad, step, stl",
"author": null,
"author_email": "Roman Kuzmenko <openvmp@proton.me>",
"download_url": "https://files.pythonhosted.org/packages/8a/2d/3c668f5d4f12d3c3ecdda4e99cdbae5d07b7a609e452cce119918a12a8a8/partcad_cli-0.7.16.tar.gz",
"platform": null,
"description": "# PartCAD <!-- omit in toc -->\n\n[![License](https://github.com/openvmp/partcad/blob/main/apache20.svg?raw=true)](./LICENSE.txt)\n\n[![CI on Linux, MacOS and Windows](https://github.com/openvmp/partcad/actions/workflows/python-test.yml/badge.svg)](https://github.com/openvmp/partcad/actions/workflows/python-test.yml)\n[![CD on Linux, MacOS and Windows](https://github.com/openvmp/partcad/actions/workflows/python-build.yml/badge.svg)](https://github.com/openvmp/partcad/actions/workflows/python-build.yml)\n[![Deployment to PyPI](https://github.com/openvmp/partcad/actions/workflows/python-deploy.yml/badge.svg)](https://github.com/openvmp/partcad/actions/workflows/python-deploy.yml)\n[![Documentation Status](https://readthedocs.org/projects/partcad/badge/?version=latest)](https://partcad.readthedocs.io/en/latest/?badge=latest)\n<a href=\"https://discord.gg/AXbP47zYw5\"><img alt=\"Discord\" src=\"https://img.shields.io/discord/1091497262733074534?logo=discord&logoColor=white&label=Discord&labelColor=353c43&color=31c151\"></a>\n\nPartCAD is the first package manager for CAD models\nand a framework for managing assemblies.\nIt aims to complement Git with everything necessary to substitute\ncommercial Product Lifecycle Management (PLM) tools.\n\nPartCAD maintains information about mechanical parts and\nhow they come together to form larger assemblies.\nThe same parts can be reused in multiple assemblies and multiple projects.\nAnd all of that is supercharged by the ultimate versioning and collaboration features of Git.\n\nPartCAD features include:\n\n- 3D part models using [CadQuery](https://cadquery.readthedocs.io/), [build123d](https://build123d.readthedocs.io/) and [OpenSCAD](https://openscad.org/) scripting languages\n- 3D part models using legacy STEP, STL and 3MF files\n- Generate 3D models using LLM/GenAI: Google AI (Gemini), OpenAI (ChatGPT) or any model published to [Ollama](https://ollama.com/) (Llama 3.1, DeepSeek-Coder-V2, CodeGemma, Code Llama etc)\n- 2D blueprints using [build123d](https://build123d.readthedocs.io/), or legacy DXF and SVG files\n- Fully featured object-oriented approach to maintaining part interfaces and mating information (with multiple class inheritance etc)\n- Live preview of 3D models while coding in VS Code\n- Render models to SVG, PNG and export to STEP, STL, 3MF, ThreeJS and OBJ\n- Render Markdown documentation files\n\nFind [more documentation here](https://partcad.readthedocs.io/en/latest/?badge=latest) and visit [our website](https://partcad.org/).\n\n## Installation\n\n### Extension for Visual Studio Code\n\nThis extension can be installed by searching for `PartCAD` in VS Code extension search form, or by browsing [its VS Code marketplace page](https://marketplace.visualstudio.com/items?itemName=OpenVMP.partcad).\n\n[![PartCAD Visual Studio Code extension](./docs/source/images/vscode1.png)](https://marketplace.visualstudio.com/items?itemName=OpenVMP.partcad)\n\n### Command-Line Interface\n\nThe recommended method to install PartCAD CLI tools for most users is:\n\n```shell\npip install -U partcad-cli\n```\n\nFor contributors:\n\n```shell\ngit clone https://github.com/openvmp/partcad.git\ncd partcad\npython3 -m pip install -U -e ./partcad\npython3 -m pip install -U -e ./partcad-cli\n```\n\nPartCAD works best when [conda](https://docs.conda.io/) is installed.\nIf that doesn't help (e.g. MacOS+arm64) then try ``mamba``.\nOn Windows, PartCAD requires at least a `conda` environment.\nOn Ubuntu, try `apt install libcairo2-dev` if `pip install` fails to install `cairo`.\n\n## Architecture\n\n![Architecture](https://github.com/openvmp/partcad/blob/main/docs/source/images/architecture.png?raw=true)\n\n## Tools for Mechanical Engineering\n\nHere is an overview of open source tools to maintain\nmechanical projects. It demonstrates where PartCAD fits\nin the modern mechanical development workflows.\n\n```mermaid\nflowchart TB\n\nsubgraph repo[\"Your project's GIT repository\"]\n subgraph custom_repo[\"Custom parts\"]\n direction TB\n custom_part_internet[\"A STEP file\\ndownloaded from Internet\\nor the vendor site\"]\n custom_part_cad[\"A part exported as a solid\\nfrom a CAD tool not\\nsuitable for collaboration\"]\n custom_part_cq[\"An individual reusable part\\nmaintained as a script\\nunder a version control system\"]\n custom_part_os[\"Another reusable part\\nmaintained as a script\\nunder a version control system\"]\n end\n\n model[\"Your project's model defined\\nas ASSY or Python code\\nfor version control\\nand collaboration\"]\n\n subgraph scenes[\"Scenes\"]\n test1[\"Capability 1\\ntest scene\"]\n test2[\"Capability 2\\ntest scene\"]\n end\nend\n\nsubgraph external_repos[\"Third-party GIT repositories,\\nCDN-hosted files or OCCI servers\"]\n subgraph external_repo[\"Repository of standard\\nor popular parts\"]\n end\nend\n\nsubgraph external_tools[\"External tools\"]\n freecad[\"FreeCAD\"]\n cadquery[\"CadQuery / build123d\"]\n openscad[\"OpenSCAD\"]\n gazebo[\"Gazebo\"]\n\n partcad[\"PartCAD library\"]\n style partcad fill:#c00\nend\n\ncustom_part_cad <--- |Individual\\ncontributor|freecad\ncustom_part_cq <--- |Part design\\nworkflow| cadquery\ncustom_part_os <--- |Part design\\nworkflow| openscad\n\nexternal_repo ---> |Import| model\ncustom_repo ---> |Import| model\nmodel -.-> |Import| test1\nmodel -.-> |Import| test2\n\ncustom_repo <-. Maintained\\nusing\\nPartCAD\\nconvention .- partcad\nexternal_repo <-. Maintained\\nusing\\nPartCAD\\nconvention .- partcad\nmodel <--- partcad\ntest1 <--- partcad\ntest2 <--- partcad\n\ntest1 -.-> |Export| gazebo\ntest2 -.-> |Export| gazebo\n```\n\n[CadQuery]: https://github.com/CadQuery/cadquery\n[build123d]: https://github.com/gumyr/build123d\n[STEP]: https://en.wikipedia.org/wiki/ISO_10303\n[OpenCASCADE]: https://www.opencascade.com/\n",
"bugtrack_url": null,
"license": null,
"summary": "Command-line interface to PartCAD",
"version": "0.7.16",
"project_urls": {
"Homepage": "https://github.com/openvmp/partcad",
"Issues": "https://github.com/openvmp/partcad/issues"
},
"split_keywords": [
"cadquery",
" build123d",
" cad",
" design",
" openscad",
" step",
" stl"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "be4a8d7d151b3c0881d346f9cad5606f442fa7394a3c6e4b2493f7474aa17fdc",
"md5": "78dd86340bf703e65b7772633104b15f",
"sha256": "418a2b34e6bda2b2783277bc31568bb11f8dcb4ca1fde3b16abd7212e7a84fdd"
},
"downloads": -1,
"filename": "partcad_cli-0.7.16-py3-none-any.whl",
"has_sig": false,
"md5_digest": "78dd86340bf703e65b7772633104b15f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 18863,
"upload_time": "2024-10-28T06:48:06",
"upload_time_iso_8601": "2024-10-28T06:48:06.501442Z",
"url": "https://files.pythonhosted.org/packages/be/4a/8d7d151b3c0881d346f9cad5606f442fa7394a3c6e4b2493f7474aa17fdc/partcad_cli-0.7.16-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8a2d3c668f5d4f12d3c3ecdda4e99cdbae5d07b7a609e452cce119918a12a8a8",
"md5": "44c25417d7c664b5c02ce54486068c06",
"sha256": "c3a5c5af519c540d5a9b18686e275db5c1f3875b12093f5647881ba0383f18ec"
},
"downloads": -1,
"filename": "partcad_cli-0.7.16.tar.gz",
"has_sig": false,
"md5_digest": "44c25417d7c664b5c02ce54486068c06",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 15119,
"upload_time": "2024-10-28T06:48:10",
"upload_time_iso_8601": "2024-10-28T06:48:10.893443Z",
"url": "https://files.pythonhosted.org/packages/8a/2d/3c668f5d4f12d3c3ecdda4e99cdbae5d07b7a609e452cce119918a12a8a8/partcad_cli-0.7.16.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-28 06:48:10",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "openvmp",
"github_project": "partcad",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "black",
"specs": []
},
{
"name": "flake8",
"specs": []
},
{
"name": "isort",
"specs": []
},
{
"name": "pytest",
"specs": []
},
{
"name": "pytest-cov",
"specs": []
},
{
"name": "sphinx",
"specs": []
},
{
"name": "sphinx_rtd_theme",
"specs": []
},
{
"name": "readthedocs-sphinx-search",
"specs": []
}
],
"lcname": "partcad-cli"
}