This guide helps CAM API developers move from the legacy Model Override surface selector to the Machine Avoid Surface Groups table introduced in Fusion 360 CAM (October 2022, CAM-39723).
Model override (overrideModel, model, includeSetupModel) is scheduled for
deprecation. Surface assignment for 3D toolpaths is consolidating into the machine avoid geometry
table (checkSurfaceSelectionSets).
| Legacy (Model Override) | Current (Machine Avoid Surface Groups) | |
|---|---|---|
| Parameter | model |
checkSurfaceSelectionSets |
| API value type | CadObjectParameterValue |
CadMachineAvoidGroupsParameterValue |
| UI | Flat face/body picker | Geometry table with groups, modes, and clearances |
| Introduced | August 2014 | October 2022 |
| Status | Deprecated (forthcoming release) | Supported |
Fusion displays a deprecation notice for model override: "Model override to be deprecated in forthcoming release" (MFG-DEPRECATE-MODEL-OVERRIDE).
The machine avoid surface groups API provides:
If your automation sets overrideModel, includeSetupModel, or model, plan to migrate to checkSurfaceSelectionSets before model override is removed.
These selectors answer different questions, but model override geometry now feeds the Model default group in the machine avoid table.
| Question | Legacy answer | New answer |
|---|---|---|
| Which geometry is the machinable model? | overrideModel + model + includeSetupModel |
Model default group (DefaultGroupType.Model_GroupType) |
| Which surfaces should the tool avoid? | Not supported (or legacy checkSurfaceSelection in Avoid mode) |
User Avoid group or Model/Fixture default group in Avoid mode |
| Which surfaces must the tool machine? | Not supported | User Machine group |
| How much clearance / stock to leave? | Global check surface clearance only | Per-group radialOffset, axialOffset, or combinedOffset |
The Model default group contains "surfaces belonging to the model. These have been defined in the setup or using the model override selector" (API: DefaultGroupType.Model_GroupType).
When you change model override selections today, the Model group in checkSurfaceSelectionSets updates automatically. Your API code should eventually target the machine avoid table directly rather than the legacy model parameter.
# Enable model override
operation.parameters.itemByName('overrideModel').value.value = True
# Include setup model geometry alongside override surfaces
operation.parameters.itemByName('includeSetupModel').value.value = True
# Set override surfaces (flat list of faces, bodies, or occurrences)
model_param: adsk.cam.CadObjectParameterValue = operation.parameters.itemByName('model').value
model_param.value = [face1, face2, body1]
surface_groups_param: adsk.cam.CadMachineAvoidGroupsParameterValue = \
operation.parameters.itemByName('checkSurfaceSelectionSets').value
groups: adsk.cam.MachineAvoidGroups = surface_groups_param.getMachineAvoidGroups()
# User-defined group (read/write geometry)
user_group: adsk.cam.MachineAvoidDirectSelection = \
groups.createNewMachineAvoidDirectSelectionGroup()
user_group.machineMode = adsk.cam.MachiningMode.Avoid_MachiningMode
user_group.radialOffset = 0.2
user_group.axialOffset = 0.3
user_group.inputGeometry = [face1, face2]
# Default group (read-only geometry, read/write mode and offsets)
model_group = groups.defaultGroup(adsk.cam.DefaultGroupType.Model_GroupType)
if model_group:
model_group.machineMode = adsk.cam.MachiningMode.Machine_MachiningMode
model_group.radialOffset = 0.1
# Required — persist all changes
surface_groups_param.applyMachineAvoidGroups(groups)
Critical rule: Changes to MachineAvoidGroups are in-memory until you call applyMachineAvoidGroups(). Skipping this call silently discards your edits.
Before (model override): Include setup model and add extra faces (e.g. surfaces over holes to be drilled later).
params = operation.parameters
params.itemByName('overrideModel').value.value = True
params.itemByName('includeSetupModel').value.value = True
params.itemByName('model').value.value = capping_faces
After (machine avoid groups): Create a Machine user group for the capping surfaces. Leave the Model default group to represent setup model geometry.
surface_groups_param = operation.parameters.itemByName('checkSurfaceSelectionSets').value
groups = surface_groups_param.getMachineAvoidGroups()
capping_group = groups.createNewMachineAvoidDirectSelectionGroup()
capping_group.machineMode = adsk.cam.MachiningMode.Machine_MachiningMode
capping_group.radialOffset = 0.0 # stock to leave on capped surfaces
capping_group.axialOffset = 0.0
capping_group.inputGeometry = capping_faces
capping_group.machineOverHoles = True
surface_groups_param.applyMachineAvoidGroups(groups)
Before: Disable include-setup-model and set override surfaces only.
params.itemByName('overrideModel').value.value = True
params.itemByName('includeSetupModel').value.value = False
params.itemByName('model').value.value = replacement_faces_or_bodies
After: Assign replacement geometry to a Machine user group. Set the Model default group mode to Gouge (Ignore) so setup model surfaces are not actively machined or avoided, or remove them from consideration depending on strategy.
groups = surface_groups_param.getMachineAvoidGroups()
replacement_group = groups.createNewMachineAvoidDirectSelectionGroup()
replacement_group.machineMode = adsk.cam.MachiningMode.Machine_MachiningMode
replacement_group.inputGeometry = replacement_faces_or_bodies
model_group = groups.defaultGroup(adsk.cam.DefaultGroupType.Model_GroupType)
if model_group:
model_group.machineMode = adsk.cam.MachiningMode.Gouge_MachiningMode
surface_groups_param.applyMachineAvoidGroups(groups)
Strategy-specific behavior varies. Validate toolpaths after migration — some strategies treat the Model group differently (e.g. Flow uses Model-Avoid and Drive-Machine by default).
After Model Override is deprecated, model selection should be treated as equivalent whether you read it from:
Source A: Setup model selection
setup_models = setup.models
Source B: Machine/Avoid Model default group
groups = operation.parameters.itemByName('checkSurfaceSelectionSets').value.getMachineAvoidGroups()
model_group = groups.defaultGroup(adsk.cam.DefaultGroupType.Model_GroupType)
if model_group:
model_faces = model_group.inputGeometry # read-only
Migration note: Use setup model selection or the checkSurfaceSelectionSets Model group interchangeably as the operation model source. For migrated scripts, these should represent the same intended model geometry after Model Override deprecation.
Before the migration, the model selection could have been overridden by manually setting the model selection using:
legacy_model_faces = operation.parameters.itemByName('model').value.value
Identify affected operations — Surface-based 3D strategies (Parallel, Scallop, Pocket, Adaptive, Steep and Shallow, etc.) that use overrideModel or model.
Check strategy support — Confirm the operation exposes checkSurfaceSelectionSets. Not all strategies support every group type or machining mode combination; applyMachineAvoidGroups() may throw if a mode is disallowed.
Map each model override use case to a machine avoid group (see scenarios above).
Replace flat selection writes — Stop setting model.value; use MachineAvoidDirectSelection.inputGeometry instead.
Configure default groups — Use defaultGroup(DefaultGroupType.Model_GroupType) and defaultGroup(DefaultGroupType.Fixture_GroupType) for setup-driven geometry. Adjust machineMode and offsets as needed.
Call applyMachineAvoidGroups() after every modification batch.
Call sync() when setup changes — If setup model or fixture selections change, call groups.sync() after applyMachineAvoidGroups() to refresh default groups on the API side.
Regenerate and validate toolpaths — Compare results against the legacy configuration before deploying automation changes.
Remove legacy parameter access — Once validated, delete code that references overrideModel, includeSetupModel, and model.
MachineAvoidDefaultSelection.inputGeometry is read-only. You cannot assign faces to the Model or Fixture default groups directly through the API. Geometry comes from setup parameters and (during the transition) model override.
Assign additional surfaces through user groups (createNewMachineAvoidDirectSelectionGroup).
| Mode | radialOffset / axialOffset meaning |
|---|---|
| Avoid | Clearance — tool stays this distance away |
| Machine | Stock to leave — material remaining on the surface |
| Fixture | Fixture clearance |
| Gouge | Offsets typically not used |
Some strategies use combinedOffset instead of separate radial/axial values (Deburr, Geodesic, Advanced Swarf, Multi-Axis Clearing/Finishing).
Surface groups are mutually exclusive — a face belongs to one group at a time. Adding a face to a new group removes it from any previous group.
During the deprecation period, model override and machine avoid groups coexist. Changing model updates the Model default group in the table. New automation should write to checkSurfaceSelectionSets only.
Check group.hasWarning before applying groups. Invalid geometry (e.g. edges instead of faces) may produce warnings. Wrap applyMachineAvoidGroups() in try/except — disallowed mode/strategy combinations raise exceptions.
The checkSurfaceSelectionSets parameter is available on 3D strategies that support check surfaces, including:
Model override (model) applies to all surface-based strategies. When migrating, verify your target strategy exposes both parameters during the transition, then target checkSurfaceSelectionSets only.
import adsk.core, adsk.cam
def configure_legacy_model_override(operation, capping_faces):
params = operation.parameters
params.itemByName('overrideModel').value.value = True
params.itemByName('includeSetupModel').value.value = True
params.itemByName('model').value.value = capping_faces
import adsk.core, adsk.cam
def configure_machine_avoid_groups(operation, capping_faces, surfaces_to_avoid):
surface_groups_param = operation.parameters.itemByName('checkSurfaceSelectionSets').value
groups = surface_groups_param.getMachineAvoidGroups()
# Capping surfaces → Machine user group
capping_group = groups.createNewMachineAvoidDirectSelectionGroup()
capping_group.machineMode = adsk.cam.MachiningMode.Machine_MachiningMode
capping_group.inputGeometry = capping_faces
capping_group.machineOverHoles = True
# Surfaces to keep clear of → Avoid user group
avoid_group = groups.createNewMachineAvoidDirectSelectionGroup()
avoid_group.machineMode = adsk.cam.MachiningMode.Avoid_MachiningMode
avoid_group.radialOffset = 0.2
avoid_group.axialOffset = 0.3
avoid_group.inputGeometry = surfaces_to_avoid
# Model default group — setup model, mode configurable
model_group = groups.defaultGroup(adsk.cam.DefaultGroupType.Model_GroupType)
if model_group:
model_group.machineMode = adsk.cam.MachiningMode.Machine_MachiningMode
surface_groups_param.applyMachineAvoidGroups(groups)