b123d-recognisers
Recover useful engineering features from imported STEP and boundary-representation (B-Rep) geometry.
A STEP file normally gives a CAD application faces, edges, and solids, but not the design intent
that produced them. b123d-recognisers analyses that topology and returns deterministic semantic
records for features such as holes and counterbores, bosses, slots, pockets, pads, fillets,
chamfers, grooves, hole and pocket patterns, and turned steps. The records contain ordinary,
JSON-serialisable geometry values rather than build123d or OCP objects.
Recognition classifies faces by analytic surface type, so imported geometry must arrive with its
planes, cylinders and cones intact. STEP carries them, and every pinned fixture is proven to
survive an export and re-import unchanged. Geometry delivered entirely as B-splines is outside the
proven domain; see docs/capabilities.md.
That makes the library a useful foundation for systems which inspect, classify, annotate, compare, or modify imported CAD. For example, a STEP editor can recognise a hole, present its diameter and axis as editable intent, and use those values to drive its own topology-editing operation. The recognisers recover evidence; the consuming CAD system decides what that evidence means and how an edit should be performed.
The package is Apache-2.0 licensed and independent of any drawing or editing application. It uses build123d/OCP internally as its B-Rep kernel, but its purpose is recovering meaning from geometry whose construction history is not available.
Recognise an imported model
Import a STEP file with build123d, then run the shared recognition orchestration to obtain one consistent feature inventory:
from build123d import import_step
from b123d_recognisers import build_recognition_result
part = import_step("gearbox-housing.step")
result = build_recognition_result(part)
for hole in result.holes:
print(hole.location, hole.axis, hole.diameter, hole.depth, hole.bottom)
build_recognition_result() shares intermediate geometric analysis across recognisers and is the
usual entry point for a CAD application. Its frozen result can be inspected directly or projected
to JSON-compatible dictionaries for storage, indexing, comparison, or an editing pipeline.
Individual recognisers are also public when an application needs a narrower answer. Reusable evidence can be injected explicitly so it is not rediscovered:
from b123d_recognisers import analyse_cylinders, recognise_hole_patterns, recognise_holes
cylinders = analyse_cylinders(part)
holes = recognise_holes(part, cyls=cylinders)
patterns = recognise_hole_patterns(holes)
Every recognise_* function returns a deterministic list of frozen dataclass records. Records
provide to_dict() projections containing only JSON-serialisable geometry values. The installed
package also exposes a versioned capability manifest so larger CAD systems can validate which
recognisers and record schemas they consume. See
docs/capabilities.md for the proven feature inventory and
docs/adr/0002-uniform-deterministic-recogniser-contract.md
for the complete contract.
Project an aggregate step ladder
The aggregate owns the one geometry-only rule that chooses between Z-turned shoulders and already filtered prismatic levels. Pass only the Z envelope it needs; no build123d object crosses this projection boundary:
z_min = part.bounding_box().min.Z
z_max = part.bounding_box().max.Z
step_zs = result.step_ladder_for_z_span(z_min, z_max)
The default boundary_margin=0.6 is measured in model length units (normally millimetres) and
strictly excludes turned end faces at both ends. It can be overridden explicitly. The former
result.step_ladder(bound_box) call remains as a deprecated 0.2.x compatibility shim and will be
removed no earlier than 1.0.0. See
ADR 0006 for the caller inventory and boundary
decision.
Scope
Feature recognition is deliberately separate from feature editing. This package reports geometric facts; it does not mutate the source model, guess manufacturing intent, or prescribe a downstream CAD representation. That boundary lets an editor, drawing engine, CAM tool, model checker, or search/indexing service adopt the same recognition layer while retaining its own policy.
b123d-recognisers began as the recognition layer of
Draftwright, but the runtime package does not import
Draftwright and is designed for standalone use.
Migrated behavior
The initial 0.1 release series preserves the recognition behavior of Draftwright commit
3fe20b0f71a71deced06b310943dd44cc66e355e. The migration includes every public recogniser,
shared cylinder/level substrates, the aggregate result, and feature_census. There are no feature
policy changes; one previously platform-dependent numerical axis tie is normalized to the pinned
baseline result. The checked-in semantic corpus records and continuously verifies the compatibility
boundary; see migration/PARITY.md.
The dependency direction is:
consumer → b123d-recognisers → build123d/OCP
The runtime package does not import Draftwright and does not return build123d or OCP objects in public feature records.
Contributors: see Adding a recogniser for the AAG predicate, candidate/evidence, registry, reconciliation, and verification path.
Maintainers: see the release guide for the TestPyPI-first, OIDC-only publication process.
Licence
Apache License 2.0. See LICENSE, NOTICE, and
THIRD_PARTY_NOTICES.md.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file b123d_recognisers-0.4.2.tar.gz.
File metadata
- Download URL: b123d_recognisers-0.4.2.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ca7827804fe0ae3e9767daaf571805b730dda7abf4d0b51e013ad2829c04ef3
|
|
| MD5 |
b65648261ba0da2aeebd86e0c909dd9c
|
|
| BLAKE2b-256 |
951c968350d87c664dfcc967066e4fa8fbcf0af077c7f63db71cfcb9b294d309
|
Provenance
The following attestation bundles were made for b123d_recognisers-0.4.2.tar.gz:
Publisher:
publish.yml on pzfreo/b123d-recognisers
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
b123d_recognisers-0.4.2.tar.gz -
Subject digest:
7ca7827804fe0ae3e9767daaf571805b730dda7abf4d0b51e013ad2829c04ef3 - Sigstore transparency entry: 2615684940
- Sigstore integration time:
-
Permalink:
pzfreo/b123d-recognisers@6354dee86dc0e03d0e2b1b776bc4043b123f0a3e -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/pzfreo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6354dee86dc0e03d0e2b1b776bc4043b123f0a3e -
Trigger Event:
release
-
Statement type:
File details
Details for the file b123d_recognisers-0.4.2-py3-none-any.whl.
File metadata
- Download URL: b123d_recognisers-0.4.2-py3-none-any.whl
- Upload date:
- Size: 333.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac306d0451e23574792c4f8a6b2d9273784775a8d99aaf976684ee8eafe97401
|
|
| MD5 |
ad2a7b7e8805df0bf9a1b5353734b47a
|
|
| BLAKE2b-256 |
04458d3deb343ce714a9c0f1eef76027cdd52a6e718373c71a13b7f0db494c09
|
Provenance
The following attestation bundles were made for b123d_recognisers-0.4.2-py3-none-any.whl:
Publisher:
publish.yml on pzfreo/b123d-recognisers
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
b123d_recognisers-0.4.2-py3-none-any.whl -
Subject digest:
ac306d0451e23574792c4f8a6b2d9273784775a8d99aaf976684ee8eafe97401 - Sigstore transparency entry: 2615685104
- Sigstore integration time:
-
Permalink:
pzfreo/b123d-recognisers@6354dee86dc0e03d0e2b1b776bc4043b123f0a3e -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/pzfreo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6354dee86dc0e03d0e2b1b776bc4043b123f0a3e -
Trigger Event:
release
-
Statement type: