ModeRec:
TYPE =
RECORD [
decoration: CoreGeometry.Decoration, -- to store/retrieve decorations
extractProcProp: ATOM, -- must be the key of an ExtractProc previously registered
equalProc: PROC [Object, CD.PropList, REF, CD.PropList, REF] RETURNS [BOOL], -- called with the properties and userData for the previous call and the ones for this call and returns TRUE if they are "Equal".
nbOfLayers: NAT ← 1, -- determines the number of interesting layers corresponding to subinstances of obj. Efficiency hack: should be defaulted for clients unaware of implementation details.
instanceLayer: PROC [CD.Instance] RETURNS [LayerRange], -- determines the [min .. max] layers corresponding to a subinstance of obj. Efficiency hack: should be set to DefaultInstanceLayer for clients unaware of implementation details.
userData: PROC [CD.Design] RETURNS [REF] ← NIL, -- Return the default user data according to current design (used by Sisyph)
fusionByName: FusionByNameMethod ← layout, -- Specifies which kind of fusion by name should be done [this is slightly orthogonal to the concept of mode-independent extraction, but life is hard].
touchProc: CoreGeometry.TouchProc -- Specifies if two decorations touch and provoke a geometric fusion.
];