From daed79dac6102a5c8499fafd24c2735f4bf79812 Mon Sep 17 00:00:00 2001 From: bklronin Date: Sat, 14 Mar 2026 08:59:25 +0100 Subject: [PATCH] chore: update .gitignore and remove pycache from tracking --- .gitignore | 37 ++++- .../__pycache__/__init__.cpython-312.pyc | Bin 759 -> 0 bytes src/fluency/__pycache__/main.cpython-312.pyc | Bin 95191 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 434 -> 0 bytes .../geometry/__pycache__/base.cpython-312.pyc | Bin 20569 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 452 -> 0 bytes .../__pycache__/kernel.cpython-312.pyc | Bin 34173 -> 0 bytes .../__pycache__/sketch.cpython-312.pyc | Bin 15000 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 342 -> 0 bytes .../__pycache__/data_model.cpython-312.pyc | Bin 18237 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 468 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 14544 -> 0 bytes .../pygfx_renderer.cpython-312.pyc | Bin 22660 -> 0 bytes src/fluency_cad.egg-info/PKG-INFO | 146 ------------------ src/fluency_cad.egg-info/SOURCES.txt | 23 --- src/fluency_cad.egg-info/dependency_links.txt | 1 - src/fluency_cad.egg-info/entry_points.txt | 2 - src/fluency_cad.egg-info/requires.txt | 13 -- src/fluency_cad.egg-info/top_level.txt | 1 - ...test_geometry.cpython-312-pytest-9.0.2.pyc | Bin 24097 -> 0 bytes 20 files changed, 36 insertions(+), 187 deletions(-) delete mode 100644 src/fluency/__pycache__/__init__.cpython-312.pyc delete mode 100644 src/fluency/__pycache__/main.cpython-312.pyc delete mode 100644 src/fluency/geometry/__pycache__/__init__.cpython-312.pyc delete mode 100644 src/fluency/geometry/__pycache__/base.cpython-312.pyc delete mode 100644 src/fluency/geometry_occ/__pycache__/__init__.cpython-312.pyc delete mode 100644 src/fluency/geometry_occ/__pycache__/kernel.cpython-312.pyc delete mode 100644 src/fluency/geometry_occ/__pycache__/sketch.cpython-312.pyc delete mode 100644 src/fluency/models/__pycache__/__init__.cpython-312.pyc delete mode 100644 src/fluency/models/__pycache__/data_model.cpython-312.pyc delete mode 100644 src/fluency/rendering/__pycache__/__init__.cpython-312.pyc delete mode 100644 src/fluency/rendering/__pycache__/base.cpython-312.pyc delete mode 100644 src/fluency/rendering/__pycache__/pygfx_renderer.cpython-312.pyc delete mode 100644 src/fluency_cad.egg-info/PKG-INFO delete mode 100644 src/fluency_cad.egg-info/SOURCES.txt delete mode 100644 src/fluency_cad.egg-info/dependency_links.txt delete mode 100644 src/fluency_cad.egg-info/entry_points.txt delete mode 100644 src/fluency_cad.egg-info/requires.txt delete mode 100644 src/fluency_cad.egg-info/top_level.txt delete mode 100644 tests/__pycache__/test_geometry.cpython-312-pytest-9.0.2.pyc diff --git a/.gitignore b/.gitignore index 3c40110..6813f69 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,38 @@ *.xml *.iml -.idea \ No newline at end of file +.idea + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual environments +.venv/ +venv/ +ENV/ + +# Lock files +uv.lock + +# IDE +.vscode/ +*.swp +*.swo \ No newline at end of file diff --git a/src/fluency/__pycache__/__init__.cpython-312.pyc b/src/fluency/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 1bc1bbd0b48fd9e00e8eb788a276c97acdb5b685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmZ`%!EVz)5Z!g`*m0URLcoOsd&CFqQcg$+6ghw@5D99;!I#x$y-nQidZV>n4$ZaQx4 z^qGFW0WpX`3?mpDkrB6IledH!nZk-J(T>`}j%?vX4g~s}#XG`{+{SP7uGok+Aee#J zeg~so>3E&xTlX<9SV~J24u~gTZ3K6H4+#rmj0cLdHy`Xz?$JT#(ST zNO+E9ibe~ThJ!s_^%0sdI!`5+vl87Jh2g|=UnTh*5kxs7DH@mgTxSf%yQs*LbcR9_ zzbKe0eRpZ?_}l*Wvj4Zr2_xcLy%EoP z+S)s0Ii2sOIaB+DG7nb$QFxxTBI&b^7P?}3wrc5S%B;bvpLYzAq1U&6?m5gTE( zD#AI&@4>0o3C2)`Q^G*33c*7f7=r{2wD_m|m*#!pZ~AHaK`!JQwb(=}e( I>Wa?!4KDBA(f|Me diff --git a/src/fluency/__pycache__/main.cpython-312.pyc b/src/fluency/__pycache__/main.cpython-312.pyc deleted file mode 100644 index 03b86970e49a76f36e6e91dbf14d572a912721b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95191 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 diff --git a/src/fluency/geometry/__pycache__/base.cpython-312.pyc b/src/fluency/geometry/__pycache__/base.cpython-312.pyc deleted file mode 100644 index 1ee15b5ae0d8e70109d6f32347fd6edcf3cb3fde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20569 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 diff --git a/src/fluency/geometry_occ/__pycache__/__init__.cpython-312.pyc b/src/fluency/geometry_occ/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 7675b18258ec6fe24afdad9907e199bef37ee875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmZ`$yH3L}6ur)?=MfEld984I{Z4TT{iskmcmM++NaNlE-;r8&X$V(x||!z*2B#*UK8l zG$k09tt&oe2`QY#6*wit8P5Dx%m0jJGuxGNB^z>%@e@px5lm0riY*)dTju3i<{SWBB P!ST0YZfN&4xv4roQ7nO> diff --git a/src/fluency/geometry_occ/__pycache__/kernel.cpython-312.pyc b/src/fluency/geometry_occ/__pycache__/kernel.cpython-312.pyc deleted file mode 100644 index 0e5faa888d17c42284d5ab62a233df2c03f29bea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34173 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 diff --git a/src/fluency/geometry_occ/__pycache__/sketch.cpython-312.pyc b/src/fluency/geometry_occ/__pycache__/sketch.cpython-312.pyc deleted file mode 100644 index 3bf94b779436a1ba9426338f02c58b8c37e25769..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15000 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 Illn>i4?_T?OaK4? diff --git a/src/fluency/models/__pycache__/__init__.cpython-312.pyc b/src/fluency/models/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index feb8c4d35caa634f76587670e49f7f122ebd535b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmX|+u}Z}-6o!*DZPiOJ2rhSXv`hN};-KQD2!cbFP?}h)NpneCp>95fyPFT->%996Ytdn`SKsa`I5XQ$p(UY*?g*>VSo3{Uy)T9cOcv&ffy245QQ~iLr)dW0Skz|R#*asG%#Xwl**KR2q^ zvds_ups@9g%;5o*EwrwiDqrdI)|UTyc~#DN-P9fD*?d^6?Jj?@XA{t3SnUk(8DNax V(AGB%F&PoyYZ^|-U2G?C`U9BLU%LPR diff --git a/src/fluency/models/__pycache__/data_model.cpython-312.pyc b/src/fluency/models/__pycache__/data_model.cpython-312.pyc deleted file mode 100644 index 4f7bfce515c1afd46eb66195a68fd292024ee61f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18237 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 diff --git a/src/fluency/rendering/__pycache__/__init__.cpython-312.pyc b/src/fluency/rendering/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 989aaae6a6b4295642731284bcb90baedbc30ce9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 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 diff --git a/src/fluency/rendering/__pycache__/pygfx_renderer.cpython-312.pyc b/src/fluency/rendering/__pycache__/pygfx_renderer.cpython-312.pyc deleted file mode 100644 index 3f766e671d61320b8f7dc0e3261f520c662baea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22660 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 diff --git a/src/fluency_cad.egg-info/PKG-INFO b/src/fluency_cad.egg-info/PKG-INFO deleted file mode 100644 index cf3f1b3..0000000 --- a/src/fluency_cad.egg-info/PKG-INFO +++ /dev/null @@ -1,146 +0,0 @@ -Metadata-Version: 2.4 -Name: fluency-cad -Version: 2.0.0 -Summary: Parametric CAD application with OpenCASCADE geometry kernel -Author: Fluency CAD Team -License: MIT -Project-URL: Homepage, https://github.com/fluency-cad/fluency -Project-URL: Documentation, https://github.com/fluency-cad/fluency#readme -Project-URL: Repository, https://github.com/fluency-cad/fluency -Keywords: cad,parametric,opencascade,3d-modeling -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: End Users/Desktop -Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: 3.12 -Classifier: Topic :: Scientific/Engineering :: CAD -Requires-Python: >=3.10 -Description-Content-Type: text/markdown -Requires-Dist: cadquery>=2.4 -Requires-Dist: pygfx>=0.1.0 -Requires-Dist: wgpu>=0.1.0 -Requires-Dist: PySide6>=6.4.0 -Requires-Dist: numpy>=1.24.0 -Requires-Dist: scipy>=1.10.0 -Requires-Dist: pillow>=10.0.0 -Provides-Extra: dev -Requires-Dist: pytest>=8.0; extra == "dev" -Requires-Dist: black>=24.0; extra == "dev" -Requires-Dist: mypy>=1.8; extra == "dev" -Requires-Dist: ruff>=0.4.0; extra == "dev" - -# Fluency CAD 2.0 - -A parametric CAD application built on OpenCASCADE Technology (OCCT) with a modern pygfx-based 3D renderer. - -## Features - -- **OpenCASCADE Geometry Kernel**: Industry-standard BRep geometry with exact precision -- **STEP/IGES Import/Export**: Full support for industry-standard CAD file formats -- **Parametric Sketching**: 2D sketching with constraint solving using CadQuery -- **Boolean Operations**: Union, difference, and intersection -- **Fillet & Chamfer**: Apply edge treatments to solid bodies -- **Modern Renderer**: WebGPU-based rendering with pygfx (smaller footprint than VTK) - -## Architecture - -``` -fluency/ -├── src/fluency/ -│ ├── geometry/ # Geometry abstraction layer -│ │ └── base.py # Abstract interfaces -│ ├── geometry_occ/ # OpenCASCADE implementation -│ │ ├── kernel.py # OCGeometryKernel -│ │ └── sketch.py # OCCSketch with constraints -│ ├── rendering/ # Rendering abstraction -│ │ ├── base.py # Abstract renderer -│ │ └── pygfx_renderer.py -│ ├── models/ # Data models -│ │ └── data_model.py # Project, Component, Sketch, Body -│ └── main.py # Application entry point -├── tests/ -│ └── test_geometry.py -└── pyproject.toml -``` - -## Installation - -```bash -# Create virtual environment -python -m venv .venv -source .venv/bin/activate # On Windows: .venv\Scripts\activate - -# Install dependencies -pip install -e ".[dev]" -``` - -## Dependencies - -| Package | Purpose | -|---------|---------| -| cadquery | High-level OpenCASCADE Python bindings | -| ocp | Low-level OpenCASCADE Python bindings | -| pygfx | WebGPU-based 3D renderer | -| wgpu | WebGPU Python bindings | -| PySide6 | Qt GUI framework | -| numpy | Numerical computing | -| scipy | Scientific computing | - -## Usage - -```bash -# Run the application -fluency-cad - -# Or directly -python -m fluency.main -``` - -## API Example - -```python -from fluency.geometry_occ.kernel import OCGeometryKernel -from fluency.geometry.base import Point2D - -# Create kernel -kernel = OCGeometryKernel() - -# Create a sketch -points = [ - Point2D(0, 0), - Point2D(10, 0), - Point2D(10, 10), - Point2D(0, 10), -] -polygon = kernel.create_polygon(points) - -# Extrude to 3D -body = kernel.extrude(polygon, height=20.0) - -# Apply fillet -body = kernel.fillet(body, radius=2.0) - -# Export to STEP -kernel.export_step(body, "part.step") - -# Export to STL -kernel.export_stl(body, "part.stl") -``` - -## Comparison: Before vs After - -| Aspect | Before (SDF + VTK) | After (OCC + pygfx) | -|--------|-------------------|---------------------| -| Geometry Precision | Approximate (mesh) | Exact (BRep) | -| Export Formats | STL only | STEP, IGES, STL, BREP | -| File Size | Large (mesh) | Small (BRep) | -| Fillet/Chamfer | Approximate | Exact | -| Dependency Size | ~200MB (VTK) | ~30MB (pygfx) | -| Constraint Solver | SolveSpace (separate) | CadQuery (integrated) | - -## License - -MIT License diff --git a/src/fluency_cad.egg-info/SOURCES.txt b/src/fluency_cad.egg-info/SOURCES.txt deleted file mode 100644 index 67d87c7..0000000 --- a/src/fluency_cad.egg-info/SOURCES.txt +++ /dev/null @@ -1,23 +0,0 @@ -README.md -pyproject.toml -src/fluency/__init__.py -src/fluency/main.py -src/fluency/geometry/__init__.py -src/fluency/geometry/base.py -src/fluency/geometry_occ/__init__.py -src/fluency/geometry_occ/kernel.py -src/fluency/geometry_occ/sketch.py -src/fluency/models/__init__.py -src/fluency/models/data_model.py -src/fluency/rendering/__init__.py -src/fluency/rendering/base.py -src/fluency/rendering/pygfx_renderer.py -src/fluency/utils/__init__.py -src/fluency/widgets/__init__.py -src/fluency_cad.egg-info/PKG-INFO -src/fluency_cad.egg-info/SOURCES.txt -src/fluency_cad.egg-info/dependency_links.txt -src/fluency_cad.egg-info/entry_points.txt -src/fluency_cad.egg-info/requires.txt -src/fluency_cad.egg-info/top_level.txt -tests/test_geometry.py \ No newline at end of file diff --git a/src/fluency_cad.egg-info/dependency_links.txt b/src/fluency_cad.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/src/fluency_cad.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/fluency_cad.egg-info/entry_points.txt b/src/fluency_cad.egg-info/entry_points.txt deleted file mode 100644 index 5a75165..0000000 --- a/src/fluency_cad.egg-info/entry_points.txt +++ /dev/null @@ -1,2 +0,0 @@ -[console_scripts] -fluency-cad = fluency.main:main diff --git a/src/fluency_cad.egg-info/requires.txt b/src/fluency_cad.egg-info/requires.txt deleted file mode 100644 index bf2ecea..0000000 --- a/src/fluency_cad.egg-info/requires.txt +++ /dev/null @@ -1,13 +0,0 @@ -cadquery>=2.4 -pygfx>=0.1.0 -wgpu>=0.1.0 -PySide6>=6.4.0 -numpy>=1.24.0 -scipy>=1.10.0 -pillow>=10.0.0 - -[dev] -pytest>=8.0 -black>=24.0 -mypy>=1.8 -ruff>=0.4.0 diff --git a/src/fluency_cad.egg-info/top_level.txt b/src/fluency_cad.egg-info/top_level.txt deleted file mode 100644 index cf4e381..0000000 --- a/src/fluency_cad.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -fluency diff --git a/tests/__pycache__/test_geometry.cpython-312-pytest-9.0.2.pyc b/tests/__pycache__/test_geometry.cpython-312-pytest-9.0.2.pyc deleted file mode 100644 index 708d10e239d8b9371f78b326b48e9b0c79b4c333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24097 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