Metadata-Version: 2.4
Name: bimforge
Version: 0.1.87
Summary: Standalone CAD/BIM toolkit: DXF -> IFC -> takeoff pipeline, sheet production, org-neutral CAD engine.
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/BrandonLewis/BIMForge
Project-URL: Source, https://github.com/BrandonLewis/BIMForge
Project-URL: Changelog, https://github.com/BrandonLewis/BIMForge/blob/main/CHANGELOG.md
Project-URL: Security, https://github.com/BrandonLewis/BIMForge/security/policy
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE
Requires-Dist: pyyaml
Requires-Dist: ezdxf
Requires-Dist: ifcopenshell<0.10,>=0.9
Requires-Dist: shapely
Requires-Dist: pyproj
Requires-Dist: numpy
Provides-Extra: bim
Requires-Dist: pymupdf; extra == "bim"
Provides-Extra: draw
Requires-Dist: matplotlib; extra == "draw"
Provides-Extra: solids
Requires-Dist: build123d; extra == "solids"
Provides-Extra: xlsx
Requires-Dist: openpyxl; extra == "xlsx"
Provides-Extra: terrain
Requires-Dist: pillow; extra == "terrain"
Requires-Dist: scipy; extra == "terrain"
Requires-Dist: laspy[lazrs]; extra == "terrain"
Requires-Dist: trimesh; extra == "terrain"
Requires-Dist: manifold3d; extra == "terrain"
Requires-Dist: networkx; extra == "terrain"
Provides-Extra: all
Requires-Dist: pymupdf; extra == "all"
Requires-Dist: matplotlib; extra == "all"
Requires-Dist: build123d; extra == "all"
Requires-Dist: openpyxl; extra == "all"
Dynamic: license-file

# bimforge

A standalone CAD/BIM toolkit in Python: measure 2D plan sheets, author
parametric IFC models, roll them up into quantities, stage them in 4D/5D, and
produce control, layout and structure sheets — with no dependency on any
estimating product.

- **`bimforge.bim`** — DXF → IFC authoring (IFC4X3 by default, exact
  extrusions and alignment sweeps), IFC → quantity takeoff, plan-sheet
  calibration and vector measurement, georeferencing, 3D KML/KMZ for Google
  Earth, 4D schedule embed/read-back (`IfcWorkSchedule`) and 5D cost and
  resource loading (`IfcCostSchedule`). Schedule readers for GanttWarrior JSON,
  Primavera P6 XER and MS Project MSPDI live here too.
- **`bimforge.author`** — the structure-family kernel: alignments, section
  prisms, battered walls, reinforcing bars, plates, saddles, spillways,
  standard-plan families, with quantities taken from the emitted geometry and
  never from a parallel formula.
- **`bimforge.sheets`** and **`bimforge.cad`** — sheet production and the
  org-neutral DXF/KML/geo engine, styled by pluggable **style packs**.
- **`bimforge.terrain`** — terrain grids, watertight terrain solids and
  excavation carves from point clouds and contours.

## Install

```bash
pip install bimforge            # IFC stack included (ifcopenshell, ezdxf, shapely, pyproj, numpy)
pip install 'bimforge[all]'     # + PDF plan sheets, matplotlib drawing, build123d exact solids
pip install 'bimforge[terrain]' # + point-cloud / mesh terrain
```

Two CLIs ship with the package:

```bash
est-bim --help      # dxf2bim, ifc2dxf, takeoff, schedule, cost5d, kml, calibrate, measure, build, ...
est-sheets --help   # control / layout / structure sheet production
```

## Style packs

CAD styling (title-block borders, layer colours, KML and IFC surface styles)
comes from a *style pack*: a package or directory with `templates/*.dxf` and an
optional `styles.yaml`. Resolution is explicit argument → registered providers
→ built-in neutral defaults. Any installed distribution can register a provider
through the `bimforge.style_packs` entry-point group (a zero-argument callable
returning a pack spec or `None`); bimforge never imports the provider's package
by name.

## Fixture provenance

Test fixtures cite public sources or derive their quantities in-repo. They
carry no employer bid numbers and no working-directory paths, and CI's
de-org scan refuses a change that adds one.

## License

Apache-2.0. See `LICENSE` and `NOTICE`. Security reports: `SECURITY.md`.
