Assembly Anchors
How the parts of a machining scene are held together. Assembly in HiNC is not a placement step but a statement of coincidence: two named anchors are declared equal, and everything they belong to moves so that they are. The machine tool, the fixture and the workpiece each own a free topology and name which of their own anchors play their roles; the tool's mounts are fixed anchors. The equipment joins the roles of neighbouring parts, and those joints are the mounts below.
Ordered from what an anchor is, to the roles each part names, to the two joints built out of them.
What an Anchor Is
Anchors are used for assembly purposes. When anchors between geometries coincide, assembly is completed.
Strictly speaking, an Anchor is not a point, but a coordinate system. For two coordinate systems to be equal, their origins must coincide and their rotation directions must be the same.
Note
Anchor Assembly Example
As shown in the figure below, there are two components, each with two anchors, {AnchorA,AnchorB} and {AnchorC,AnchorD} respectively.
The two components are assembled by making AnchorB and AnchorC coincide.

Roles: Which Anchor Plays Which Part
A part's topology is free — any anchors, branches and transformers — so the part itself says which of its elements the equipment may join to. A role is a settable property that accepts any element of the part's own assembly, or null to unbind; an element outside the assembly is refused. Nothing else is checked on assignment: a part may live with a role unbound, and whether it is complete is judged where it matters — the equipment attaches only the bound roles, and a run stops at its start naming a missing one.
| Part | Roles | Kind |
|---|---|---|
| Machine tool (GeneralXyzabcMachineTool) | TableMount, ToolMount | anchors |
| AxisX … AxisC | branches; X, Y, Z carry a DynamicTranslation, A, B, C a DynamicRotation | |
| Spindle | branch; a DynamicRotation about the tool mount's −Z through its origin — not a machine coordinate; a file that records no spindle finds it by topology, the branch arriving where the tool mount hangs from | |
| Fixture (Fixture) | TableMount, WorkpieceMount, GeomAnchor | anchors |
| Workpiece (Workpiece) | FixtureMount, ProgramZeroAnchor, GeomAnchor | anchors |
The two GeomAnchor roles are not joints: the fixture's is the anchor its solid hangs on and the
anchor collision is checked at, and the workpiece's is the frame its stock and target geometry are
given in. ProgramZeroAnchor is the frame the NC program is written in. A machine built from chain
code binds its mounts by name — the end anchors w and t — as described in
Machine Chain Code.
The fixture and the workpiece each have a default shape that binds all of their roles
(CreateDefault(API),
CreateDefault(API)): the fixture's root is its
GeomAnchor, carrying an empty solid, with one identity branch to TableMount and one to
WorkpieceMount; the workpiece's root is its FixtureMount, and from its GeomAnchor one zero
translation branch leads to FixtureMount and one to ProgramZeroAnchor. Each default branch is
named after the anchor it arrives at. A file saved without an embedded topology loads onto this shape.
Worktable Anchor and Workpiece Anchor
The machine's TableMount is its worktable end. The fixture's TableMount meets it, and the
fixture's WorkpieceMount meets the workpiece's FixtureMount — so this joint is made of two
anchors each named after the other part.
Only the worktable attachment — machine TableMount to fixture TableMount — carries a transform:
the equipment's TableToComp, which is
where the fixture is placed on the table. The fixture-to-workpiece attachment carries none: it is plain
coincidence. Where the fixture's geometry sits relative to its two mounts, and where the workpiece's
geometry and program zero sit relative to its fixture mount, are the parts' own branches — read or
written as Branch.Get(fixture.GeomAnchor, fixture.TableMount).Transformer and
Branch.Get(workpiece.GeomAnchor, workpiece.ProgramZeroAnchor).Transformer
(see Handle Transform Matrix by ITransformer).
Note
Workpiece Fixture Assembly Example
Workpiece and fixture are assembled by making the fixture's WorkpieceMount and the workpiece's FixtureMount coincide.

If no fixture is set, both fixture anchors drop out and the machine's TableMount meets the
workpiece's FixtureMount directly, carrying the same TableToComp transform.
The equipment builds these attachment branches itself and rebuilds them whole whenever a part or a role changes (Rewire(API), implemented in EquipmentWiring): every attachment is detached, then each one whose two anchors are bound is attached again. An unbound role simply gets no attachment.
Spindle Anchor and Cutter Anchor
The machine's ToolMount is its tool end, and it meets the SpindleMount of the tool as a whole.
Inside that tool the holder sits between spindle and cutter: the tool's SpindleMount meets the
holder's own SpindleMount, and the holder's CutterMount meets the cutter's mount anchor
(Mount).
If no holder is set, both holder anchors drop out and the tool's SpindleMount meets the cutter's Mount directly. The machine-side joint is the same either way.
See Also
- Kinematic Topology — the anchor, branch and assembly classes this convention is expressed in
- Handle Transform Matrix by ITransformer — the transformer a branch carries, and how to reach it between two role anchors
- Machine Chain Code — the notation whose
wandtkeywords bind a machine's two mount roles - Anchors and Roles — where these roles are bound and the attachments edited in the application
- Program Zero Alignment — aligning the program origin onto these anchors